Hi,

I've updated the original patch a bit. I've reworked the #ifdef
__DragonFly__ parts to avoid duplicates.

About the third hunk: this new patch does not touch that part.

Let me know if you still got problems with it.

PS: please cc me, i'm off-list

-- 
voroskoi
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;

Reply via email to