]> git.ipfire.org Git - thirdparty/gnulib.git/commitdiff
stdioext: Port to recent OpenBSD snapshots with an incomplete FILE type.
authorCollin Funk <collin.funk1@gmail.com>
Mon, 21 Jul 2025 04:14:37 +0000 (21:14 -0700)
committerCollin Funk <collin.funk1@gmail.com>
Mon, 21 Jul 2025 04:14:37 +0000 (21:14 -0700)
* lib/fbufmode.c (fbufmode): Check for __OpenBSD__ definition since
__sferror is no longer defined publicly on this platform.
* lib/fflush.c (clear_ungetc_buffer, update_fpos_cache, rpl_fflush):
Likewise.
* lib/fpending.c (__fpending): Likewise.
* lib/fpurge.c (fpurge): Likewise.
* lib/freadable.c (freadable): 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/stdio-impl.h: Likewise.
(_gl_flags_file_t): Define to 'short'.
(_gl_file_offset_t): Define to 'fpos_t'.
(fp_): Define this macro using the one already written for Android.
(struct __sfileext): Define the same way as Android which does not rely
on a public 'struct __sbuf' definition.
(__SLBF, __SNBF, __SRD, __SWR, __SRW, __SEOF, __SERR, __SOFF): Define
macros to the same value as on Android.

15 files changed:
ChangeLog
lib/fbufmode.c
lib/fflush.c
lib/fpending.c
lib/fpurge.c
lib/freadable.c
lib/freadahead.c
lib/freading.c
lib/freadptr.c
lib/freadseek.c
lib/fseeko.c
lib/fseterr.c
lib/fwritable.c
lib/fwriting.c
lib/stdio-impl.h

index a7dcba20703bbcd660d3b3c4eac1d98229555dc9..9003983e2c230024ab15a1e804c724b44a10d85f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,30 @@
+2025-07-20  Collin Funk  <collin.funk1@gmail.com>
+
+       stdioext: Port to recent OpenBSD snapshots with an incomplete FILE type.
+       * lib/fbufmode.c (fbufmode): Check for __OpenBSD__ definition since
+       __sferror is no longer defined publicly on this platform.
+       * lib/fflush.c (clear_ungetc_buffer, update_fpos_cache, rpl_fflush):
+       Likewise.
+       * lib/fpending.c (__fpending): Likewise.
+       * lib/fpurge.c (fpurge): Likewise.
+       * lib/freadable.c (freadable): 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/stdio-impl.h: Likewise.
+       (_gl_flags_file_t): Define to 'short'.
+       (_gl_file_offset_t): Define to 'fpos_t'.
+       (fp_): Define this macro using the one already written for Android.
+       (struct __sfileext): Define the same way as Android which does not rely
+       on a public 'struct __sbuf' definition.
+       (__SLBF, __SNBF, __SRD, __SWR, __SRW, __SEOF, __SERR, __SOFF): Define
+       macros to the same value as on Android.
+
 2025-07-20  Bruno Haible  <bruno@clisp.org>
 
        doc: Document resilience against supply chain attacks.
index 416a7a4cd09fc40864a12e630cab912a82b7293a..b10a122f94d8ac72b4c6dc2ed677f8052f9944d9 100644 (file)
@@ -48,7 +48,7 @@ fbufmode (FILE *fp)
   if (fp_->_flags & _IO_UNBUFFERED)
     return _IONBF;
   return _IOFBF;
-#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
+#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
   if (fp_->_flags & __SLBF)
     return _IOLBF;
