author | Camm Maguire <camm@debian.org> | 2014年09月05日 10:32:09 -0400 |
---|---|---|
committer | Camm Maguire <camm@debian.org> | 2014年09月05日 10:32:09 -0400 |
commit | 9d29d4a59066ec7b7bf9d356fe470cf6ce52e76c (patch) | |
tree | de78d10216b40a384d1ff1fec1b06d8198476942 | |
parent | 9b7770107a39773566227dacf6bad297e7cad3f4 (diff) | |
download | gcl-9d29d4a59066ec7b7bf9d356fe470cf6ce52e76c.tar.gz |
-rwxr-xr-x | gcl/configure | 44 | ||||
-rw-r--r-- | gcl/configure.in | 30 | ||||
-rw-r--r-- | gcl/h/gclincl.h.in | 4 | ||||
-rwxr-xr-x | gcl/o/read.d | 11 |
diff --git a/gcl/configure b/gcl/configure index a7c6eb716..66bd4ee55 100755 --- a/gcl/configure +++ b/gcl/configure @@ -4282,7 +4282,11 @@ done # Work around system/gprof mips/hppa hang +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking working gprof" >&5 +$as_echo_n "checking working gprof... " >&6; } +old_enable_gprof=enable_gprof case $use in + powerpc*) if test "$host_cpu" = "powerpc64le" ; then enable_gprof="no"; fi;; sh4*) enable_gprof="no";; ia64*) enable_gprof="no";; # mips*) enable_gprof="no";; @@ -4290,6 +4294,13 @@ case $use in arm*) enable_gprof="no";;#FIXME mcount compiled as a 24/22 bit reloc even with -mlong-calls, marginally accessible *gnu) enable_gprof="no";; esac +if test "$enable_gprof" = "$old_enable_gprof" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } +fi if test "$enable_gprof" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for text start" >&5 @@ -7791,8 +7802,8 @@ else fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken windows sscanf" >&5 -$as_echo_n "checking for broken windows sscanf... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for buggy maximum sscanf length" >&5 +$as_echo_n "checking for buggy maximum sscanf length... " >&6; } if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} @@ -7803,25 +7814,37 @@ else /* end confdefs.h. */ - int main() { - char *s= "2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966290435729003342952605956307381323286279434907632338298807531952510190115738341879307021540891499348841675092447614606680822648001684774118537423454424371075390777449920695517027618386062613313845830007520449338265602976067371132007093287091274437470472306969772093101416928368190255151086574637721112523897844250569536967707854499699679468644549059879316368892300987931277361782154249992295763514822082698951936680331825288693984964651058209392398294887933203625094431173012381970684161404"; + #include <stdio.h> + +int +main () +{ + + char *s= "2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966290435729003342952605956307381323286279434907632338298807531952510190115738341879307021540891499348841675092447614606680822648001684774118537423454424371075390777449920695517027618386062613313845830007520449338265602976067371132007093287091274437470472306969772093101416928368190255151086574637721112523897844250569536967707854499699679468644549059879316368892300987931277361782154249992295763514822082698951936680331825288693984964651058209392398294887933203625094431173012381970684161404"; int n, m; double f; char *endptr; + FILE *fp=fopen("conftest1","w"); n=sscanf(s,"%lf%n",&f,&m); + fprintf(fp,"%d",m); + fclose(fp); return s[m]; - } + + ; + return 0; +} _ACEOF if ac_fn_c_try_run "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + buggy_maximum_sscanf_length=`cat conftest1` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $buggy_maximum_sscanf_length" >&5 +$as_echo "$buggy_maximum_sscanf_length" >&6; } cat >>confdefs.h <<_ACEOF -#define BROKEN_WINDOWS_SSCANF 1 +#define BUGGY_MAXIMUM_SSCANF_LENGTH $buggy_maximum_sscanf_length _ACEOF fi @@ -7830,6 +7853,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi + EXTRA_LOBJS= if test "$try_japi" = "yes" ; then for ac_header in japi.h diff --git a/gcl/configure.in b/gcl/configure.in index 99e2416f1..502a6230d 100644 --- a/gcl/configure.in +++ b/gcl/configure.in @@ -533,7 +533,10 @@ esac AC_CHECK_PROGS(AWK,[gawk nawk awk]) # Work around system/gprof mips/hppa hang +AC_MSG_CHECKING([working gprof]) +old_enable_gprof=enable_gprof case $use in + powerpc*) if test "$host_cpu" = "powerpc64le" ; then enable_gprof="no"; fi;; sh4*) enable_gprof="no";; ia64*) enable_gprof="no";; # mips*) enable_gprof="no";; @@ -541,6 +544,11 @@ case $use in arm*) enable_gprof="no";;#FIXME mcount compiled as a 24/22 bit reloc even with -mlong-calls, marginally accessible *gnu) enable_gprof="no";; esac +if test "$enable_gprof" = "$old_enable_gprof" ; then + AC_MSG_RESULT([ok]) +else + AC_MSG_RESULT([disabled]) +fi if test "$enable_gprof" = "yes" ; then AC_MSG_CHECKING(for text start) @@ -2163,21 +2171,27 @@ AC_EGREP_HEADER([gettimeofday], AC_CHECK_LIB(m,sin,LIBS="${LIBS} -lm",true) AC_CHECK_LIB(mingwex,main,LIBS="${LIBS} -lmingwex",true) -AC_MSG_CHECKING([for broken windows sscanf]) +AC_MSG_CHECKING([for buggy maximum sscanf length]) AC_RUN_IFELSE([ - AC_LANG_SOURCE([[ - int main() { - char *s= "2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966290435729003342952605956307381323286279434907632338298807531952510190115738341879307021540891499348841675092447614606680822648001684774118537423454424371075390777449920695517027618386062613313845830007520449338265602976067371132007093287091274437470472306969772093101416928368190255151086574637721112523897844250569536967707854499699679468644549059879316368892300987931277361782154249992295763514822082698951936680331825288693984964651058209392398294887933203625094431173012381970684161404"; + AC_LANG_PROGRAM([[ + #include <stdio.h> + ]],[[ + char *s= "2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966290435729003342952605956307381323286279434907632338298807531952510190115738341879307021540891499348841675092447614606680822648001684774118537423454424371075390777449920695517027618386062613313845830007520449338265602976067371132007093287091274437470472306969772093101416928368190255151086574637721112523897844250569536967707854499699679468644549059879316368892300987931277361782154249992295763514822082698951936680331825288693984964651058209392398294887933203625094431173012381970684161404"; int n, m; double f; char *endptr; + FILE *fp=fopen("conftest1","w"); n=sscanf(s,"%lf%n",&f,&m); + fprintf(fp,"%d",m); + fclose(fp); return s[m]; - }]])], - [AC_MSG_RESULT([no])], - [AC_MSG_RESULT([yes]) - AC_DEFINE_UNQUOTED(BROKEN_WINDOWS_SSCANF,1,[sscanf terminates prematurely])]) + ]])], + [AC_MSG_RESULT([none])], + [buggy_maximum_sscanf_length=`cat conftest1` + AC_MSG_RESULT([$buggy_maximum_sscanf_length]) + AC_DEFINE_UNQUOTED(BUGGY_MAXIMUM_SSCANF_LENGTH,$buggy_maximum_sscanf_length,[sscanf terminates prematurely (Windows XP)])]) + EXTRA_LOBJS= if test "$try_japi" = "yes" ; then diff --git a/gcl/h/gclincl.h.in b/gcl/h/gclincl.h.in index 790da2e82..cfc0bd6d8 100644 --- a/gcl/h/gclincl.h.in +++ b/gcl/h/gclincl.h.in @@ -15,8 +15,8 @@ /* binding stack size */ #undef BDSSIZE -/* sscanf terminates prematurely */ -#undef BROKEN_WINDOWS_SSCANF +/* sscanf terminates prematurely (Windows XP) */ +#undef BUGGY_MAXIMUM_SSCANF_LENGTH /* can prevent sbrk from returning random values */ #undef CAN_UNRANDOMIZE_SBRK diff --git a/gcl/o/read.d b/gcl/o/read.d index 8886fce6a..be079d896 100755 --- a/gcl/o/read.d +++ b/gcl/o/read.d @@ -142,11 +142,16 @@ parse_number(char *s,int radix) { return OBJNULL; *q='E'; } +#ifdef BUGGY_MAXIMUM_SSCANF_LENGTH + if (strlen(s)>BUGGY_MAXIMUM_SSCANF_LENGTH) { + char *q1=s+BUGGY_MAXIMUM_SSCANF_LENGTH-strlen(q); + fprintf(stderr,"Chopping\n");fflush(stderr); + memmove(q1,q,strlen(q)+1); + q=q1; + } +#endif n=sscanf(s,"%lf%n",&f,&m); *q=c; -#ifdef BROKEN_WINDOWS_SSCANF - for (;s[m]>='0' && s[m]<='9';m++); -#endif if (n!=1||s[m]) return OBJNULL; switch (ch=='e' || ch=='E' ? READdefault_float_format : ch) { |