Hi Eric, > #if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, > DragonFly, MacOS X, Cygwin */ > - fp_->_offset = pos; > + /* Use a union, since on NetBSD, the compilation flags determine > + whether fpos_t is typedef'd to off_t or a struct containing a > + single off_t member. */ > + union > + { > + fpos_t f; > + off_t o; > + } u; > + u.o = pos; > + fp_->_offset = u.f;
This is right for platforms for which the '_offset' field is declared as an 'fpos_t'. Thanks. But for the platforms where '_offset' is a scalar type (_off64_t on Cygwin), and where fpos_t might or might become a struct, the use of fpos_t is better avoided. I'm therefore applything this (which currently is a no-op). 2009-12-19 Bruno Haible <br...@clisp.org> fflush: tweak * lib/fflush.c (update_fpos_cache): Don't use fpos_t on Cygwin. * lib/fseeko.c (rpl_fseeko): Likewise. --- lib/fflush.c.orig 2009-12-19 12:29:56.000000000 +0100 +++ lib/fflush.c 2009-12-19 12:29:32.000000000 +0100 @@ -91,6 +91,11 @@ update_fpos_cache (FILE *fp, off_t pos) { #if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ +# if defined __CYGWIN__ + /* fp_->_offset is typed as an integer. */ + fp_->_offset = pos; +# else + /* fp_->_offset is an fpos_t. */ /* Use a union, since on NetBSD, the compilation flags determine whether fpos_t is typedef'd to off_t or a struct containing a single off_t member. */ @@ -101,6 +106,7 @@ } u; u.o = pos; fp_->_offset = u.f; +# endif fp_->_flags |= __SOFF; #endif } --- lib/fseeko.c.orig 2009-12-19 12:29:56.000000000 +0100 +++ lib/fseeko.c 2009-12-19 11:49:43.000000000 +0100 @@ -110,6 +110,11 @@ #if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ fp->_flags &= ~_IO_EOF_SEEN; #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ +# if defined __CYGWIN__ + /* fp_->_offset is typed as an integer. */ + fp_->_offset = pos; +# else + /* fp_->_offset is an fpos_t. */ { /* Use a union, since on NetBSD, the compilation flags determine whether fpos_t is typedef'd to off_t or a struct @@ -122,6 +127,7 @@ u.o = pos; fp_->_offset = u.f; } +# endif fp_->_flags |= __SOFF; fp_->_flags &= ~__SEOF; #elif defined __EMX__ /* emx+gcc */