> FAIL: test-fbufmode > FAIL: test-fclose > FAIL: test-fflush > FAIL: test-fflush2.sh > FAIL: test-fpurge > FAIL: test-freadable > FAIL: test-freading > FAIL: test-fwritable > FAIL: test-posix_spawn-inherit0 > FAIL: test-supersede
These two patches fix the test failures on OpenBSD 7.8. The first patch is a cleanup of unneeded changes from the previous commit, taking into account <https://github.com/openbsd/src/commit/24f9d669f84293935af75b1b5351b987dc03ad0b>. The second patch adds support for OpenBSD 7.8 and drops support for intermediate versions between OpenBSD 7.7 and 7.8. 2025-10-23 Bruno Haible <[email protected]> stdioext: Add support for OpenBSD >= 7.8. * lib/stdio-impl.h (fp_): Separate definitions for OpenBSD from those for Android. Add definition for OpenBSD >= 7.8. * lib/fflush.c (clear_ungetc_buffer, disable_seek_optimization, update_fpos_cache, rpl_fflush): Don't test for __OpenBSD__, since OpenBSD <= 7.7 is covered by the __sferror test and OpenBSD >= 7.8 does not need the workarounds. * lib/fseeko.c (fseeko): Likewise. * lib/fpurge.c (fpurge): Likewise. 2025-10-23 Bruno Haible <[email protected]> stdioext: Revert unneeded changes in 2025-07-20 commit. * lib/fpending.c (__fpending): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __fpending. * lib/freadahead.c (freadahead): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __freadahead. * lib/freading.c (freading): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __freading. * lib/freadptr.c (freadptr): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __freadptr. * lib/freadseek.c (freadptrinc): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __freadptrinc. * lib/fseterr.c (fseterr): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __fseterr. * lib/fwriting.c (fwriting): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __fwriting.
>From 3813b2c439b64a6670b26332f660c53138c516ad Mon Sep 17 00:00:00 2001 From: Bruno Haible <[email protected]> Date: Thu, 23 Oct 2025 16:06:22 +0200 Subject: [PATCH 1/2] stdioext: Revert unneeded changes in 2025-07-20 commit. * lib/fpending.c (__fpending): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __fpending. * lib/freadahead.c (freadahead): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __freadahead. * lib/freading.c (freading): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __freading. * lib/freadptr.c (freadptr): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __freadptr. * lib/freadseek.c (freadptrinc): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __freadptrinc. * lib/fseterr.c (fseterr): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __fseterr. * lib/fwriting.c (fwriting): Don't test for __OpenBSD__, since OpenBSD >= 7.6 already has __fwriting. --- ChangeLog | 18 ++++++++++++++++++ lib/fpending.c | 8 ++++---- lib/freadahead.c | 6 +++--- lib/freading.c | 8 ++++++-- lib/freadptr.c | 6 +++--- lib/freadseek.c | 6 +++--- lib/fseterr.c | 6 +++--- lib/fwriting.c | 8 ++++---- 8 files changed, 44 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index a28b2c5225..b776dc087c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2025-10-23 Bruno Haible <[email protected]> + + stdioext: Revert unneeded changes in 2025-07-20 commit. + * lib/fpending.c (__fpending): Don't test for __OpenBSD__, since + OpenBSD >= 7.6 already has __fpending. + * lib/freadahead.c (freadahead): Don't test for __OpenBSD__, since + OpenBSD >= 7.6 already has __freadahead. + * lib/freading.c (freading): Don't test for __OpenBSD__, since + OpenBSD >= 7.6 already has __freading. + * lib/freadptr.c (freadptr): Don't test for __OpenBSD__, since + OpenBSD >= 7.6 already has __freadptr. + * lib/freadseek.c (freadptrinc): Don't test for __OpenBSD__, since + OpenBSD >= 7.6 already has __freadptrinc. + * lib/fseterr.c (fseterr): Don't test for __OpenBSD__, since + OpenBSD >= 7.6 already has __fseterr. + * lib/fwriting.c (fwriting): Don't test for __OpenBSD__, since + OpenBSD >= 7.6 already has __fwriting. + 2025-10-22 Collin Funk <[email protected]> doc: Update gmtime_r documentation for OpenBSD 7.8. diff --git a/lib/fpending.c b/lib/fpending.c index 5d85c64d89..5aaa33f58a 100644 --- a/lib/fpending.c +++ b/lib/fpending.c @@ -25,8 +25,8 @@ #include "stdio-impl.h" /* This file is not used on systems that already have the __fpending function, - namely glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, - Android API >= 23, musl libc, Haiku >= hrev58760. */ + namely glibc >= 2.2, OpenBSD >= 7.6, Solaris >= 7, UnixWare >= 7.1.4.MP4, + Cygwin >= 1.7.34, Android API >= 23, musl libc, Haiku >= hrev58760. */ /* Return the number of pending (aka buffered, unflushed) bytes on the stream, FP, that is open for writing. */ @@ -39,8 +39,8 @@ __fpending (FILE *fp) #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ return fp->_IO_write_ptr - fp->_IO_write_base; -#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */ +#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD < 7.6, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */ return fp_->_p - fp_->_bf._base; #elif defined __EMX__ /* emx+gcc */ return fp->_ptr - fp->_buffer; diff --git a/lib/freadahead.c b/lib/freadahead.c index b2c53d660f..da30c1cad8 100644 --- a/lib/freadahead.c +++ b/lib/freadahead.c @@ -28,7 +28,7 @@ extern size_t __sreadahead (FILE *); #endif /* This file is not used on systems that have the __freadahead function, - namely musl libc, Haiku >= hrev58760. */ + namely OpenBSD >= 7.6, musl libc, Haiku >= hrev58760. */ size_t freadahead (FILE *fp) @@ -40,8 +40,8 @@ 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 __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD < 7.6, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ if ((fp_->_flags & __SWR) != 0 || fp_->_r < 0) return 0; # if defined __DragonFly__ diff --git a/lib/freading.c b/lib/freading.c index 8951475b81..059a5d48ae 100644 --- a/lib/freading.c +++ b/lib/freading.c @@ -25,6 +25,10 @@ <https://sourceware.org/PR4359> */ #if !(HAVE___FREADING && (!defined __GLIBC__ || defined __UCLIBC__ || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7))) +/* This code is not compiled on systems that have a working __freading function, + namely glibc >= 2.7, OpenBSD >= 7.6, Solaris >= 7, UnixWare >= 7.1.4.MP4, + Cygwin >= 1.7.34, Android API >= 28, musl libc, Haiku >= hrev58760. */ + bool freading (FILE *fp) { @@ -36,8 +40,8 @@ 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 __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */ +# elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD < 7.6, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */ return (fp_->_flags & __SRD) != 0; # elif defined __EMX__ /* emx+gcc */ return (fp->_flags & _IOREAD) != 0; diff --git a/lib/freadptr.c b/lib/freadptr.c index 92c1fbcb47..d75205f8a4 100644 --- a/lib/freadptr.c +++ b/lib/freadptr.c @@ -24,7 +24,7 @@ #include "stdio-impl.h" /* This file is not used on systems that have the __freadptr function, - namely musl libc, Haiku >= hrev58760. */ + namely OpenBSD >= 7.6, musl libc, Haiku >= hrev58760. */ const char * freadptr (FILE *fp, size_t *sizep) @@ -41,8 +41,8 @@ freadptr (FILE *fp, size_t *sizep) return NULL; *sizep = size; return (const char *) fp->_IO_read_ptr; -#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD < 7.6, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ if ((fp_->_flags & __SWR) != 0 || fp_->_r < 0) return NULL; size = fp_->_r; diff --git a/lib/freadseek.c b/lib/freadseek.c index 2ab790c1d8..18881e32ff 100644 --- a/lib/freadseek.c +++ b/lib/freadseek.c @@ -34,13 +34,13 @@ static void freadptrinc (FILE *fp, size_t increment) { /* Keep this code in sync with freadptr! */ -#if HAVE___FREADPTRINC /* musl libc, Haiku >= hrev58760 */ +#if HAVE___FREADPTRINC /* OpenBSD >= 7.6, musl libc, Haiku >= hrev58760 */ __freadptrinc (fp, increment); #elif defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku < hrev58760, Linux libc5 */ fp->_IO_read_ptr += increment; -#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD < 7.6, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ fp_->_p += increment; fp_->_r -= increment; #elif defined __EMX__ /* emx+gcc */ diff --git a/lib/fseterr.c b/lib/fseterr.c index 4ac4d93204..40aca95c8e 100644 --- a/lib/fseterr.c +++ b/lib/fseterr.c @@ -24,7 +24,7 @@ #include "stdio-impl.h" /* This file is not used on systems that have the __fseterr function, - namely musl libc, Haiku >= hrev58760. */ + namely OpenBSD >= 7.6, musl libc, Haiku >= hrev58760. */ void fseterr (FILE *fp) @@ -35,8 +35,8 @@ fseterr (FILE *fp) #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ fp->_flags |= _IO_ERR_SEEN; -#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD < 7.6, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ fp_->_flags |= __SERR; #elif defined __EMX__ /* emx+gcc */ fp->_flags |= _IOERR; diff --git a/lib/fwriting.c b/lib/fwriting.c index f9020b668b..3c7f4094e0 100644 --- a/lib/fwriting.c +++ b/lib/fwriting.c @@ -22,8 +22,8 @@ #include "stdio-impl.h" /* This file is not used on systems that have the __fwriting function, - namely glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, - Android API >= 29, musl libc, Haiku >= hrev58760. */ + namely glibc >= 2.2, OpenBSD >= 7.6, Solaris >= 7, UnixWare >= 7.1.4.MP4, + Cygwin >= 1.7.34, Android API >= 28, musl libc, Haiku >= hrev58760. */ bool fwriting (FILE *fp) @@ -34,8 +34,8 @@ fwriting (FILE *fp) #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ return (fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) != 0; -#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */ +#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD < 7.6, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */ return (fp_->_flags & __SWR) != 0; #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & _IOWRT) != 0; -- 2.51.0
>From e1d738170920b51cb0035bf939dd29e4f7c6d6fb Mon Sep 17 00:00:00 2001 From: Bruno Haible <[email protected]> Date: Thu, 23 Oct 2025 16:14:15 +0200 Subject: [PATCH 2/2] stdioext: Add support for OpenBSD >= 7.8. * lib/stdio-impl.h (fp_): Separate definitions for OpenBSD from those for Android. Add definition for OpenBSD >= 7.8. * lib/fflush.c (clear_ungetc_buffer, disable_seek_optimization, update_fpos_cache, rpl_fflush): Don't test for __OpenBSD__, since OpenBSD <= 7.7 is covered by the __sferror test and OpenBSD >= 7.8 does not need the workarounds. * lib/fseeko.c (fseeko): Likewise. * lib/fpurge.c (fpurge): Likewise. --- ChangeLog | 12 ++++++++++ lib/fflush.c | 16 ++++++------- lib/fpurge.c | 10 ++++----- lib/fseeko.c | 15 ++++++++----- lib/stdio-impl.h | 58 +++++++++++++++++++++++++++++++++++++++++------- 5 files changed, 84 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index b776dc087c..a1228c2cd1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2025-10-23 Bruno Haible <[email protected]> + + stdioext: Add support for OpenBSD >= 7.8. + * lib/stdio-impl.h (fp_): Separate definitions for OpenBSD from those + for Android. Add definition for OpenBSD >= 7.8. + * lib/fflush.c (clear_ungetc_buffer, disable_seek_optimization, + update_fpos_cache, rpl_fflush): Don't test for __OpenBSD__, since + OpenBSD <= 7.7 is covered by the __sferror test and OpenBSD >= 7.8 does + not need the workarounds. + * lib/fseeko.c (fseeko): Likewise. + * lib/fpurge.c (fpurge): Likewise. + 2025-10-23 Bruno Haible <[email protected]> stdioext: Revert unneeded changes in 2025-07-20 commit. diff --git a/lib/fflush.c b/lib/fflush.c index 5f2ed1099d..3aa9b42a2a 100644 --- a/lib/fflush.c +++ b/lib/fflush.c @@ -52,8 +52,8 @@ clear_ungetc_buffer_preserving_position (FILE *fp) static void clear_ungetc_buffer (FILE *fp) { -# if defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +# if defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD <= 7.7, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ if (HASUB (fp)) { fp_->_p += fp_->_r; @@ -77,8 +77,8 @@ clear_ungetc_buffer (FILE *fp) #if ! (defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1) /* GNU libc, BeOS, Haiku, Linux libc5 */ -# if (defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT -/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +# if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT +/* FreeBSD, NetBSD, OpenBSD <= 7.7, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ static int disable_seek_optimization (FILE *fp) @@ -100,8 +100,8 @@ static void update_fpos_cache (_GL_ATTRIBUTE_MAYBE_UNUSED FILE *fp, _GL_ATTRIBUTE_MAYBE_UNUSED off_t pos) { -# if defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +# if defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD <= 7.7, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ # if defined __CYGWIN__ || defined __ANDROID__ /* fp_->_offset is typed as an integer. */ fp_->_offset = pos; @@ -205,8 +205,8 @@ rpl_fflush (FILE *stream) return result; } -# if (defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +# if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT + /* FreeBSD, NetBSD, OpenBSD <= 7.7, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ { /* Disable seek optimization for the next fseeko call. This tells the diff --git a/lib/fpurge.c b/lib/fpurge.c index 4e204880d0..53a3feaed3 100644 --- a/lib/fpurge.c +++ b/lib/fpurge.c @@ -37,7 +37,7 @@ fpurge (FILE *fp) /* The __fpurge function does not have a return value. */ return 0; -#elif HAVE_FPURGE /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin >= 1.7 */ +#elif HAVE_FPURGE /* FreeBSD, NetBSD, 2.0 <= OpenBSD <= 7.7, DragonFly, Mac OS X, Cygwin >= 1.7 */ /* Call the system's fpurge function. */ # undef fpurge @@ -45,8 +45,8 @@ fpurge (FILE *fp) extern int fpurge (FILE *); # endif int result = fpurge (fp); -# if defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +# if defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD <= 7.7, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ if (result == 0) /* Correct the invariants that fpurge broke. <stdio.h> on BSD systems says: @@ -75,8 +75,8 @@ fpurge (FILE *fp) fp->_IO_save_base = NULL; } return 0; -# elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +# elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD < 2.0, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ fp_->_p = fp_->_bf._base; fp_->_r = 0; fp_->_w = ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */ diff --git a/lib/fseeko.c b/lib/fseeko.c index b72822cd2c..e48d42c5ef 100644 --- a/lib/fseeko.c +++ b/lib/fseeko.c @@ -55,8 +55,8 @@ 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 __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD <= 7.7, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ # if defined __SL64 && defined __SCLE /* Cygwin */ if ((fp->_flags & __SL64) == 0) { @@ -104,6 +104,9 @@ fseeko (FILE *fp, off_t offset, int whence) #elif defined EPLAN9 /* Plan9 */ if (fp->rp == fp->buf && fp->wp == fp->buf) +#elif defined __OpenBSD__ && !defined __sferror /* OpenBSD >= 7.8 */ + /* fseeko and fflush work as advertised. */ + if (0) #elif FUNC_FFLUSH_STDIN < 0 && 200809 <= _POSIX_VERSION /* Cross-compiling to some other system advertising conformance to POSIX.1-2008 or later. Assume fseeko and fflush work as advertised. @@ -120,8 +123,8 @@ fseeko (FILE *fp, off_t offset, int whence) off_t pos = lseek (fileno (fp), offset, whence); if (pos == -1) { -#if defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +#if defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD <= 7.7, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ fp_->_flags &= ~__SOFF; #endif return -1; @@ -131,8 +134,8 @@ fseeko (FILE *fp, off_t offset, int whence) /* GNU libc, BeOS, Haiku, Linux libc5 */ fp_->_flags &= ~_IO_EOF_SEEN; fp_->_offset = pos; -#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD <= 7.7, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ # if defined __CYGWIN__ || (defined __NetBSD__ && __NetBSD_Version__ >= 600000000) || defined __minix /* fp_->_offset is typed as an integer. */ fp_->_offset = pos; diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h index 4abf9e68b2..e4a69a8d11 100644 --- a/lib/stdio-impl.h +++ b/lib/stdio-impl.h @@ -108,15 +108,59 @@ # define _flags pub._flags # define _r pub._r # define _w pub._w -# elif defined __ANDROID__ || defined __OpenBSD__ /* Android, OpenBSD */ -# if defined __LP64__ && !defined __OpenBSD__ +# elif defined __OpenBSD__ /* OpenBSD */ +# if defined __sferror /* OpenBSD <= 7.7 */ +# define _gl_flags_file_t short +# else /* OpenBSD >= 7.8 */ +# define _gl_flags_file_t int +# endif + /* Up to this commit from 2025-07-16 + <https://github.com/openbsd/src/commit/b7f6c2eb760a2da367dd51d539ef06f5f3553790> + the innards of FILE were public. After this commit, the innards of FILE + are hidden. In this commit + <https://github.com/openbsd/src/commit/9063a2f1ec94013fb0e2c7ec851495108e788a6e> + they were reshuffled. */ +# if defined __sferror /* OpenBSD <= 7.7 */ +# define fp_ ((struct { unsigned char *_p; \ + int _r; \ + int _w; \ + _gl_flags_file_t _flags; \ + _gl_flags_file_t _file; \ + struct { unsigned char *_base; size_t _size; } _bf; \ + int _lbfsize; \ + void *_cookie; \ + void *_close; \ + void *_read; \ + void *_seek; \ + void *_write; \ + struct { unsigned char *_base; size_t _size; } _ext; \ + unsigned char *_up; \ + int _ur; \ + unsigned char _ubuf[3]; \ + unsigned char _nbuf[1]; \ + struct { unsigned char *_base; size_t _size; } _lb; \ + int _blksize; \ + fpos_t _offset; \ + /* More fields, not relevant here. */ \ + } *) fp) +# else /* OpenBSD >= 7.8 */ +# define fp_ ((struct { _gl_flags_file_t _flags; \ + _gl_flags_file_t _file; \ + unsigned char *_p; \ + int _r; \ + int _w; \ + struct { unsigned char *_base; size_t _size; } _bf; \ + int _lbfsize; \ + /* More fields, not relevant here. */ \ + } *) fp) +# endif +# elif defined __ANDROID__ /* Android */ +# if defined __LP64__ # define _gl_flags_file_t int # else # define _gl_flags_file_t short # endif -# if defined __OpenBSD__ -# define _gl_file_offset_t fpos_t -# elif defined __LP64__ +# if defined __LP64__ # define _gl_file_offset_t int64_t # else /* see https://android.googlesource.com/platform/bionic/+/master/docs/32-bit-abi.md */ @@ -127,9 +171,7 @@ the innards of FILE were public, see <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/fileext.h> and <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/local.h>. - After this commit, the innards of FILE are hidden. Likewise for OpenBSD - up to this commit from 2025-07-16 - <https://github.com/openbsd/src/commit/b7f6c2eb760a2da367dd51d539ef06f5f3553790>. */ + After this commit, the innards of FILE are hidden. */ # define fp_ ((struct { unsigned char *_p; \ int _r; \ int _w; \ -- 2.51.0
