[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: extended stdio API on DragonFly
From: |
Bruno Haible |
Subject: |
Re: extended stdio API on DragonFly |
Date: |
Sat, 26 Apr 2008 18:57:43 +0200 |
User-agent: |
KMail/1.5.4 |
There was no answer from the DragonFly BSD developers. So I'm adding the
DragonFly BSD support without their system support.
2008-04-26 Bruno Haible <address@hidden>
Add tentative support for DragonFly BSD.
* lib/stdio-impl.h: Add macros for DragonFly BSD.
* lib/fbufmode.c (fbufmode): Update conditionals. Use fp_ instead of
fp.
* lib/fflush.c (clear_ungetc_buffer, disable_seek_optimization,
restore_seek_optimization, update_fpos_cache, rpl_fflush: Likewise.
* lib/fpurge.c (fpurge): Likewise.
* lib/freadable.c (freaadable): Likewise.
* lib/freadahead.c (freadahead): Likewise.
* lib/freading.c (freading): Likewise.
* lib/freadptr.c (freadptr): Likewise.
* lib/freadseek.c (freadptrinc): Likewise.
* lib/fseeko.c (fseeko): Likewise.
* lib/fseterr.c (fseterr): Likewise.
* lib/fwritable.c (fwritable): Likewise.
* lib/fwriting.c (fwriting): Likewise.
*** lib/fbufmode.c.orig 2008-04-26 18:46:24.000000000 +0200
--- lib/fbufmode.c 2008-04-26 18:35:43.000000000 +0200
***************
*** 42,51 ****
if (fp->_flags & _IO_UNBUFFERED)
return _IONBF;
return _IOFBF;
! #elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
! if (fp->_flags & __SLBF)
return _IOLBF;
! if (fp->_flags & __SNBF)
return _IONBF;
return _IOFBF;
#elif defined __EMX__ /* emx+gcc */
--- 42,51 ----
if (fp->_flags & _IO_UNBUFFERED)
return _IONBF;
return _IOFBF;
! #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
! if (fp_->_flags & __SLBF)
return _IOLBF;
! if (fp_->_flags & __SNBF)
return _IONBF;
return _IOFBF;
#elif defined __EMX__ /* emx+gcc */
*** lib/fflush.c.orig 2008-04-26 18:46:24.000000000 +0200
--- lib/fflush.c 2008-04-26 18:45:19.000000000 +0200
***************
*** 34,62 ****
static inline void
clear_ungetc_buffer (FILE *fp)
{
! #if defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
if (HASUB (fp))
{
! fp->_p += stream->_r;
! fp->_r = 0;
}
#endif
}
! #if defined __sferror && defined __SNPT /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
static inline int
disable_seek_optimization (FILE *fp)
{
! int saved_flags = fp->_flags & (__SOPT | __SNPT);
! fp->_flags = (fp->_flags & ~__SOPT) | __SNPT;
return saved_flags;
}
static inline void
restore_seek_optimization (FILE *fp, int saved_flags)
{
! fp->_flags = (fp->_flags & ~(__SOPT | __SNPT)) | saved_flags;
}
#endif
--- 34,62 ----
static inline void
clear_ungetc_buffer (FILE *fp)
{
! #if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
if (HASUB (fp))
{
! fp_->_p += fp_->_r;
! fp_->_r = 0;
}
#endif
}
! #if (defined __sferror || defined __DragonFly__) && defined __SNPT /*
FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */
static inline int
disable_seek_optimization (FILE *fp)
{
! int saved_flags = fp_->_flags & (__SOPT | __SNPT);
! fp_->_flags = (fp_->_flags & ~__SOPT) | __SNPT;
return saved_flags;
}
static inline void
restore_seek_optimization (FILE *fp, int saved_flags)
{
! fp_->_flags = (fp_->_flags & ~(__SOPT | __SNPT)) | saved_flags;
}
#endif
***************
*** 64,72 ****
static inline void
update_fpos_cache (FILE *fp)
{
! #if defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
! fp->_offset = pos;
! fp->_flags |= __SOFF;
#endif
}
--- 64,72 ----
static inline void
update_fpos_cache (FILE *fp)
{
! #if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
! fp_->_offset = pos;
! fp_->_flags |= __SOFF;
#endif
}
***************
*** 140,146 ****
if (result != 0)
return result;
! #if defined __sferror && defined __SNPT /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
{
/* Disable seek optimization for the next fseeko call. This tells the
--- 140,146 ----
if (result != 0)
return result;
! #if (defined __sferror || defined __DragonFly__) && defined __SNPT /*
FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */
{
/* Disable seek optimization for the next fseeko call. This tells the
*** lib/fpurge.c.orig 2008-04-26 18:46:24.000000000 +0200
--- lib/fpurge.c 2008-04-26 18:42:28.000000000 +0200
***************
*** 35,41 ****
/* The __fpurge function does not have a return value. */
return 0;
! #elif HAVE_FPURGE /* FreeBSD, NetBSD, OpenBSD, MacOS X */
/* Call the system's fpurge function. */
# undef fpurge
--- 35,41 ----
/* The __fpurge function does not have a return value. */
return 0;
! #elif HAVE_FPURGE /* FreeBSD, NetBSD, OpenBSD, DragonFly,
MacOS X */
/* Call the system's fpurge function. */
# undef fpurge
***************
*** 43,49 ****
extern int fpurge (FILE *);
# endif
int result = fpurge (fp);
! # if defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
if (result == 0)
/* Correct the invariants that fpurge broke.
<stdio.h> on BSD systems says:
--- 43,49 ----
extern int fpurge (FILE *);
# endif
int result = fpurge (fp);
! # if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
if (result == 0)
/* Correct the invariants that fpurge broke.
<stdio.h> on BSD systems says:
***************
*** 51,58 ****
If this invariant is not fulfilled and the stream is read-write but
currently writing, subsequent putc or fputc calls will write directly
into the buffer, although they shouldn't be allowed to. */
! if ((fp->_flags & __SRD) != 0)
! fp->_w = 0;
# endif
return result;
--- 51,58 ----
If this invariant is not fulfilled and the stream is read-write but
currently writing, subsequent putc or fputc calls will write directly
into the buffer, although they shouldn't be allowed to. */
! if ((fp_->_flags & __SRD) != 0)
! fp_->_w = 0;
# endif
return result;
***************
*** 71,86 ****
fp->_IO_save_base = NULL;
}
return 0;
! # elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
! fp->_p = fp->_bf._base;
! fp->_r = 0;
! fp->_w = ((fp->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered
and not currently reading? */
! ? fp->_bf._size
! : 0);
/* Avoid memory leak when there is an active ungetc buffer. */
if (fp_ub._base != NULL)
{
! if (fp_ub._base != fp->_ubuf)
free (fp_ub._base);
fp_ub._base = NULL;
}
--- 71,86 ----
fp->_IO_save_base = NULL;
}
return 0;
! # elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD,
OpenBSD, DragonFly, MacOS X, Cygwin */
! fp_->_p = fp_->_bf._base;
! fp_->_r = 0;
! fp_->_w = ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered
and not currently reading? */
! ? fp_->_bf._size
! : 0);
/* Avoid memory leak when there is an active ungetc buffer. */
if (fp_ub._base != NULL)
{
! if (fp_ub._base != fp_->_ubuf)
free (fp_ub._base);
fp_ub._base = NULL;
}
*** lib/freadable.c.orig 2008-04-26 18:46:24.000000000 +0200
--- lib/freadable.c 2008-04-26 18:36:39.000000000 +0200
***************
*** 29,36 ****
fast macros. */
#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS,
Linux libc5 */
return (fp->_flags & _IO_NO_READS) == 0;
! #elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
! return (fp->_flags & (__SRW | __SRD)) != 0;
#elif defined __EMX__ /* emx+gcc */
return (fp->_flags & (_IORW | _IOREAD)) != 0;
#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris,
OpenServer, mingw */
--- 29,36 ----
fast macros. */
#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS,
Linux libc5 */
return (fp->_flags & _IO_NO_READS) == 0;
! #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
! return (fp_->_flags & (__SRW | __SRD)) != 0;
#elif defined __EMX__ /* emx+gcc */
return (fp->_flags & (_IORW | _IOREAD)) != 0;
#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris,
OpenServer, mingw */
*** lib/freadahead.c.orig 2008-04-26 18:46:24.000000000 +0200
--- lib/freadahead.c 2008-04-26 18:37:32.000000000 +0200
***************
*** 30,40 ****
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 /* 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 __EMX__ /* emx+gcc */
if ((fp->_flags & _IOWRT) != 0)
return 0;
--- 30,40 ----
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 */
! if ((fp_->_flags & __SWR) != 0 || fp_->_r < 0)
return 0;
! return fp_->_r
! + (HASUB (fp) ? fp_->_ur : 0);
#elif defined __EMX__ /* emx+gcc */
if ((fp->_flags & _IOWRT) != 0)
return 0;
*** lib/freading.c.orig 2008-04-26 18:46:24.000000000 +0200
--- lib/freading.c 2008-04-26 18:37:55.000000000 +0200
***************
*** 35,42 ****
return ((fp->_flags & _IO_NO_WRITES) != 0
|| ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0
&& fp->_IO_read_base != NULL));
! #elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
! return (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 */
--- 35,42 ----
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 */
! return (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 */
*** lib/freadptr.c.orig 2008-04-26 18:46:24.000000000 +0200
--- lib/freadptr.c 2008-04-26 18:38:58.000000000 +0200
***************
*** 37,50 ****
return NULL;
*sizep = size;
return (const char *) fp->_IO_read_ptr;
! #elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
! if ((fp->_flags & __SWR) != 0 || fp->_r < 0)
return NULL;
! size = fp->_r;
if (size == 0)
return NULL;
*sizep = size;
! return (const char *) fp->_p;
#elif defined __EMX__ /* emx+gcc */
if ((fp->_flags & _IOWRT) != 0)
return NULL;
--- 37,50 ----
return NULL;
*sizep = size;
return (const char *) fp->_IO_read_ptr;
! #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
! if ((fp_->_flags & __SWR) != 0 || fp_->_r < 0)
return NULL;
! size = fp_->_r;
if (size == 0)
return NULL;
*sizep = size;
! return (const char *) fp_->_p;
#elif defined __EMX__ /* emx+gcc */
if ((fp->_flags & _IOWRT) != 0)
return NULL;
*** lib/freadseek.c.orig 2008-04-26 18:46:24.000000000 +0200
--- lib/freadseek.c 2008-04-26 18:39:55.000000000 +0200
***************
*** 36,44 ****
/* Keep this code in sync with freadptr! */
#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS,
Linux libc5 */
fp->_IO_read_ptr += increment;
! #elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
! fp->_p += increment;
! fp->_r -= increment;
#elif defined __EMX__ /* emx+gcc */
fp->_ptr += increment;
fp->_rcount -= increment;
--- 36,44 ----
/* Keep this code in sync with freadptr! */
#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS,
Linux libc5 */
fp->_IO_read_ptr += increment;
! #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
! fp_->_p += increment;
! fp_->_r -= increment;
#elif defined __EMX__ /* emx+gcc */
fp->_ptr += increment;
fp->_rcount -= increment;
*** lib/fseeko.c.orig 2008-04-26 18:46:24.000000000 +0200
--- lib/fseeko.c 2008-04-26 18:44:05.000000000 +0200
***************
*** 45,51 ****
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 /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
# if defined __SL64 && defined __SCLE /* Cygwin */
if ((fp->_flags & __SL64) == 0)
{
--- 45,51 ----
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 */
# if defined __SL64 && defined __SCLE /* Cygwin */
if ((fp->_flags & __SL64) == 0)
{
***************
*** 59,69 ****
fclose (tmp);
}
# endif
! if (fp->_p == fp->_bf._base
! && fp->_r == 0
! && fp->_w == ((fp->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully
buffered and not currently reading? */
! ? fp->_bf._size
! : 0)
&& fp_ub._base == NULL)
#elif defined __EMX__ /* emx+gcc */
if (fp->_ptr == fp->_buffer
--- 59,69 ----
fclose (tmp);
}
# endif
! if (fp_->_p == fp_->_bf._base
! && fp_->_r == 0
! && fp_->_w == ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully
buffered and not currently reading? */
! ? fp_->_bf._size
! : 0)
&& fp_ub._base == NULL)
#elif defined __EMX__ /* emx+gcc */
if (fp->_ptr == fp->_buffer
***************
*** 89,105 ****
off_t pos = lseek (fileno (fp), offset, whence);
if (pos == -1)
{
! #if defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
! fp->_flags &= ~__SOFF;
#endif
return -1;
}
else
{
! #if defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
! fp->_offset = pos;
! fp->_flags |= __SOFF;
! fp->_flags &= ~__SEOF;
#elif defined __EMX__ /* emx+gcc */
fp->_flags &= ~_IOEOF;
#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris,
OpenServer, mingw */
--- 89,105 ----
off_t pos = lseek (fileno (fp), offset, whence);
if (pos == -1)
{
! #if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
! fp_->_flags &= ~__SOFF;
#endif
return -1;
}
else
{
! #if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
! fp_->_offset = pos;
! fp_->_flags |= __SOFF;
! fp_->_flags &= ~__SEOF;
#elif defined __EMX__ /* emx+gcc */
fp->_flags &= ~_IOEOF;
#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris,
OpenServer, mingw */
*** lib/fseterr.c.orig 2008-04-26 18:46:24.000000000 +0200
--- lib/fseterr.c 2008-04-26 18:40:12.000000000 +0200
***************
*** 31,38 ****
fast macros. */
#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS,
Linux libc5 */
fp->_flags |= _IO_ERR_SEEN;
! #elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
! fp->_flags |= __SERR;
#elif defined __EMX__ /* emx+gcc */
fp->_flags |= _IOERR;
#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris,
OpenServer, mingw */
--- 31,38 ----
fast macros. */
#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS,
Linux libc5 */
fp->_flags |= _IO_ERR_SEEN;
! #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
! fp_->_flags |= __SERR;
#elif defined __EMX__ /* emx+gcc */
fp->_flags |= _IOERR;
#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris,
OpenServer, mingw */
*** lib/fwritable.c.orig 2008-04-26 18:46:24.000000000 +0200
--- lib/fwritable.c 2008-04-26 18:40:38.000000000 +0200
***************
*** 29,36 ****
fast macros. */
#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS,
Linux libc5 */
return (fp->_flags & _IO_NO_WRITES) == 0;
! #elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
! return (fp->_flags & (__SRW | __SWR)) != 0;
#elif defined __EMX__ /* emx+gcc */
return (fp->_flags & (_IORW | _IOWRT)) != 0;
#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris,
OpenServer, mingw */
--- 29,36 ----
fast macros. */
#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS,
Linux libc5 */
return (fp->_flags & _IO_NO_WRITES) == 0;
! #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
! return (fp_->_flags & (__SRW | __SWR)) != 0;
#elif defined __EMX__ /* emx+gcc */
return (fp->_flags & (_IORW | _IOWRT)) != 0;
#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris,
OpenServer, mingw */
*** lib/fwriting.c.orig 2008-04-26 18:46:24.000000000 +0200
--- lib/fwriting.c 2008-04-26 18:40:59.000000000 +0200
***************
*** 29,36 ****
fast macros. */
#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS,
Linux libc5 */
return (fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) != 0;
! #elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
! return (fp->_flags & __SWR) != 0;
#elif defined __EMX__ /* emx+gcc */
return (fp->_flags & _IOWRT) != 0;
#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris,
OpenServer, mingw */
--- 29,36 ----
fast macros. */
#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS,
Linux libc5 */
return (fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) != 0;
! #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
! return (fp_->_flags & __SWR) != 0;
#elif defined __EMX__ /* emx+gcc */
return (fp->_flags & _IOWRT) != 0;
#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris,
OpenServer, mingw */
*** lib/stdio-impl.h.orig 2008-04-26 18:46:24.000000000 +0200
--- lib/stdio-impl.h 2008-04-26 18:23:55.000000000 +0200
***************
*** 21,27 ****
/* BSD stdio derived implementations. */
! #if defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X,
Cygwin */
# if defined __NetBSD__ || defined __OpenBSD__ /* NetBSD, OpenBSD */
/* See
<http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
--- 21,54 ----
/* BSD stdio derived implementations. */
! #if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
!
! # if defined __DragonFly__ /* DragonFly */
! /* See
<http://www.dragonflybsd.org/cvsweb/src/lib/libc/stdio/priv_stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>.
*/
! # define fp_ ((struct { struct __FILE_public pub; \
! struct { unsigned char *_base; int _size; } _bf; \
! void *cookie; \
! void *_close; \
! void *_read; \
! void *_seek; \
! void *_write; \
! struct { unsigned char *_base; int _size; } _ub; \
! int _ur; \
! unsigned char _ubuf[3]; \
! unsigned cahr _nbuf[1]; \
! struct { unsigned char *_base; int _size; } _lb; \
! int _blksize; \
! fpos_t _offset; \
! /* More fields, not relevant here. */ \
! } *) fp)
! /* See
<http://www.dragonflybsd.org/cvsweb/src/include/stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>.
*/
! # define _p pub._p
! # define _flags pub._flags
! # define _r pub._r
! # define _w pub._w
! # else
! # define fp_ fp
! # endif
# if defined __NetBSD__ || defined __OpenBSD__ /* NetBSD, OpenBSD */
/* See
<http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
***************
*** 32,38 ****
/* More fields, not relevant here. */
};
# define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub
! # else /* FreeBSD, MacOS X, Cygwin */
# define fp_ub fp->_ub
# endif
--- 59,65 ----
/* More fields, not relevant here. */
};
# define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub
! # else /* FreeBSD, DragonFly, MacOS
X, Cygwin */
# define fp_ub fp->_ub
# endif