X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Ffreadptr.c;h=ec483237b76ee03618f05874e132d11026adc8c7;hb=bfca3459b4916724328bc9779cbc4e5934417c09;hp=8459508a1fdfa161b485f4ad78675f8b8052e296;hpb=03400ebfaa064922caf3767d6641d7e1cdc8cd1b;p=gnulib.git diff --git a/lib/freadptr.c b/lib/freadptr.c index 8459508a1..ec483237b 100644 --- a/lib/freadptr.c +++ b/lib/freadptr.c @@ -19,13 +19,15 @@ /* Specification. */ #include "freadptr.h" +#include + const char * freadptr (FILE *fp, size_t *sizep) { size_t size; /* Keep this code in sync with freadahead! */ -#if defined _IO_ferror_unlocked /* GNU libc, BeOS */ +#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ if (fp->_IO_write_ptr > fp->_IO_write_base) return NULL; size = fp->_IO_read_end - fp->_IO_read_ptr; @@ -41,7 +43,18 @@ freadptr (FILE *fp, size_t *sizep) return NULL; *sizep = size; return (const char *) fp->_p; -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, mingw */ +#elif defined __EMX__ /* emx+gcc */ + if ((fp->_flags & _IOWRT) != 0) + return NULL; + /* Note: fp->_ungetc_count > 0 implies fp->_rcount <= 0, + fp->_ungetc_count = 0 implies fp->_rcount >= 0. */ + if (fp->_rcount <= 0) + return NULL; + if (!(fp->_ungetc_count == 0)) + abort (); + *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; \ @@ -58,6 +71,11 @@ freadptr (FILE *fp, size_t *sizep) *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;