]> Zhao Yanbai Git Server - minix.git/commitdiff
. use proper S_ISFIFO for ISFIFO check
authorBen Gras <ben@minix3.org>
Thu, 2 Feb 2006 16:59:07 +0000 (16:59 +0000)
committerBen Gras <ben@minix3.org>
Thu, 2 Feb 2006 16:59:07 +0000 (16:59 +0000)
. ignore ESPIPE error from lseek() in fflush() on read streams
  (because fifo's aren't detected when stdin, stdout or stderr)

lib/stdio/fflush.c
lib/stdio/fopen.c
lib/stdio/freopen.c

index ce058570d9ec5784bb4d774aa9892d337128b76b..b154609d00428a17edb5229faa70a9f6ff94cab5 100755 (executable)
@@ -5,6 +5,7 @@
 
 #include       <sys/types.h>
 #include       <stdio.h>
+#include       <errno.h>
 #include       "loc_incl.h"
 
 ssize_t _write(int d, const char *buf, size_t nbytes);
@@ -36,10 +37,12 @@ fflush(FILE *stream)
                if (stream->_buf && !io_testflag(stream,_IONBF))
                        adjust = -stream->_count;
                stream->_count = 0;
-               if (_lseek(fileno(stream), (off_t) adjust, SEEK_CUR) == -1) {
+               if (_lseek(fileno(stream), (off_t) adjust, SEEK_CUR) == -1 &&
+                 errno != ESPIPE) {
                        stream->_flags |= _IOERR;
                        return EOF;
                }
+               errno = 0;
                if (io_testflag(stream, _IOWRITE))
                        stream->_flags &= ~(_IOREADING | _IOWRITING);
                stream->_ptr = stream->_buf;
index 82663f599089b979380200f197948c5f2f313582..777cc7a013b2e964ad885b2039540a74c45f30ff 100755 (executable)
@@ -110,7 +110,7 @@ fopen(const char *name, const char *mode)
                return (FILE *)NULL;
        }
        
-       if ( st.st_mode & S_IFIFO ) flags |= _IOFIFO;
+       if ( S_ISFIFO(st.st_mode) ) flags |= _IOFIFO;
        
        if (( stream = (FILE *) malloc(sizeof(FILE))) == NULL ) {
                _close(fd);
index a81137794ba9ca3faf1cd0c550df90376fab4fdb..20a42505e0922576151184a4682d9375facfac20 100755 (executable)
@@ -87,7 +87,7 @@ freopen(const char *name, const char *mode, FILE *stream)
        }
 
        if ( fstat( fd, &st ) == 0 ) {
-               if ( st.st_mode & S_IFIFO ) flags |= _IOFIFO;
+               if ( S_ISFIFO(st.st_mode) ) flags |= _IOFIFO;
        } else {
                goto loser;
        }