diff --git a/lib/freadahead.c b/lib/freadahead.c index 610de87..8b790f4 100644 --- a/lib/freadahead.c +++ b/lib/freadahead.c @@ -30,11 +30,15 @@ freadahead (FILE *fp) return (fp->_IO_read_end - fp->_IO_read_ptr) + (fp->_flags & _IO_IN_BACKUP ? fp->_IO_save_end - fp->_IO_save_base : 0); -#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ +#elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X, Cygwin */ if ((fp_->_flags & __SWR) != 0 || fp_->_r < 0) return 0; return fp_->_r + (HASUB (fp) ? fp_->_ur : 0); +#elif defined __DragonFly__ + if ((fp_->_flags & __SWR) != 0 || fp_->_r < 0) + return 0; + return __sreadahead(fp); #elif defined __EMX__ /* emx+gcc */ if ((fp->_flags & _IOWRT) != 0) return 0; diff --git a/lib/freading.c b/lib/freading.c index e201b89..9d9ffed 100644 --- a/lib/freading.c +++ b/lib/freading.c @@ -35,8 +35,10 @@ freading (FILE *fp) return ((fp->_flags & _IO_NO_WRITES) != 0 || ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0 && fp->_IO_read_base != NULL)); -#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ +#elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X, Cygwin */ return (fp_->_flags & __SRD) != 0; +#elif defined __DragonFly__ + return ((((struct __FILE_public *)fp)->_flags & __SRD) != 0); #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & _IOREAD) != 0; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ diff --git a/lib/fseeko.c b/lib/fseeko.c index 536dfaf..c6aa4fe 100644 --- a/lib/fseeko.c +++ b/lib/fseeko.c @@ -45,7 +45,7 @@ rpl_fseeko (FILE *fp, off_t offset, int whence) if (fp->_IO_read_end == fp->_IO_read_ptr && fp->_IO_write_ptr == fp->_IO_write_base && fp->_IO_save_base == NULL) -#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ +#elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ # if defined __SL64 && defined __SCLE /* Cygwin */ if ((fp->_flags & __SL64) == 0) { @@ -65,6 +65,9 @@ rpl_fseeko (FILE *fp, off_t offset, int whence) ? fp_->_bf._size : 0) && fp_ub._base == NULL) +#elif __DragonFly__ + if (0) + /* NOTREACHED */ #elif defined __EMX__ /* emx+gcc */ if (fp->_ptr == fp->_buffer && fp->_rcount == 0 @@ -89,14 +92,14 @@ rpl_fseeko (FILE *fp, off_t offset, int whence) off_t pos = lseek (fileno (fp), offset, whence); if (pos == -1) { -#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ +#if defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X, Cygwin */ fp_->_flags &= ~__SOFF; #endif return -1; } else { -#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ +#if defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X, Cygwin */ fp_->_offset = pos; fp_->_flags |= __SOFF; fp_->_flags &= ~__SEOF;