Check whether the FILE structure has a field from which we can guess the number of characters in the buffer.

This commit is contained in:
jjgarcia 2003-11-03 12:53:32 +00:00
parent 76d878f4bf
commit f275da2454
5 changed files with 185 additions and 6 deletions

38
src/aclocal.m4 vendored
View file

@ -39,6 +39,14 @@ ECL_BIGENDIAN=no
### CR (Carriage return or \\r), and CRLF (CR followed by LF).
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
ECL_FILE_CNT=0
### 2) To cross-compile ECL so that it runs on the system
### ${host}
### you need to first compile ECL on the system in which you are building
@ -181,6 +189,36 @@ AC_MSG_CHECKING(for software type)
AC_MSG_RESULT([${SOFTWARE_TYPE}])
])
dnl
dnl --------------------------------------------------------------
dnl Check whether the FILE structure has a field with the number of
dnl characters left in the buffer.
dnl
AC_DEFUN(ECL_FILE_STRUCTURE,[
AC_SUBST(ECL_FILE_CNT)
if test -z "${ECL_FILE_CNT}"; then
ECL_FILE_CNT=0
AC_TRY_COMPILE([#include <stdio.h>],[
int main() {
FILE *f = fopen("conftestval","w");
if ((f)->_IO_read_end - (f)->_IO_read_ptr)
return 1;
}],ECL_FILE_CNT=1)
AC_TRY_COMPILE([#include <stdio.h>],[
int main() {
FILE *f = fopen("conftestval","w");
if ((f)->_r)
return 1;
}],ECL_FILE_CNT=2)
AC_TRY_COMPILE([#include <stdio.h>],[
int main() {
FILE *f = fopen("conftestval","w");
if ((f)->_cnt)
return 1;
}],ECL_FILE_CNT=3)
fi
])
dnl
dnl --------------------------------------------------------------
dnl Check the direction to which the stack grows (for garbage

View file

@ -1127,8 +1127,10 @@ flisten(FILE *fp)
#endif
if (feof(fp))
return(FALSE);
#ifdef FILE_CNT
if (FILE_CNT(fp) > 0)
return(TRUE);
#endif
#if defined(HAVE_SELECT)
fd = fileno(fp);
FD_ZERO(&fds);

137
src/configure vendored
View file

@ -308,7 +308,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS ECL_VERSION build build_cpu build_vendor build_os host host_cpu host_vendor host_os builddir top_srcdir CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPP RANLIB ac_ct_RANLIB INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S ECL_CC LSPCFLAGS CLIBS SHARED_LDFLAGS SHORT_SITE_NAME LONG_SITE_NAME EXTRA_OBJS TARGETS TKLIBS SUBDIR LIBRARIES LSP_LIBRARIES BOEHM_HEADERS EGREP CP RM MV EXE_SUFFIX ARCHITECTURE SOFTWARE_TYPE SOFTWARE_VERSION MACHINE_INSTANCE MACHINE_VERSION LDRPATH LIBPREFIX LIBEXT SHAREDEXT SHAREDPREFIX ECL_SETJMP ECL_LONGJMP CL_FIXNUM_TYPE CL_FIXNUM_BITS CL_FIXNUM_MAX CL_FIXNUM_MIN X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS XINCLUDES XLIBS LIBOBJS LTLIBOBJS'
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS ECL_VERSION build build_cpu build_vendor build_os host host_cpu host_vendor host_os builddir top_srcdir CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPP RANLIB ac_ct_RANLIB INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S ECL_CC LSPCFLAGS CLIBS SHARED_LDFLAGS SHORT_SITE_NAME LONG_SITE_NAME EXTRA_OBJS TARGETS TKLIBS SUBDIR LIBRARIES LSP_LIBRARIES BOEHM_HEADERS EGREP CP RM MV EXE_SUFFIX ARCHITECTURE SOFTWARE_TYPE SOFTWARE_VERSION MACHINE_INSTANCE MACHINE_VERSION LDRPATH LIBPREFIX LIBEXT SHAREDEXT SHAREDPREFIX ECL_SETJMP ECL_LONGJMP ECL_FILE_CNT CL_FIXNUM_TYPE CL_FIXNUM_BITS CL_FIXNUM_MAX CL_FIXNUM_MIN X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS XINCLUDES XLIBS LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@ -3775,6 +3775,14 @@ ECL_BIGENDIAN=no
### CR (Carriage return or \\r), and CRLF (CR followed by LF).
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
ECL_FILE_CNT=0
### 2) To cross-compile ECL so that it runs on the system
### ${host}
### you need to first compile ECL on the system in which you are building
@ -4081,6 +4089,132 @@ else
fi
if test -z "${ECL_FILE_CNT}"; then
ECL_FILE_CNT=0
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <stdio.h>
int
main ()
{
int main() {
FILE *f = fopen("conftestval","w");
if ((f)->_IO_read_end - (f)->_IO_read_ptr)
return 1;
}
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ECL_FILE_CNT=1
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
fi
rm -f conftest.$ac_objext conftest.$ac_ext
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <stdio.h>
int
main ()
{
int main() {
FILE *f = fopen("conftestval","w");
if ((f)->_r)
return 1;
}
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ECL_FILE_CNT=2
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
fi
rm -f conftest.$ac_objext conftest.$ac_ext
cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <stdio.h>
int
main ()
{
int main() {
FILE *f = fopen("conftestval","w");
if ((f)->_cnt)
return 1;
}
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ECL_FILE_CNT=3
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
fi
rm -f conftest.$ac_objext conftest.$ac_ext
fi
if test "x$prefix" = "xNONE"; then prefix=${ac_default_prefix}; fi
if test "x$exec_prefix" = "xNONE"; then exec_prefix=${prefix}; fi
bindir="${exec_prefix}/bin"
@ -6530,6 +6664,7 @@ s,@SHAREDEXT@,$SHAREDEXT,;t t
s,@SHAREDPREFIX@,$SHAREDPREFIX,;t t
s,@ECL_SETJMP@,$ECL_SETJMP,;t t
s,@ECL_LONGJMP@,$ECL_LONGJMP,;t t
s,@ECL_FILE_CNT@,$ECL_FILE_CNT,;t t
s,@CL_FIXNUM_TYPE@,$CL_FIXNUM_TYPE,;t t
s,@CL_FIXNUM_BITS@,$CL_FIXNUM_BITS,;t t
s,@CL_FIXNUM_MAX@,$CL_FIXNUM_MAX,;t t

View file

@ -143,13 +143,14 @@ AC_CHECK_FUNCS(nanosleep alarm times isnanf select setenv putenv\
AC_ISC_POSIX
dnl ----------------------------------------------------------------------
dnl Establish some default values
dnl Checks which do not come with autoconf
dnl
ECL_CROSS_CONFIG()
ECL_MAKE_ABSOLUTE_SRCDIR()
ECL_GUESS_HOST_OS()
ECL_LINEFEED_MODE()
ECL_FIND_SETJMP()
ECL_FILE_STRUCTURE()
dnl ----------------------------------------------------------------------
dnl Set options

View file

@ -215,12 +215,15 @@ typedef unsigned @CL_FIXNUM_TYPE@ cl_hashkey;
# define stack_align(n) (((n) + 03) & ~03)
#endif
#ifdef __linux__
#undef FILE_CNT
#if @ECL_FILE_CNT@ == 1
# define FILE_CNT(fp) ((fp)->_IO_read_end - (fp)->_IO_read_ptr)
#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(cygwin) || defined(darwin)
#endif
#if @ECL_FILE_CNT@ == 2
# define FILE_CNT(fp) ((fp)->_r)
#else
# define FILE_CNT(fp) (fp)->_cnt
#endif
#if @ECL_FILE_CNT@ == 3
# define FILE_CNT(fp) ((fp)->_cnt)
#endif
#if defined(MSDOS) || defined(cygwin) || defined(mingw32)