author | Camm Maguire <camm@debian.org> | 2014年09月04日 09:48:46 -0400 |
---|---|---|
committer | Camm Maguire <camm@debian.org> | 2014年09月04日 09:48:46 -0400 |
commit | 9b7770107a39773566227dacf6bad297e7cad3f4 (patch) | |
tree | c9a0c64dc3ef3c45206c46cebfe75ecc634ef6bb | |
parent | 5dd4c9d0774f774fec80c73ab310b0ed98718982 (diff) | |
download | gcl-ppc64le.tar.gz |
-rwxr-xr-x | gcl/configure | 39 | ||||
-rw-r--r-- | gcl/configure.in | 16 | ||||
-rw-r--r-- | gcl/h/gclincl.h.in | 3 | ||||
-rwxr-xr-x | gcl/o/read.d | 3 |
diff --git a/gcl/configure b/gcl/configure index 8b6e3425c..a7c6eb716 100755 --- a/gcl/configure +++ b/gcl/configure @@ -7791,6 +7791,45 @@ else fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken windows sscanf" >&5 +$as_echo_n "checking for broken windows sscanf... " >&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;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + int main() { + char *s= "2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966290435729003342952605956307381323286279434907632338298807531952510190115738341879307021540891499348841675092447614606680822648001684774118537423454424371075390777449920695517027618386062613313845830007520449338265602976067371132007093287091274437470472306969772093101416928368190255151086574637721112523897844250569536967707854499699679468644549059879316368892300987931277361782154249992295763514822082698951936680331825288693984964651058209392398294887933203625094431173012381970684161404"; + int n, m; + double f; + char *endptr; + + n=sscanf(s,"%lf%n",&f,&m); + return s[m]; + } +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +cat >>confdefs.h <<_ACEOF +#define BROKEN_WINDOWS_SSCANF 1 +_ACEOF + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +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 3ae4b0467..99e2416f1 100644 --- a/gcl/configure.in +++ b/gcl/configure.in @@ -2163,6 +2163,22 @@ 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_RUN_IFELSE([ + AC_LANG_SOURCE([[ + int main() { + char *s= "2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966290435729003342952605956307381323286279434907632338298807531952510190115738341879307021540891499348841675092447614606680822648001684774118537423454424371075390777449920695517027618386062613313845830007520449338265602976067371132007093287091274437470472306969772093101416928368190255151086574637721112523897844250569536967707854499699679468644549059879316368892300987931277361782154249992295763514822082698951936680331825288693984964651058209392398294887933203625094431173012381970684161404"; + int n, m; + double f; + char *endptr; + + n=sscanf(s,"%lf%n",&f,&m); + return s[m]; + }]])], + [AC_MSG_RESULT([no])], + [AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(BROKEN_WINDOWS_SSCANF,1,[sscanf terminates prematurely])]) + EXTRA_LOBJS= if test "$try_japi" = "yes" ; then AC_CHECK_HEADERS(japi.h,[AC_DEFINE(HAVE_JAPI_H) diff --git a/gcl/h/gclincl.h.in b/gcl/h/gclincl.h.in index 1a77daf67..790da2e82 100644 --- a/gcl/h/gclincl.h.in +++ b/gcl/h/gclincl.h.in @@ -15,6 +15,9 @@ /* binding stack size */ #undef BDSSIZE +/* sscanf terminates prematurely */ +#undef BROKEN_WINDOWS_SSCANF + /* can prevent sbrk from returning random values */ #undef CAN_UNRANDOMIZE_SBRK diff --git a/gcl/o/read.d b/gcl/o/read.d index 6490cf5f2..8886fce6a 100755 --- a/gcl/o/read.d +++ b/gcl/o/read.d @@ -144,6 +144,9 @@ parse_number(char *s,int radix) { } 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) { |