index 9e256f327229098f506a8d73e2bbe8a258d66f62..896b9dab3dd76d26ba24cf3d7733ac10b68fba2b 100644 (file)
@@ -52,7 +52,7 @@ clear_ungetc_buffer_preserving_position (FILE *fp)
 static void
 clear_ungetc_buffer (FILE *fp)
 {
-# if defined __sferror || defined __DragonFly__ || defined __ANDROID__
+# if defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
   if (HASUB (fp))
     {
@@ -77,7 +77,7 @@ 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 __DragonFly__ || defined __ANDROID__) && defined __SNPT
+# if (defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
 /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
 
 static int
@@ -100,7 +100,7 @@ static void
 update_fpos_cache (_GL_ATTRIBUTE_MAYBE_UNUSED FILE *fp,
                    _GL_ATTRIBUTE_MAYBE_UNUSED off_t pos)
 {
-#  if defined __sferror || defined __DragonFly__ || defined __ANDROID__
+#  if defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
 #   if defined __CYGWIN__ || defined __ANDROID__
   /* fp_->_offset is typed as an integer.  */
@@ -205,7 +205,7 @@ rpl_fflush (FILE *stream)
         return result;
     }
 
-# if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
+# if (defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
     /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
 
     {
index be8a98773494d6606abcdfb1451d957be75b1d30..529bc7f65171968e950cc0f711ee0b77780440ce 100644 (file)
@@ -39,7 +39,7 @@ __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 __DragonFly__ || defined __ANDROID__
+#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */
   return fp_->_p - fp_->_bf._base;
 #elif defined __EMX__                /* emx+gcc */
index 0b0f90abda3e6c92a2565fb996de37d85a068117..a9f9c3d66fabec2f0e2bc2db99e4d13a64b8e031 100644 (file)
@@ -45,7 +45,7 @@ fpurge (FILE *fp)
   extern int fpurge (FILE *);
 # endif
   int result = fpurge (fp);
-# if defined __sferror || defined __DragonFly__ || defined __ANDROID__
+# if defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
   if (result == 0)
     /* Correct the invariants that fpurge broke.
@@ -75,7 +75,7 @@ fpurge (FILE *fp)
       fp->_IO_save_base = NULL;
     }
   return 0;
-# elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
+# elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
   fp_->_p = fp_->_bf._base;
   fp_->_r = 0;
index 2a494ae1ce5d8e77be466109cd6087e3def8d698..60eb32f93b340bb47cf57f97ff2962d53d6f9817 100644 (file)
@@ -38,7 +38,7 @@ freadable (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) == 0;
-#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
+#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */
   return (fp_->_flags & (__SRW | __SRD)) != 0;
 #elif defined __EMX__               /* emx+gcc */
index 5a7da7c30b68e58a288e93e932d5d2bdb5fb932e..c44ab033c759875138012ed0e3211945d67498bc 100644 (file)
@@ -40,7 +40,7 @@ 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__ || defined __ANDROID__
+#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
   if ((fp_->_flags & __SWR) != 0 || fp_->_r < 0)
     return 0;
index c8af68b5c5c7b2388782d5a20de20fc3f3e3fdd8..1a5d0e0dadfb3cefd59dd543409cc2a72ee8accf 100644 (file)
@@ -36,7 +36,7 @@ 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__ || defined __ANDROID__
+# elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */
   return (fp_->_flags & __SRD) != 0;
 # elif defined __EMX__               /* emx+gcc */
index bb56b470391a4c047e0e96f785a8530a8fa669da..9719c177e5f63c13963feab044fbbde59963f28b 100644 (file)
@@ -41,7 +41,7 @@ freadptr (FILE *fp, size_t *sizep)
     return NULL;
   *sizep = size;
   return (const char *) fp->_IO_read_ptr;
-#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
+#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
   if ((fp_->_flags & __SWR) != 0 || fp_->_r < 0)
     return NULL;
index 1fcc8d255ab892ad312c69b0fa19dbc2ec659573..5ddf7fab58bd8cd802f070c9d69e2635873ab66e 100644 (file)
@@ -39,7 +39,7 @@ freadptrinc (FILE *fp, size_t 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 __DragonFly__ || defined __ANDROID__
+#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
   fp_->_p += increment;
   fp_->_r -= increment;
index b39099c4a00ce4ba4a7c640fae4ddc207992fe2b..d4b6d8f44c395d39eaa60d0e061aded122825733 100644 (file)
@@ -55,7 +55,7 @@ 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__ || defined __ANDROID__
+#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
 # if defined __SL64 && defined __SCLE /* Cygwin */
   if ((fp->_flags & __SL64) == 0)
@@ -120,7 +120,7 @@ fseeko (FILE *fp, off_t offset, int whence)
       off_t pos = lseek (fileno (fp), offset, whence);
       if (pos == -1)
         {
-#if defined __sferror || defined __DragonFly__ || defined __ANDROID__
+#if defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
           /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
           fp_->_flags &= ~__SOFF;
 #endif
@@ -131,7 +131,7 @@ 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 __DragonFly__ || defined __ANDROID__
+#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
       /* FreeBSD, NetBSD, OpenBSD, 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.  */
index f66f30460a4529cf5d9138ede6c67ef5f5df35a5..caa8ef1087aca0c3bd70a18cdb47851a4b2f1ff7 100644 (file)
@@ -35,7 +35,7 @@ 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 __DragonFly__ || defined __ANDROID__
+#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
   fp_->_flags |= __SERR;
 #elif defined __EMX__               /* emx+gcc */
index 1f29f7f7738abd345b13e1ef146cf09bab237e91..54471a8271cc9309de33f637984cb41b70670821 100644 (file)
@@ -38,7 +38,7 @@ fwritable (FILE *fp)
 #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
   /* GNU libc, BeOS, Haiku, Linux libc5 */
   return (fp->_flags & _IO_NO_WRITES) == 0;
-#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
+#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */
   return (fp_->_flags & (__SRW | __SWR)) != 0;
 #elif defined __EMX__               /* emx+gcc */
index 3308ffcc3c3d1da8771093055f40ed13cc8ecf61..90cb2c3ad5b0cec57ca6727d3b59b4d09aca4e93 100644 (file)
@@ -34,7 +34,7 @@ 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 __DragonFly__ || defined __ANDROID__
+#elif defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */
   return (fp_->_flags & __SWR) != 0;
 #elif defined __EMX__               /* emx+gcc */
index 4b4263fe9087a215904158746abff13099241449..36295b94775019f10e458e41fecceb0ef4d2d5d2 100644 (file)
@@ -82,7 +82,7 @@
 
 #include <errno.h>                             /* For detecting Plan9.  */
 
-#if defined __sferror || defined __DragonFly__ || defined __ANDROID__
+#if defined __sferror || defined __OpenBSD__ || defined __DragonFly__ || defined __ANDROID__
   /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
 
 # if defined __DragonFly__          /* DragonFly */
 #  define _flags pub._flags
 #  define _r pub._r
 #  define _w pub._w
-# elif defined __ANDROID__ /* Android */
-#  ifdef __LP64__
+# elif defined __ANDROID__ || defined __OpenBSD__ /* Android & OpenBSD */
+#  if defined __LP64__ && !defined __OpenBSD__
 #   define _gl_flags_file_t int
 #  else
 #   define _gl_flags_file_t short
 #  endif
-#  ifdef __LP64__
+#  if defined __OpenBSD__
+#   define _gl_file_offset_t fpos_t
+#  elif defined __LP64__
 #   define _gl_file_offset_t int64_t
 #  else
     /* see https://android.googlesource.com/platform/bionic/+/master/docs/32-bit-abi.md */
 #  endif
   /* Up to this commit from 2015-10-12
      <https://android.googlesource.com/platform/bionic.git/+/f0141dfab10a4b332769d52fa76631a64741297a>
-     the innards of FILE were public, and fp_ub could be defined like for OpenBSD,
+     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.  */
+     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>.  */
 #  define fp_ ((struct { unsigned char *_p; \
                          int _r; \
                          int _w; \
 #  define fp_ fp
 # endif
 
-# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __minix /* NetBSD >= 1.5ZA, OpenBSD, Minix 3 */
+# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __minix /* NetBSD >= 1.5ZA, Minix 3 */
   /* See <https://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
-     and <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
      and <https://github.com/Stichting-MINIX-Research-Foundation/minix/blob/master/lib/libc/stdio/fileext.h> */
   struct __sfileext
     {
       /* More fields, not relevant here.  */
     };
 #  define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub
-# elif defined __ANDROID__                     /* Android */
+# elif defined __ANDROID__ || defined __OpenBSD__ /* Android & OpenBSD */
   struct __sfileext
     {
       struct { unsigned char *_base; size_t _size; } _ub; /* ungetc buffer */
 
 # define HASUB(fp) (fp_ub._base != NULL)
 
-# if defined __ANDROID__ /* Android */
-  /* Needed after this commit from 2016-01-25
-     <https://android.googlesource.com/platform/bionic.git/+/e70e0e9267d069bf56a5078c99307e08a7280de7> */
+# if defined __ANDROID__ || defined __OpenBSD__ /* Android & OpenBSD */
+  /* Needed after this Android commit from 2016-01-25
+     <https://android.googlesource.com/platform/bionic.git/+/e70e0e9267d069bf56a5078c99307e08a7280de7>
+     And after this OpenBSD commit from 2025-07-16
+     <https://github.com/openbsd/src/commit/b7f6c2eb760a2da367dd51d539ef06f5f3553790>.  */
 #  ifndef __SEOF
 #   define __SLBF 1
 #   define __SNBF 2