[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: stdioext on musl
From: |
Bruno Haible |
Subject: |
Re: stdioext on musl |
Date: |
Tue, 19 Jun 2012 23:36:20 +0200 |
User-agent: |
KMail/4.7.4 (Linux/3.1.10-1.9-desktop; KDE/4.7.4; x86_64; ; ) |
Rich Felker wrote:
> stdio_ext.h okay?
OK, of course.
With these patches from your side, I am applying these changes to gnulib.
No need for "#ifdef __MUSL__" for now.
2012-06-19 Bruno Haible <address@hidden>
stdioext: Add support for musl libc.
* m4/fbufmode.m4 (gl_FUNC_FBUFMODE): Test whether __fbufsize exists.
* lib/fbufmode.c (fbufmode): Add conditional code for musl.
* m4/fseterr.m4: New file.
* lib/fseterr.h (fseterr): Define as an alias of __fseterr if that
function exists.
* modules/fseterr (Files): Add m4/fseterr.m4.
(configure.ac): Invoke gl_FUNC_FSETERR. Compile fseterr.c if
__fseterr does not exist.
(Makefile.am): Remove fseterr.c from lib_SOURCES.
* lib/freadable.h: Update comment.
* lib/fwritable.h: Update comment.
* lib/freading.h: Update comment.
* lib/fwriting.h: Update comment.
* m4/freadahead.m4: New file.
* lib/freadahead.h (freadahead): Define as an alias of __freadahead if
that function exists.
* modules/freadahead (Files): Add m4/freadahead.m4.
(configure.ac): Invoke gl_FUNC_FREADAHEAD. Compile freadahead.c if
__freadahead does not exist.
(Makefile.am): Remove freadahead.c from lib_SOURCES.
* m4/freadptr.m4: New file.
* lib/freadptr.h (freadptr): Define as an alias of __freadptr if that
function exists.
* modules/freadptr (Files): Add m4/freadptr.m4.
(configure.ac): Invoke gl_FUNC_FREADPTR. Compile freadptr.c if
__freadptr does not exist.
(Makefile.am): Remove freadptr.c from lib_SOURCES.
* m4/freadseek.m4: New file.
* lib/freadseek.c (freadptrinc): Use __freadptrinc if that function
exists.
* modules/freadseek (Files): Add m4/freadseek.m4.
(configure.ac): Invoke gl_FUNC_FREADSEEK.
* lib/fpurge.c (fpurge): Update comment.
Reported by and with help from Rich Felker <address@hidden>.
--- lib/fbufmode.c.orig Tue Jun 19 23:18:35 2012
+++ lib/fbufmode.c Tue Jun 19 22:32:55 2012
@@ -79,6 +79,10 @@
if (fp->__linebuf)
return _IOLBF;
return (fp->__bufsize > 0 ? _IOFBF : _IONBF);
+#elif HAVE___FLBF && HAVE___FBUFSIZE /* musl libc */
+ if (__flbf (fp))
+ return _IOLBF;
+ return (__fbufsize (fp) > 0 ? _IOFBF : _IONBF);
#elif defined EPLAN9 /* Plan9 */
if (fp->flags & 2 /* LINEBUF */)
return _IOLBF;
--- lib/fpurge.c.orig Tue Jun 19 23:18:35 2012
+++ lib/fpurge.c Sun Jun 17 21:06:31 2012
@@ -29,7 +29,7 @@
int
fpurge (FILE *fp)
{
-#if HAVE___FPURGE /* glibc >= 2.2, Haiku, Solaris >= 7 */
+#if HAVE___FPURGE /* glibc >= 2.2, Haiku, Solaris >= 7, musl
libc */
__fpurge (fp);
/* The __fpurge function does not have a return value. */
--- lib/freadable.h.orig Tue Jun 19 23:18:35 2012
+++ lib/freadable.h Sun Jun 17 21:06:31 2012
@@ -22,7 +22,7 @@
STREAM must not be wide-character oriented.
The result doesn't change until the stream is closed or re-opened. */
-#if HAVE___FREADABLE /* glibc >= 2.2, Solaris >= 7 */
+#if HAVE___FREADABLE /* glibc >= 2.2, Solaris >= 7, musl libc */
# include <stdio_ext.h>
# define freadable(stream) (__freadable (stream) != 0)
--- lib/freadahead.h.orig Tue Jun 19 23:18:35 2012
+++ lib/freadahead.h Tue Jun 19 22:15:38 2012
@@ -17,10 +17,6 @@
#include <stddef.h>
#include <stdio.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
/* Assuming the stream STREAM is open for reading:
Return the number of bytes waiting in the input buffer of STREAM.
This includes both the bytes that have been read from the underlying input
@@ -31,8 +27,21 @@
STREAM must not be wide-character oriented. */
+#if HAVE___FREADAHEAD /* musl libc */
+
+# include <stdio_ext.h>
+# define freadahead(stream) __freadahead (stream)
+
+#else
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
extern size_t freadahead (FILE *stream) _GL_ATTRIBUTE_PURE;
-#ifdef __cplusplus
+# ifdef __cplusplus
}
+# endif
+
#endif
--- lib/freading.h.orig Tue Jun 19 23:18:35 2012
+++ lib/freading.h Tue Jun 19 22:17:43 2012
@@ -33,7 +33,7 @@
STREAM must not be wide-character oriented. */
#if HAVE___FREADING && (!defined __GLIBC__ || defined __UCLIBC__ || __GLIBC__
> 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7))
-/* Solaris >= 7, not glibc >= 2.2, but glibc >= 2.7 */
+/* Solaris >= 7, not glibc >= 2.2, but glibc >= 2.7, or musl libc */
# include <stdio_ext.h>
# define freading(stream) (__freading (stream) != 0)
--- lib/freadptr.h.orig Tue Jun 19 23:18:35 2012
+++ lib/freadptr.h Tue Jun 19 22:19:32 2012
@@ -17,10 +17,6 @@
#include <stddef.h>
#include <stdio.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
/* Assuming the stream STREAM is open for reading:
Return a pointer to the input buffer of STREAM, or NULL.
If the returned pointer is non-NULL, *SIZEP is set to the (positive) size
@@ -32,8 +28,21 @@
STREAM must not be wide-character oriented. */
+#if HAVE___FREADPTR /* musl libc */
+
+# include <stdio_ext.h>
+# define freadptr(stream,sizep) __freadptr (stream, sizep)
+
+#else
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
extern const char * freadptr (FILE *stream, size_t *sizep);
-#ifdef __cplusplus
+# ifdef __cplusplus
}
+# endif
+
#endif
--- lib/freadseek.c.orig Tue Jun 19 23:18:35 2012
+++ lib/freadseek.c Tue Jun 19 22:21:05 2012
@@ -34,7 +34,9 @@
freadptrinc (FILE *fp, size_t increment)
{
/* Keep this code in sync with freadptr! */
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku,
Linux libc5 */
+#if HAVE___FREADPTRINC /* musl libc */
+ __freadptrinc (fp, increment);
+#elif defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS,
Haiku, Linux libc5 */
fp->_IO_read_ptr += increment;
#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD,
DragonFly, MacOS X, Cygwin */
fp_->_p += increment;
--- lib/fseterr.h.orig Tue Jun 19 23:18:35 2012
+++ lib/fseterr.h Tue Jun 19 22:24:44 2012
@@ -19,19 +19,27 @@
#include <stdio.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
/* Set the error indicator of the stream FP.
The "error indicator" is set when an I/O operation on the stream fails, and
is cleared (together with the "end-of-file" indicator) by clearerr (FP). */
-extern void fseterr (FILE *fp);
+#if HAVE___FSETERR /* musl libc */
+
+# include <stdio_ext.h>
+# define fseterr(fp) __fseterr (fp)
-#ifdef __cplusplus
+#else
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+extern void fseterr (FILE *fp);
+
+# ifdef __cplusplus
}
+# endif
+
#endif
#endif /* _FSETERR_H */
--- lib/fwritable.h.orig Tue Jun 19 23:18:35 2012
+++ lib/fwritable.h Sun Jun 17 21:06:31 2012
@@ -22,7 +22,7 @@
STREAM must not be wide-character oriented.
The result doesn't change until the stream is closed or re-opened. */
-#if HAVE___FWRITABLE /* glibc >= 2.2, Solaris >= 7 */
+#if HAVE___FWRITABLE /* glibc >= 2.2, Solaris >= 7, musl libc */
# include <stdio_ext.h>
# define fwritable(stream) (__fwritable (stream) != 0)
--- lib/fwriting.h.orig Tue Jun 19 23:18:35 2012
+++ lib/fwriting.h Tue Jun 19 22:22:41 2012
@@ -33,7 +33,7 @@
STREAM must not be wide-character oriented. */
-#if HAVE___FWRITING /* glibc >= 2.2, Solaris >= 7 */
+#if HAVE___FWRITING /* glibc >= 2.2, Solaris >= 7, musl libc */
# include <stdio_ext.h>
# define fwriting(stream) (__fwriting (stream) != 0)
--- m4/fbufmode.m4.orig Tue Jun 19 23:18:35 2012
+++ m4/fbufmode.m4 Tue Jun 19 22:37:28 2012
@@ -1,4 +1,4 @@
-# fbufmode.m4 serial 1
+# fbufmode.m4 serial 2
dnl Copyright (C) 2007, 2009-2012 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -7,5 +7,5 @@
AC_DEFUN([gl_FUNC_FBUFMODE],
[
dnl Prerequisites of lib/fbufmode.c.
- AC_CHECK_FUNCS_ONCE([__flbf])
+ AC_CHECK_FUNCS_ONCE([__flbf __fbufsize])
])
Changing permissions from . to 100644
--- m4/freadahead.m4.orig Thu May 10 02:22:35 2012
+++ m4/freadahead.m4 Tue Jun 19 22:37:27 2012
@@ -0,0 +1,10 @@
+# freadahead.m4 serial 1
+dnl Copyright (C) 2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FREADAHEAD],
+[
+ AC_CHECK_FUNCS_ONCE([__freadahead])
+])
Changing permissions from . to 100644
--- m4/freadptr.m4.orig Thu May 10 02:22:35 2012
+++ m4/freadptr.m4 Tue Jun 19 22:37:27 2012
@@ -0,0 +1,10 @@
+# freadptr.m4 serial 1
+dnl Copyright (C) 2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FREADPTR],
+[
+ AC_CHECK_FUNCS_ONCE([__freadptr])
+])
Changing permissions from . to 100644
--- m4/freadseek.m4.orig Thu May 10 02:22:35 2012
+++ m4/freadseek.m4 Tue Jun 19 22:37:27 2012
@@ -0,0 +1,11 @@
+# freadseek.m4 serial 1
+dnl Copyright (C) 2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FREADSEEK],
+[
+ AC_REQUIRE([AC_C_INLINE])
+ AC_CHECK_FUNCS_ONCE([__freadptrinc])
+])
Changing permissions from . to 100644
--- m4/fseterr.m4.orig Thu May 10 02:22:35 2012
+++ m4/fseterr.m4 Tue Jun 19 22:37:27 2012
@@ -0,0 +1,10 @@
+# fseterr.m4 serial 1
+dnl Copyright (C) 2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FSETERR],
+[
+ AC_CHECK_FUNCS_ONCE([__fseterr])
+])
--- modules/freadahead.orig Tue Jun 19 23:18:35 2012
+++ modules/freadahead Tue Jun 19 22:38:29 2012
@@ -6,13 +6,17 @@
lib/freadahead.h
lib/freadahead.c
lib/stdio-impl.h
+m4/freadahead.m4
Depends-on:
configure.ac:
+gl_FUNC_FREADAHEAD
+if test $ac_cv_func___freadahead = no; then
+ AC_LIBOBJ([freadahead])
+fi
Makefile.am:
-lib_SOURCES += freadahead.c
Include:
"freadahead.h"
--- modules/freadptr.orig Tue Jun 19 23:18:35 2012
+++ modules/freadptr Tue Jun 19 22:38:29 2012
@@ -5,13 +5,17 @@
lib/freadptr.h
lib/freadptr.c
lib/stdio-impl.h
+m4/freadptr.m4
Depends-on:
configure.ac:
+gl_FUNC_FREADPTR
+if test $ac_cv_func___freadptr = no; then
+ AC_LIBOBJ([freadptr])
+fi
Makefile.am:
-lib_SOURCES += freadptr.c
Include:
"freadptr.h"
--- modules/freadseek.orig Tue Jun 19 23:18:35 2012
+++ modules/freadseek Tue Jun 19 22:38:29 2012
@@ -5,6 +5,7 @@
lib/freadseek.h
lib/freadseek.c
lib/stdio-impl.h
+m4/freadseek.m4
Depends-on:
freadahead
@@ -13,7 +14,7 @@
lseek
configure.ac:
-AC_REQUIRE([AC_C_INLINE])
+gl_FUNC_FREADSEEK
Makefile.am:
lib_SOURCES += freadseek.c
--- modules/fseterr.orig Tue Jun 19 23:18:35 2012
+++ modules/fseterr Tue Jun 19 22:38:30 2012
@@ -5,13 +5,17 @@
lib/fseterr.h
lib/fseterr.c
lib/stdio-impl.h
+m4/fseterr.m4
Depends-on:
configure.ac:
+gl_FUNC_FSETERR
+if test $ac_cv_func___fseterr = no; then
+ AC_LIBOBJ([fseterr])
+fi
Makefile.am:
-lib_SOURCES += fseterr.c
Include:
"fseterr.h"
- Re: stdioext on musl, (continued)
- Re: stdioext on musl, Bruno Haible, 2012/06/17
- Re: stdioext on musl, Rich Felker, 2012/06/17
- Re: stdioext on musl, Bruno Haible, 2012/06/17
- Re: stdioext on musl, Rich Felker, 2012/06/17
- Re: stdioext on musl [was: gnulib portability issues], John Spencer, 2012/06/18
- Re: stdioext on musl [was: gnulib portability issues], Paul Eggert, 2012/06/18
Re: stdioext on musl, Bruno Haible, 2012/06/19