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 <br...@clisp.org> 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 <dal...@aerifal.cx>. --- 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"