gcl.git - GNU Common Lisp

index : gcl.git
GNU Common Lisp
summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat
-rwxr-xr-xgcl/configure 5
-rw-r--r--gcl/configure.in 5
-rw-r--r--gcl/h/unrandomize.h 39
3 files changed, 28 insertions, 21 deletions
diff --git a/gcl/configure b/gcl/configure
index 86c05e070..ab9c0f542 100755
--- a/gcl/configure
+++ b/gcl/configure
@@ -7622,7 +7622,6 @@ else
#include <stdio.h>
#include <stdlib.h>
- int *cs_org=0;
void gprof_cleanup() {};
int main(int argc,char **argv,char **envp) {
#include "h/unrandomize.h"
@@ -7657,7 +7656,6 @@ else
#include <stdio.h>
#include <stdlib.h>
- int *cs_org=0;
void gprof_cleanup() {};
int main(int argc,char **argv,char **envp) {
FILE *f;
@@ -7691,7 +7689,6 @@ else
#include <stdio.h>
#include <stdlib.h>
- int *cs_org=0;
void gprof_cleanup() {};
int main(int argc,char **argv,char **envp) {
FILE *f;
@@ -8033,7 +8030,6 @@ else
#include <stdlib.h>
#include <unistd.h>
#include <stdlib.h>
- int *cs_org=0;
void gprof_cleanup() {};
int main(int argc,char **argv,char **envp) {
@@ -8194,7 +8190,6 @@ else
}
void gprof_cleanup() {};
- int *cs_org;
int main(int argc,char **argv,char **envp) {
void *v ;
FILE *fp = fopen("conftest1","w");
diff --git a/gcl/configure.in b/gcl/configure.in
index 5d1ca8d7c..296fe356e 100644
--- a/gcl/configure.in
+++ b/gcl/configure.in
@@ -1383,7 +1383,6 @@ if test "$HAVE_SBRK" = "1" ; then
AC_LANG_SOURCE([[
#include <stdio.h>
#include <stdlib.h>
- int *cs_org=0;
void gprof_cleanup() {};
int main(int argc,char **argv,char **envp) {
#include "h/unrandomize.h"
@@ -1397,7 +1396,6 @@ if test "$HAVE_SBRK" = "1" ; then
AC_LANG_SOURCE([[
#include <stdio.h>
#include <stdlib.h>
- int *cs_org=0;
void gprof_cleanup() {};
int main(int argc,char **argv,char **envp) {
FILE *f;
@@ -1415,7 +1413,6 @@ if test "$HAVE_SBRK" = "1" ; then
AC_LANG_SOURCE([[
#include <stdio.h>
#include <stdlib.h>
- int *cs_org=0;
void gprof_cleanup() {};
int main(int argc,char **argv,char **envp) {
FILE *f;
@@ -1565,7 +1562,6 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdlib.h>
#include <unistd.h>
#include <stdlib.h>
- int *cs_org=0;
void gprof_cleanup() {};
int main(int argc,char **argv,char **envp) {
@@ -1649,7 +1645,6 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[
}
void gprof_cleanup() {};
- int *cs_org;
int main(int argc,char **argv,char **envp) {
void *v ;
FILE *fp = fopen("conftest1","w");
diff --git a/gcl/h/unrandomize.h b/gcl/h/unrandomize.h
index 6618d6e1c..0cb6020e3 100644
--- a/gcl/h/unrandomize.h
+++ b/gcl/h/unrandomize.h
@@ -5,7 +5,6 @@
#include <alloca.h>
#include <errno.h>
-
{
errno=0;
@@ -20,20 +19,38 @@
if ((pers & flag)!=flag && !getenv("GCL_UNRANDOMIZE")) {
errno=0;
if (personality(pers | flag) != -1 && (personality(0xffffffffUL) & flag)==flag) {
- int i;
+ int i,j,k;
char **n,**a;
- extern int *cs_org;
- cs_org=(void *)&flag;/*get right stack for potential gc in malloc*/
- for (i=0;envp[i];i++);
- n=malloc((i+2)*sizeof(*n));
- n[i+1]=0;
- n[i--]="GCL_UNRANDOMIZE=t";
- for (;i>=0;i--)
- n[i]=strdup(envp[i]);
+ void *v;
+ for (i=j=0;argv[i];i++)
+ j+=strlen(argv[i])+1;
+ for (k=0;envp[k];k++)
+ j+=strlen(envp[k])+1;
+ j+=(i+k+3)*sizeof(char *);
+ if ((v=sbrk(j))==(void *)-1) {
+ printf("Cannot brk environment space\n");
+ exit(-1);
+ }
+ a=v;
+ v=a+i+1;
+ n=v;
+ v=n+k+2;
+ for (i=0;argv[i];i++) {
+ a[i]=v;
+ strcpy(v,argv[i]);
+ v+=strlen(v)+1;
+ }
+ a[i]=0;
+ for (k=0;envp[k];k++) {
+ n[k]=v;
+ strcpy(v,envp[k]);
+ v+=strlen(v)+1;
+ }
+ n[k]="GCL_UNRANDOMIZE=t";
+ n[k+1]=0;
#ifdef GCL_GPROF
gprof_cleanup();
#endif
- for (i=0;argv[i];i++);a=malloc((i+1)*sizeof(*argv));for (i=0;argv[i];i++) a[i]=strdup(argv[i]);a[i]=0;
errno=0;
execve(*a,a,n);
printf("execve failure %d\n",errno);
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月02日 19:54:50 +0000

AltStyle によって変換されたページ (->オリジナル) /