From 569eba622c635a2bd19408ff284cf07804012c54 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sat, 26 Apr 2008 18:12:05 +0200 Subject: [PATCH] New private include file lib/stdio-impl.h. --- ChangeLog | 40 ++++++++++++++++++++++++++++++++++++++++ lib/fbufmode.c | 18 +++--------------- lib/fflush.c | 12 ++---------- lib/fpurge.c | 14 ++------------ lib/freadable.c | 5 ++--- lib/freadahead.c | 29 ++--------------------------- lib/freading.c | 5 ++--- lib/freadptr.c | 24 ++---------------------- lib/freadseek.c | 18 ++---------------- lib/fseeko.c | 29 ++--------------------------- lib/fseterr.c | 16 ++-------------- lib/fwritable.c | 5 ++--- lib/fwriting.c | 5 ++--- modules/fbufmode | 1 + modules/fflush | 1 + modules/fpurge | 1 + modules/freadable | 1 + modules/freadahead | 1 + modules/freading | 1 + modules/freadptr | 1 + modules/freadseek | 1 + modules/fseeko | 1 + modules/fseterr | 1 + modules/fwritable | 1 + modules/fwriting | 1 + 25 files changed, 77 insertions(+), 155 deletions(-) diff --git a/ChangeLog b/ChangeLog index aa69ad081..ae6d9e9b6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,45 @@ 2008-04-26 Bruno Haible + * lib/stdio-impl.h: New file. + * lib/fbufmode.c: Include stdio-impl.h. + (fbufmode): Use fp_, remove redundant #defines. + * lib/fflush.c: Include stdio-impl.h. + (clear_ungetc_buffer): Remove redundant #defines. + * lib/fpurge.c: Include stdio-impl.h. + (fpurge): Remove redundant #defines. + * lib/freadable.c: Include stdio-impl.h. + (freadable): Remove redundant #defines. + * lib/freadahead.c: Include stdio-impl.h. + (freadahead): Remove redundant #defines. + * lib/freading.c: Include stdio-impl.h. + (freading): Remove redundant #defines. + * lib/freadptr.c: Include stdio-impl.h. + (freadptr): Remove redundant #defines. + * lib/freadseek.c: Include stdio-impl.h. + (freadptrinc): Remove redundant #defines. + * lib/fseeko.c: Include stdio-impl.h. + (rpl_fseeko): Remove redundant #defines. + * lib/fseterr.c: Include stdio-impl.h. + (fseterr): Remove redundant #defines. + * lib/fwritable.c: Include stdio-impl.h. + (fwritable: Remove redundant #defines. + * lib/fwriting.c: Include stdio-impl.h. + (fwriting): Remove redundant #defines. + * modules/fbufmode (Files): Add lib/stdio-impl.h. + * modules/fflush (Files): Likewise. + * modules/fpurge (Files): Likewise. + * modules/freadable (Files): Likewise. + * modules/freadahead (Files): Likewise. + * modules/freading (Files): Likewise. + * modules/freadptr (Files): Likewise. + * modules/freadseek (Files): Likewise. + * modules/fseeko (Files): Likewise. + * modules/fseterr (Files): Likewise. + * modules/fwritable (Files): Likewise. + * modules/fwriting (Files): Likewise. + +2008-04-26 Bruno Haible + * lib/fflush.c (clear_ungetc_buffer, disable_seek_optimization, restore_seek_optimization, update_fpos_cache): New functions, extracted from rpl_fflush. diff --git a/lib/fbufmode.c b/lib/fbufmode.c index 2c3319f19..faaf08906 100644 --- a/lib/fbufmode.c +++ b/lib/fbufmode.c @@ -23,6 +23,8 @@ # include #endif +#include "stdio-impl.h" + int fbufmode (FILE *fp) { @@ -56,23 +58,9 @@ fbufmode (FILE *fp) if (fp->_flag & _IOLBF) return _IOLBF; # endif -# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ -# define fp_ ((struct { unsigned char *_ptr; \ - unsigned char *_base; \ - unsigned char *_end; \ - long _cnt; \ - int _file; \ - unsigned int _flag; \ - } *) fp) - return fp_->_flag & (_IONBF | _IOFBF); -# else -# if defined _SCO_DS /* OpenServer */ -# define _flag __flag -# endif - if (fp->_flag & _IONBF) + if (fp_->_flag & _IONBF) return _IONBF; return _IOFBF; -# endif #elif defined __UCLIBC__ /* uClibc */ if (fp->__modeflags & __FLAG_LBF) return _IOLBF; diff --git a/lib/fflush.c b/lib/fflush.c index 5317d2b90..860e8c83d 100644 --- a/lib/fflush.c +++ b/lib/fflush.c @@ -27,22 +27,14 @@ #include "freading.h" #include "fpurge.h" +#include "stdio-impl.h" + #undef fflush static inline void clear_ungetc_buffer (FILE *fp) { #if defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X, Cygwin */ -# if defined __NetBSD__ || defined __OpenBSD__ - struct __sfileext - { - struct __sbuf _ub; /* ungetc buffer */ - /* More fields, not relevant here. */ - }; -# define HASUB(fp) (((struct __sfileext *) (fp)->_ext._base)->_ub._base != NULL) -# else -# define HASUB(fp) ((fp)->_ub._base != NULL) -# endif if (HASUB (fp)) { fp->_p += stream->_r; diff --git a/lib/fpurge.c b/lib/fpurge.c index f9409e523..29716aeee 100644 --- a/lib/fpurge.c +++ b/lib/fpurge.c @@ -24,6 +24,8 @@ #endif #include +#include "stdio-impl.h" + int fpurge (FILE *fp) { @@ -76,13 +78,6 @@ fpurge (FILE *fp) ? fp->_bf._size : 0); /* Avoid memory leak when there is an active ungetc buffer. */ -# if defined __NetBSD__ || defined __OpenBSD__ /* NetBSD, OpenBSD */ - /* See - and */ -# define fp_ub ((struct { struct __sbuf _ub; } *) fp->_ext._base)->_ub -# else /* FreeBSD, MacOS X, Cygwin */ -# define fp_ub fp->_ub -# endif if (fp_ub._base != NULL) { if (fp_ub._base != fp->_ubuf) @@ -97,11 +92,6 @@ fpurge (FILE *fp) fp->_ungetc_count = 0; return 0; # elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ -# if defined _SCO_DS /* OpenServer */ -# define _base __base -# define _ptr __ptr -# define _cnt __cnt -# endif fp->_ptr = fp->_base; if (fp->_ptr != NULL) fp->_cnt = 0; diff --git a/lib/freadable.c b/lib/freadable.c index e2088c2ea..77351aba2 100644 --- a/lib/freadable.c +++ b/lib/freadable.c @@ -19,6 +19,8 @@ /* Specification. */ #include "freadable.h" +#include "stdio-impl.h" + bool freadable (FILE *fp) { @@ -32,9 +34,6 @@ freadable (FILE *fp) #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & (_IORW | _IOREAD)) != 0; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ -# if defined _SCO_DS /* OpenServer */ -# define _flag __flag -# endif return (fp->_flag & (_IORW | _IOREAD)) != 0; #elif defined __QNX__ /* QNX */ return (fp->_Mode & 0x1 /* _MOPENR */) != 0; diff --git a/lib/freadahead.c b/lib/freadahead.c index 3b4ac26cb..12e4bd104 100644 --- a/lib/freadahead.c +++ b/lib/freadahead.c @@ -19,6 +19,8 @@ /* Specification. */ #include "freadahead.h" +#include "stdio-impl.h" + size_t freadahead (FILE *fp) { @@ -29,16 +31,6 @@ freadahead (FILE *fp) + (fp->_flags & _IO_IN_BACKUP ? fp->_IO_save_end - fp->_IO_save_base : 0); #elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X, Cygwin */ -# if defined __NetBSD__ || defined __OpenBSD__ - struct __sfileext - { - struct __sbuf _ub; /* ungetc buffer */ - /* More fields, not relevant here. */ - }; -# define HASUB(fp) (((struct __sfileext *) (fp)->_ext._base)->_ub._base != NULL) -# else -# define HASUB(fp) ((fp)->_ub._base != NULL) -# endif if ((fp->_flags & __SWR) != 0 || fp->_r < 0) return 0; return fp->_r @@ -52,26 +44,9 @@ freadahead (FILE *fp) (fp->_ungetc_count == 0 ? fp->_rcount : fp->_ungetc_count - fp->_rcount) */ return (fp->_rcount > 0 ? fp->_rcount : fp->_ungetc_count - fp->_rcount); #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ -# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ -# define fp_ ((struct { unsigned char *_ptr; \ - unsigned char *_base; \ - unsigned char *_end; \ - long _cnt; \ - int _file; \ - unsigned int _flag; \ - } *) fp) if ((fp_->_flag & _IOWRT) != 0) return 0; return fp_->_cnt; -# else -# if defined _SCO_DS /* OpenServer */ -# define _flag __flag -# define _cnt __cnt -# endif - if ((fp->_flag & _IOWRT) != 0) - return 0; - return fp->_cnt; -# endif #elif defined __UCLIBC__ /* uClibc */ # ifdef __STDIO_BUFFERS if (fp->__modeflags & __FLAG_WRITING) diff --git a/lib/freading.c b/lib/freading.c index ca518b12d..b1c233c66 100644 --- a/lib/freading.c +++ b/lib/freading.c @@ -19,6 +19,8 @@ /* Specification. */ #include "freading.h" +#include "stdio-impl.h" + /* Don't use glibc's __freading function in glibc < 2.7, see */ #if !(HAVE___FREADING && (!defined __GLIBC__ || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7))) @@ -38,9 +40,6 @@ freading (FILE *fp) #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & _IOREAD) != 0; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ -# if defined _SCO_DS /* OpenServer */ -# define _flag __flag -# endif return (fp->_flag & _IOREAD) != 0; #elif defined __UCLIBC__ /* uClibc */ return (fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) != 0; diff --git a/lib/freadptr.c b/lib/freadptr.c index ec483237b..02b79e1e1 100644 --- a/lib/freadptr.c +++ b/lib/freadptr.c @@ -21,6 +21,8 @@ #include +#include "stdio-impl.h" + const char * freadptr (FILE *fp, size_t *sizep) { @@ -55,14 +57,6 @@ freadptr (FILE *fp, size_t *sizep) *sizep = fp->_rcount; return fp->_ptr; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ -# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ -# define fp_ ((struct { unsigned char *_ptr; \ - unsigned char *_base; \ - unsigned char *_end; \ - long _cnt; \ - int _file; \ - unsigned int _flag; \ - } *) fp) if ((fp_->_flag & _IOWRT) != 0) return NULL; size = fp_->_cnt; @@ -70,20 +64,6 @@ freadptr (FILE *fp, size_t *sizep) return NULL; *sizep = size; return (const char *) fp_->_ptr; -# else -# if defined _SCO_DS /* OpenServer */ -# define _flag __flag -# define _ptr __ptr -# define _cnt __cnt -# endif - if ((fp->_flag & _IOWRT) != 0) - return NULL; - size = fp->_cnt; - if (size == 0) - return NULL; - *sizep = size; - return (const char *) fp->_ptr; -# endif #elif defined __UCLIBC__ /* uClibc */ # ifdef __STDIO_BUFFERS if (fp->__modeflags & __FLAG_WRITING) diff --git a/lib/freadseek.c b/lib/freadseek.c index 99ac211cf..b7501bccd 100644 --- a/lib/freadseek.c +++ b/lib/freadseek.c @@ -25,6 +25,8 @@ #include "freadahead.h" #include "freadptr.h" +#include "stdio-impl.h" + /* Increment the in-memory pointer. INCREMENT must be at most the buffer size returned by freadptr(). This is very cheap (no system calls). */ @@ -41,24 +43,8 @@ freadptrinc (FILE *fp, size_t increment) fp->_ptr += increment; fp->_rcount -= increment; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ -# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ -# define fp_ ((struct { unsigned char *_ptr; \ - unsigned char *_base; \ - unsigned char *_end; \ - long _cnt; \ - int _file; \ - unsigned int _flag; \ - } *) fp) fp_->_ptr += increment; fp_->_cnt -= increment; -# else -# if defined _SCO_DS /* OpenServer */ -# define _ptr __ptr -# define _cnt __cnt -# endif - fp->_ptr += increment; - fp->_cnt -= increment; -# endif #elif defined __UCLIBC__ /* uClibc */ # ifdef __STDIO_BUFFERS fp->__bufpos += increment; diff --git a/lib/fseeko.c b/lib/fseeko.c index 008118861..831898c7f 100644 --- a/lib/fseeko.c +++ b/lib/fseeko.c @@ -23,6 +23,8 @@ /* Get off_t and lseek. */ #include +#include "stdio-impl.h" + #undef fseeko #if !HAVE_FSEEKO # undef fseek @@ -44,13 +46,6 @@ rpl_fseeko (FILE *fp, off_t offset, int whence) && fp->_IO_write_ptr == fp->_IO_write_base && fp->_IO_save_base == NULL) #elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X, Cygwin */ -# if defined __NetBSD__ || defined __OpenBSD__ /* NetBSD, OpenBSD */ - /* See - and */ -# define fp_ub ((struct { struct __sbuf _ub; } *) fp->_ext._base)->_ub -# else /* FreeBSD, MacOS X, Cygwin */ -# define fp_ub fp->_ub -# endif # if defined __SL64 && defined __SCLE /* Cygwin */ if ((fp->_flags & __SL64) == 0) { @@ -76,25 +71,8 @@ rpl_fseeko (FILE *fp, off_t offset, int whence) && fp->_wcount == 0 && fp->_ungetc_count == 0) #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ -# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ -# define fp_ ((struct { unsigned char *_ptr; \ - unsigned char *_base; \ - unsigned char *_end; \ - long _cnt; \ - int _file; \ - unsigned int _flag; \ - } *) fp) if (fp_->_ptr == fp_->_base && (fp_->_ptr == NULL || fp_->_cnt == 0)) -# else -# if defined _SCO_DS /* OpenServer */ -# define _base __base -# define _ptr __ptr -# define _cnt __cnt -# endif - if (fp->_ptr == fp->_base - && (fp->_ptr == NULL || fp->_cnt == 0)) -# endif #elif defined __UCLIBC__ /* uClibc */ if (((fp->__modeflags & __FLAG_WRITING) == 0 || fp->__bufpos == fp->__bufstart) @@ -125,9 +103,6 @@ rpl_fseeko (FILE *fp, off_t offset, int whence) #elif defined __EMX__ /* emx+gcc */ fp->_flags &= ~_IOEOF; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ -# if defined _SCO_DS /* OpenServer */ -# define _flag __flag -# endif fp->_flag &= ~_IOEOF; #endif return 0; diff --git a/lib/fseterr.c b/lib/fseterr.c index a36ed7553..f31e5b9ed 100644 --- a/lib/fseterr.c +++ b/lib/fseterr.c @@ -21,6 +21,8 @@ #include +#include "stdio-impl.h" + void fseterr (FILE *fp) { @@ -34,21 +36,7 @@ fseterr (FILE *fp) #elif defined __EMX__ /* emx+gcc */ fp->_flags |= _IOERR; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ -# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ -# define fp_ ((struct { unsigned char *_ptr; \ - unsigned char *_base; \ - unsigned char *_end; \ - long _cnt; \ - int _file; \ - unsigned int _flag; \ - } *) fp) fp_->_flag |= _IOERR; -# else -# if defined _SCO_DS /* OpenServer */ -# define _flag __flag -# endif - fp->_flag |= _IOERR; -# endif #elif defined __UCLIBC__ /* uClibc */ fp->__modeflags |= __FLAG_ERROR; #elif defined __QNX__ /* QNX */ diff --git a/lib/fwritable.c b/lib/fwritable.c index 598c2754a..bb9597584 100644 --- a/lib/fwritable.c +++ b/lib/fwritable.c @@ -19,6 +19,8 @@ /* Specification. */ #include "fwritable.h" +#include "stdio-impl.h" + bool fwritable (FILE *fp) { @@ -32,9 +34,6 @@ fwritable (FILE *fp) #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & (_IORW | _IOWRT)) != 0; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ -# if defined _SCO_DS /* OpenServer */ -# define _flag __flag -# endif return (fp->_flag & (_IORW | _IOWRT)) != 0; #elif defined __QNX__ /* QNX */ return (fp->_Mode & 0x2 /* _MOPENW */) != 0; diff --git a/lib/fwriting.c b/lib/fwriting.c index 7d4e01f7c..14e9ae371 100644 --- a/lib/fwriting.c +++ b/lib/fwriting.c @@ -19,6 +19,8 @@ /* Specification. */ #include "fwriting.h" +#include "stdio-impl.h" + bool fwriting (FILE *fp) { @@ -32,9 +34,6 @@ fwriting (FILE *fp) #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & _IOWRT) != 0; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ -# if defined _SCO_DS /* OpenServer */ -# define _flag __flag -# endif return (fp->_flag & _IOWRT) != 0; #elif defined __UCLIBC__ /* uClibc */ return (fp->__modeflags & __FLAG_WRITING) != 0; diff --git a/modules/fbufmode b/modules/fbufmode index 2d054b436..8fdb7a093 100644 --- a/modules/fbufmode +++ b/modules/fbufmode @@ -4,6 +4,7 @@ fbufmode() function: Determine the buffering mode of a FILE stream. Files: lib/fbufmode.h lib/fbufmode.c +lib/stdio-impl.h m4/fbufmode.m4 Depends-on: diff --git a/modules/fflush b/modules/fflush index ac74dc510..a8a151e93 100644 --- a/modules/fflush +++ b/modules/fflush @@ -3,6 +3,7 @@ Discard pending data on both input and output streams. Files: lib/fflush.c +lib/stdio-impl.h m4/fflush.m4 Depends-on: diff --git a/modules/fpurge b/modules/fpurge index af470e1b3..d384d7ee0 100644 --- a/modules/fpurge +++ b/modules/fpurge @@ -4,6 +4,7 @@ fpurge() function: Flush buffers. Files: lib/fpurge.h lib/fpurge.c +lib/stdio-impl.h m4/fpurge.m4 Depends-on: diff --git a/modules/freadable b/modules/freadable index 3b273bdbb..2c69d9601 100644 --- a/modules/freadable +++ b/modules/freadable @@ -4,6 +4,7 @@ freadable() function: Determine whether a FILE stream supports reading. Files: lib/freadable.h lib/freadable.c +lib/stdio-impl.h m4/freadable.m4 Depends-on: diff --git a/modules/freadahead b/modules/freadahead index 824759b96..7ef56b40f 100644 --- a/modules/freadahead +++ b/modules/freadahead @@ -5,6 +5,7 @@ buffer of a stream. Files: lib/freadahead.h lib/freadahead.c +lib/stdio-impl.h Depends-on: diff --git a/modules/freading b/modules/freading index 339050db1..d2a027801 100644 --- a/modules/freading +++ b/modules/freading @@ -4,6 +4,7 @@ freading() function: Determine whether a FILE stream is currently doing reading. Files: lib/freading.h lib/freading.c +lib/stdio-impl.h m4/freading.m4 Depends-on: diff --git a/modules/freadptr b/modules/freadptr index 66c50bf56..97b4978ce 100644 --- a/modules/freadptr +++ b/modules/freadptr @@ -4,6 +4,7 @@ freadptr() function: Pointer to the input buffer of a stream. Files: lib/freadptr.h lib/freadptr.c +lib/stdio-impl.h Depends-on: diff --git a/modules/freadseek b/modules/freadseek index 899842199..0d0c6fd56 100644 --- a/modules/freadseek +++ b/modules/freadseek @@ -4,6 +4,7 @@ freadseek() function: Read and discard input from a stream. Files: lib/freadseek.h lib/freadseek.c +lib/stdio-impl.h Depends-on: freadahead diff --git a/modules/fseeko b/modules/fseeko index ced94529c..3581d8a7b 100644 --- a/modules/fseeko +++ b/modules/fseeko @@ -3,6 +3,7 @@ fseeko() function: Reposition a FILE stream. Files: lib/fseeko.c +lib/stdio-impl.h m4/fseeko.m4 Depends-on: diff --git a/modules/fseterr b/modules/fseterr index 2ff5961b4..190cbd2df 100644 --- a/modules/fseterr +++ b/modules/fseterr @@ -4,6 +4,7 @@ Set the error indicator of a stream. Files: lib/fseterr.h lib/fseterr.c +lib/stdio-impl.h Depends-on: diff --git a/modules/fwritable b/modules/fwritable index 43bd66ba1..56d698e33 100644 --- a/modules/fwritable +++ b/modules/fwritable @@ -4,6 +4,7 @@ fwritable() function: Determine whether a FILE stream supports writing. Files: lib/fwritable.h lib/fwritable.c +lib/stdio-impl.h m4/fwritable.m4 Depends-on: diff --git a/modules/fwriting b/modules/fwriting index 11afb43ba..f3e94a312 100644 --- a/modules/fwriting +++ b/modules/fwriting @@ -4,6 +4,7 @@ fwriting() function: Determine whether a FILE stream is currently doing writing. Files: lib/fwriting.h lib/fwriting.c +lib/stdio-impl.h m4/fwriting.m4 Depends-on: -- 2.11.0