![Yann E. MORIN](/assets/img/avatar_default.png)
glibc-2.28 did quite some lifting in their headers, which breaks the way some packages were detecting glibc, like gnulib. However, packages do bundle gnulib (it was meant to be bundled), and so does m4. Since m4 hasn't seen the slightest commit since 2017-01-09, it is bundling an old gnulib version, that predates glibc-2.28, and thus breaks. It also means that upstream hasn't already fixed the issue. Furthermore, as upstream is using a git submodule for gnulib, and that the paths are not the same in the release tarball (in lib/) and in the git tree (in gnulib/), we can't do a plain backport. So, we selectively backport the two patches from gnulib upstream, restricted to only the files that happen to be used in m4. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Reported-by: c32 on IRC Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
167 lines
6.7 KiB
Diff
167 lines
6.7 KiB
Diff
From 4af4a4a71827c0bc5e0ec67af23edef4f15cee8e Mon Sep 17 00:00:00 2001
|
|
From: Paul Eggert <eggert@cs.ucla.edu>
|
|
Date: Mon, 5 Mar 2018 10:56:29 -0800
|
|
Subject: [PATCH] fflush: adjust to glibc 2.28 libio.h removal
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Problem reported by Daniel P. Berrangé in:
|
|
https://lists.gnu.org/r/bug-gnulib/2018-03/msg00000.html
|
|
* lib/fbufmode.c (fbufmode):
|
|
* lib/fflush.c (clear_ungetc_buffer_preserving_position)
|
|
(disable_seek_optimization, rpl_fflush):
|
|
* lib/fpending.c (__fpending):
|
|
* lib/fpurge.c (fpurge):
|
|
* lib/freadable.c (freadable):
|
|
* lib/freadahead.c (freadahead):
|
|
* lib/freading.c (freading):
|
|
* lib/freadptr.c (freadptr):
|
|
* lib/freadseek.c (freadptrinc):
|
|
* lib/fseeko.c (fseeko):
|
|
* lib/fseterr.c (fseterr):
|
|
* lib/fwritable.c (fwritable):
|
|
* lib/fwriting.c (fwriting):
|
|
Check _IO_EOF_SEEN instead of _IO_ftrylockfile.
|
|
* lib/stdio-impl.h (_IO_IN_BACKUP) [_IO_EOF_SEEN]:
|
|
Define if not already defined.
|
|
|
|
[yann.morin.1998@free.fr: partially backport from upstream gnulib]
|
|
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
|
|
|
|
---
|
|
lib/fflush.c | 6 +++---
|
|
lib/fpending.c | 2 +-
|
|
lib/fpurge.c | 2 +-
|
|
lib/freadahead.c | 2 +-
|
|
lib/freading.c | 2 +-
|
|
lib/fseeko.c | 4 ++--
|
|
lib/stdio-impl.h | 6 ++++++
|
|
7 files changed, 15 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/lib/fflush.c b/build-aux/gnulib/lib/fflush.c
|
|
index 983ade0ff..a6edfa105 100644
|
|
--- a/lib/fflush.c
|
|
+++ b/lib/fflush.c
|
|
@@ -33,7 +33,7 @@
|
|
#undef fflush
|
|
|
|
|
|
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
|
|
/* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */
|
|
static void
|
|
@@ -72,7 +72,7 @@ clear_ungetc_buffer (FILE *fp)
|
|
|
|
#endif
|
|
|
|
-#if ! (defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */)
|
|
+#if ! (defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */)
|
|
|
|
# if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
|
|
/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
|
|
@@ -148,7 +148,7 @@ rpl_fflush (FILE *stream)
|
|
if (stream == NULL || ! freading (stream))
|
|
return fflush (stream);
|
|
|
|
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
|
|
clear_ungetc_buffer_preserving_position (stream);
|
|
|
|
diff --git a/lib/fpending.c b/build-aux/gnulib/lib/fpending.c
|
|
index c84e3a5b4..789f50e4e 100644
|
|
--- a/lib/fpending.c
|
|
+++ b/lib/fpending.c
|
|
@@ -32,7 +32,7 @@ __fpending (FILE *fp)
|
|
/* Most systems provide FILE as a struct and the necessary bitmask in
|
|
<stdio.h>, because they need it for implementing getc() and putc() as
|
|
fast macros. */
|
|
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
+#if defined _IO_EOF_SEEN || __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__
|
|
/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
|
|
diff --git a/lib/fpurge.c b/build-aux/gnulib/lib/fpurge.c
|
|
index b1d417c7a..3aedcc373 100644
|
|
--- a/lib/fpurge.c
|
|
+++ b/lib/fpurge.c
|
|
@@ -62,7 +62,7 @@ fpurge (FILE *fp)
|
|
/* Most systems provide FILE as a struct and the necessary bitmask in
|
|
<stdio.h>, because they need it for implementing getc() and putc() as
|
|
fast macros. */
|
|
-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
+# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
fp->_IO_read_end = fp->_IO_read_ptr;
|
|
fp->_IO_write_ptr = fp->_IO_write_base;
|
|
/* Avoid memory leak when there is an active ungetc buffer. */
|
|
diff --git a/lib/freadahead.c b/build-aux/gnulib/lib/freadahead.c
|
|
index c2ecb5b28..23ec76ee5 100644
|
|
--- a/lib/freadahead.c
|
|
+++ b/lib/freadahead.c
|
|
@@ -30,7 +30,7 @@ extern size_t __sreadahead (FILE *);
|
|
size_t
|
|
freadahead (FILE *fp)
|
|
{
|
|
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
if (fp->_IO_write_ptr > fp->_IO_write_base)
|
|
return 0;
|
|
return (fp->_IO_read_end - fp->_IO_read_ptr)
|
|
diff --git a/lib/freading.c b/build-aux/gnulib/lib/freading.c
|
|
index 73c28acdd..c24d0c88a 100644
|
|
--- a/lib/freading.c
|
|
+++ b/lib/freading.c
|
|
@@ -31,7 +31,7 @@ freading (FILE *fp)
|
|
/* Most systems provide FILE as a struct and the necessary bitmask in
|
|
<stdio.h>, because they need it for implementing getc() and putc() as
|
|
fast macros. */
|
|
-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
+# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
return ((fp->_flags & _IO_NO_WRITES) != 0
|
|
|| ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0
|
|
&& fp->_IO_read_base != NULL));
|
|
diff --git a/lib/fseeko.c b/build-aux/gnulib/lib/fseeko.c
|
|
index 0101ab55f..193f4e8ce 100644
|
|
--- a/lib/fseeko.c
|
|
+++ b/lib/fseeko.c
|
|
@@ -47,7 +47,7 @@ fseeko (FILE *fp, off_t offset, int whence)
|
|
#endif
|
|
|
|
/* These tests are based on fpurge.c. */
|
|
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
if (fp->_IO_read_end == fp->_IO_read_ptr
|
|
&& fp->_IO_write_ptr == fp->_IO_write_base
|
|
&& fp->_IO_save_base == NULL)
|
|
@@ -123,7 +123,7 @@ fseeko (FILE *fp, off_t offset, int whence)
|
|
return -1;
|
|
}
|
|
|
|
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
|
fp->_flags &= ~_IO_EOF_SEEN;
|
|
fp->_offset = pos;
|
|
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
|
|
diff --git a/lib/stdio-impl.h b/build-aux/gnulib/lib/stdio-impl.h
|
|
index 78d896e9f..05c5752a2 100644
|
|
--- a/lib/stdio-impl.h
|
|
+++ b/lib/stdio-impl.h
|
|
@@ -18,6 +18,12 @@
|
|
the same implementation of stdio extension API, except that some fields
|
|
have different naming conventions, or their access requires some casts. */
|
|
|
|
+/* Glibc 2.28 made _IO_IN_BACKUP private. For now, work around this
|
|
+ problem by defining it ourselves. FIXME: Do not rely on glibc
|
|
+ internals. */
|
|
+#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN
|
|
+# define _IO_IN_BACKUP 0x100
|
|
+#endif
|
|
|
|
/* BSD stdio derived implementations. */
|
|
|
|
--
|
|
2.14.1
|
|
|