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;