diff --git a/src/aclocal.m4 b/src/aclocal.m4 index 30299c816..28c7ffd7c 100644 --- a/src/aclocal.m4 +++ b/src/aclocal.m4 @@ -153,9 +153,10 @@ ECL_NEWLINE=LF ### 1.5) Can we guess how many characters are available for reading from ### the FILE structure? ### 0 = no -### 1 = (f)->_IO_read_end - (f)->_IO_read_ptr -### 2 = (f)->_r -### 3 = (f)->_cnt +### 1 = __freadahead((f)) +### 2 = (f)->_IO_read_end - (f)->_IO_read_ptr +### 3 = (f)->_r +### 4 = (f)->_cnt ECL_FILE_CNT=0 ### @@ -626,21 +627,29 @@ AC_DEFUN(ECL_FILE_STRUCTURE,[ AC_SUBST(ECL_FILE_CNT) if test -z "${ECL_FILE_CNT}"; then ECL_FILE_CNT=0 -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[ +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #include +]], [[ FILE *f = fopen("conftestval","w"); - if ((f)->_IO_read_end - (f)->_IO_read_ptr) + if (__freadahead((f))) return 1; ]])],[ECL_FILE_CNT=1],[]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[ FILE *f = fopen("conftestval","w"); - if ((f)->_r) + if ((f)->_IO_read_end - (f)->_IO_read_ptr) return 1; ]])],[ECL_FILE_CNT=2],[]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[ FILE *f = fopen("conftestval","w"); - if ((f)->_cnt) + if ((f)->_r) return 1; ]])],[ECL_FILE_CNT=3],[]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[ + FILE *f = fopen("conftestval","w"); + if ((f)->_cnt) + return 1; +]])],[ECL_FILE_CNT=4],[]) fi ]) diff --git a/src/configure b/src/configure index 6f82dbf9c..57834b92b 100755 --- a/src/configure +++ b/src/configure @@ -5886,9 +5886,10 @@ ECL_NEWLINE=LF ### 1.5) Can we guess how many characters are available for reading from ### the FILE structure? ### 0 = no -### 1 = (f)->_IO_read_end - (f)->_IO_read_ptr -### 2 = (f)->_r -### 3 = (f)->_cnt +### 1 = __freadahead((f)) +### 2 = (f)->_IO_read_end - (f)->_IO_read_ptr +### 3 = (f)->_r +### 4 = (f)->_cnt ECL_FILE_CNT=0 ### @@ -9251,13 +9252,16 @@ if test -z "${ECL_FILE_CNT}"; then ECL_FILE_CNT=0 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include + + #include + #include + int main (void) { FILE *f = fopen("conftestval","w"); - if ((f)->_IO_read_end - (f)->_IO_read_ptr) + if (__freadahead((f))) return 1; ; @@ -9277,7 +9281,7 @@ main (void) { FILE *f = fopen("conftestval","w"); - if ((f)->_r) + if ((f)->_IO_read_end - (f)->_IO_read_ptr) return 1; ; @@ -9297,7 +9301,7 @@ main (void) { FILE *f = fopen("conftestval","w"); - if ((f)->_cnt) + if ((f)->_r) return 1; ; @@ -9309,6 +9313,26 @@ then : ECL_FILE_CNT=3 fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ + + FILE *f = fopen("conftestval","w"); + if ((f)->_cnt) + return 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ECL_FILE_CNT=4 +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for code to detect FP exceptions" >&5 @@ -12810,4 +12834,3 @@ fi for i in $srcdir/c/*/; do mkdir -p c/`basename $i`; done - diff --git a/src/h/config-internal.h.in b/src/h/config-internal.h.in index ebb2792fd..952b41ee1 100644 --- a/src/h/config-internal.h.in +++ b/src/h/config-internal.h.in @@ -176,12 +176,16 @@ #undef FILE_CNT #if @ECL_FILE_CNT@ == 1 -# define FILE_CNT(fp) ((fp)->_IO_read_end - (fp)->_IO_read_ptr) +# include +# define FILE_CNT(fp) (__freadahead((fp))) #endif #if @ECL_FILE_CNT@ == 2 -# define FILE_CNT(fp) ((fp)->_r) +# define FILE_CNT(fp) ((fp)->_IO_read_end - (fp)->_IO_read_ptr) #endif #if @ECL_FILE_CNT@ == 3 +# define FILE_CNT(fp) ((fp)->_r) +#endif +#if @ECL_FILE_CNT@ == 4 # define FILE_CNT(fp) ((fp)->_cnt) #endif diff --git a/src/util/x86-linux-gnu.cross_config b/src/util/x86-linux-gnu.cross_config index 03be03df5..d309b5c60 100644 --- a/src/util/x86-linux-gnu.cross_config +++ b/src/util/x86-linux-gnu.cross_config @@ -8,7 +8,7 @@ CL_LONG_BITS=32 ECL_STACK_DIR=down ECL_BIGENDIAN=no ECL_NEWLINE=LF -ECL_FILE_CNT=1 +ECL_FILE_CNT=2 ECL_STDINT_HEADER="#include " ECL_UINT8_T=uint8_t ECL_UINT16_T=uint16_t diff --git a/src/util/x86_64-linux-gnu.cross_config b/src/util/x86_64-linux-gnu.cross_config index e6d83dd73..0fbf2a9d8 100644 --- a/src/util/x86_64-linux-gnu.cross_config +++ b/src/util/x86_64-linux-gnu.cross_config @@ -8,7 +8,7 @@ CL_LONG_BITS=64 ECL_STACK_DIR=down ECL_BIGENDIAN=no ECL_NEWLINE=LF -ECL_FILE_CNT=1 +ECL_FILE_CNT=2 ECL_STDINT_HEADER="#include " ECL_UINT8_T=uint8_t ECL_UINT16_T=uint16_t