X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fstdio_.h;h=7d77c5e56fda080dac68f86b940f36abc16dbb52;hb=1b9bd2b9f83a84ede12622d6a040383b6bded37d;hp=8371df47afd178e46387b2834afd1613cebf6221;hpb=edd8cd8de79b5872627d2ccd5817e0e6c1a2da70;p=gnulib.git diff --git a/lib/stdio_.h b/lib/stdio_.h index 8371df47a..7d77c5e56 100644 --- a/lib/stdio_.h +++ b/lib/stdio_.h @@ -19,26 +19,23 @@ #if defined __need_FILE || defined __need___FILE /* Special invocation convention inside glibc header files. */ -#include @ABSOLUTE_STDIO_H@ +#@INCLUDE_NEXT@ @NEXT_STDIO_H@ #else /* Normal invocation convention. */ -#ifdef __DECC -# include_next -#endif +#ifndef _GL_STDIO_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDIO_H@ #ifndef _GL_STDIO_H #define _GL_STDIO_H -#ifndef __DECC -# include @ABSOLUTE_STDIO_H@ -#endif - #include #include -#if (@GNULIB_FFLUSH@ && @REPLACE_FFLUSH@) || (@GNULIB_FSEEKO@ && !@HAVE_FSEEKO@) || (@GNULIB_FTELLO@ && !@HAVE_FTELLO@) +#if (@GNULIB_FSEEKO@ && @REPLACE_FSEEKO@) || (@GNULIB_FTELLO@ && @REPLACE_FTELLO@) /* Get off_t. */ # include #endif @@ -212,18 +209,15 @@ extern int vsprintf (char *str, const char *format, va_list args) # endif #endif -#if @GNULIB_FFLUSH@ && @REPLACE_FFLUSH@ -/* Provide fseek, fseeko functions that are aware of a preceding fflush(). */ -# define fseeko rpl_fseeko +#if @GNULIB_FSEEKO@ +# if @REPLACE_FSEEKO@ +/* Provide fseek, fseeko functions that are aware of a preceding + fflush(), and which detect pipes. */ +# define fseeko rpl_fseeko extern int fseeko (FILE *fp, off_t offset, int whence); -# define fseek(fp, offset, whence) fseeko (fp, (off_t)(offset), whence) -#elif @GNULIB_FSEEKO@ -# if !@HAVE_FSEEKO@ -/* Assume 'off_t' is the same type as 'long'. */ -typedef int verify_fseeko_types[2 * (sizeof (off_t) == sizeof (long)) - 1]; -# define fseeko fseek +# define fseek(fp, offset, whence) fseeko (fp, (off_t)(offset), whence) # endif -#else +#elif defined GNULIB_POSIXCHECK # undef fseeko # define fseeko(f,o,w) \ (GL_LINK_WARNING ("fseeko is unportable - " \ @@ -231,13 +225,35 @@ typedef int verify_fseeko_types[2 * (sizeof (off_t) == sizeof (long)) - 1]; fseeko (f, o, w)) #endif +#if @GNULIB_FSEEK@ && @REPLACE_FSEEK@ +extern int rpl_fseek (FILE *fp, long offset, int whence); +# undef fseek +# if defined GNULIB_POSIXCHECK +# define fseek(f,o,w) \ + (GL_LINK_WARNING ("fseek cannot handle files larger than 4 GB " \ + "on 32-bit platforms - " \ + "use fseeko function for handling of large files"), \ + rpl_fseek (f, o, w)) +# else +# define fseek rpl_fseek +# endif +#elif defined GNULIB_POSIXCHECK +# ifndef fseek +# define fseek(f,o,w) \ + (GL_LINK_WARNING ("fseek cannot handle files larger than 4 GB " \ + "on 32-bit platforms - " \ + "use fseeko function for handling of large files"), \ + fseek (f, o, w)) +# endif +#endif + #if @GNULIB_FTELLO@ -# if !@HAVE_FTELLO@ -/* Assume 'off_t' is the same type as 'long'. */ -typedef int verify_ftello_types[2 * (sizeof (off_t) == sizeof (long)) - 1]; -# define ftello ftell +# if @REPLACE_FTELLO@ +# define ftello rpl_ftello +extern off_t ftello (FILE *fp); +# define ftell(fp) ftello (fp) # endif -#else +#elif defined GNULIB_POSIXCHECK # undef ftello # define ftello(f) \ (GL_LINK_WARNING ("ftello is unportable - " \ @@ -245,11 +261,37 @@ typedef int verify_ftello_types[2 * (sizeof (off_t) == sizeof (long)) - 1]; ftello (f)) #endif +#if @GNULIB_FTELL@ && @REPLACE_FTELL@ +extern long rpl_ftell (FILE *fp); +# undef ftell +# if GNULIB_POSIXCHECK +# define ftell(f) \ + (GL_LINK_WARNING ("ftell cannot handle files larger than 4 GB " \ + "on 32-bit platforms - " \ + "use ftello function for handling of large files"), \ + rpl_ftell (f)) +# else +# define ftell rpl_ftell +# endif +#elif defined GNULIB_POSIXCHECK +# ifndef ftell +# define ftell(f) \ + (GL_LINK_WARNING ("ftell cannot handle files larger than 4 GB " \ + "on 32-bit platforms - " \ + "use ftello function for handling of large files"), \ + ftell (f)) +# endif +#endif + #if @GNULIB_FFLUSH@ # if @REPLACE_FFLUSH@ # define fflush rpl_fflush /* Flush all pending data on STREAM according to POSIX rules. Both - output and seekable input streams are supported. */ + output and seekable input streams are supported. + Note! LOSS OF DATA can occur if fflush is applied on an input stream + that is _not_seekable_ or on an update stream that is _not_seekable_ + and in which the most recent operation was input. Seekability can + be tested with lseek(fileno(fp),0,SEEK_CUR). */ extern int fflush (FILE *gl_stream); # endif #elif defined GNULIB_POSIXCHECK @@ -266,4 +308,5 @@ typedef int verify_ftello_types[2 * (sizeof (off_t) == sizeof (long)) - 1]; #endif #endif /* _GL_STDIO_H */ +#endif /* _GL_STDIO_H */ #endif