BROKEN_WINDOWS_SSCANF - gcl.git - GNU Common Lisp

index : gcl.git
GNU Common Lisp
summary refs log tree commit diff
diff options
context:
space:
mode:
authorCamm Maguire <camm@debian.org>2014年09月04日 09:48:46 -0400
committerCamm Maguire <camm@debian.org>2014年09月04日 09:48:46 -0400
commit9b7770107a39773566227dacf6bad297e7cad3f4 (patch)
treec9a0c64dc3ef3c45206c46cebfe75ecc634ef6bb
parent5dd4c9d0774f774fec80c73ab310b0ed98718982 (diff)
downloadgcl-ppc64le.tar.gz
BROKEN_WINDOWS_SSCANFppc64le
Diffstat
-rwxr-xr-xgcl/configure 39
-rw-r--r--gcl/configure.in 16
-rw-r--r--gcl/h/gclincl.h.in 3
-rwxr-xr-xgcl/o/read.d 3
4 files changed, 61 insertions, 0 deletions
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) {
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月02日 03:49:16 +0000

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