This fixes the fclose failures detected in the previous patch,
but only when the GPL fflush module is also in use. That is
because the need for behavior of resetting seekable input streams
is much less common, and the fix more complex. The LGPLv2+ test
for fclose() in isolation is relaxed to pass if fflush is not
being replaced to cater to input streams.
* modules/fflush (Depends-on): Add fclose.
* m4/fflush.m4 (gl_FUNC_FFLUSH): Also replace fclose.
* lib/fclose.c (rpl_fclose): Don't cause spurious failures on
memstreams with no backing fd.
* doc/posix-functions/fclose.texi (fclose): Document the use of
fflush module to fix the bug.
* tests/test-fclose.c (main): Relax test when fclose is used in
isolation.
Signed-off-by: Eric Blake <eblake@redhat.com>
Several platforms declare gai_strerror to return char* rather than
const char*. Worse, on mingw, if UNICODE is defined, it is defined
to return WCHAR*, which means the result is in unicode but an
application expecting bytes for characters will only see a one-byte
answer.
* m4/getaddrinfo.m4 (gl_GETADDRINFO): Detect broken signatures,
and work around mingw with UNICODE defined.
(gl_PREREQ_GETADDRINFO): Drop redundant decl check.
* m4/netdb_h.m4 (gl_NETDB_H_DEFAULTS): Add witness.
* modules/netdb (Makefile.am): Substitute it.
* lib/netdb.in.h (gai_strerror): Declare replacement.
* lib/gai_strerror.c (rpl_gai_strerror): Fix signature.
* doc/posix-functions/gai_strerror.texi (gai_strerror): Document
the fix.
Signed-off-by: Eric Blake <eblake@redhat.com>
On mingw, getcwd(NULL,1) succeeds, even though glibc documents that
with a non-zero size, the allocation will not exceed that many bytes.
On mingw, getcwd has the wrong signature. However, we don't have
to check for this if anything else triggers the replacement.
Also, fix a type bug that crept into the original getcwd-lgpl commit.
* m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Detect one mingw bug.
* doc/posix-functions/getcwd.texi (getcwd): Document the problems.
* lib/getcwd-lgpl.c (rpl_getcwd): Fix return type.
Signed-off-by: Eric Blake <eblake@redhat.com>
For programs that aren't worried about being invoked from an
current working directory longer than PATH_MAX (perhaps because
the program always does chdir to a sane location first), the
getcwd module is overkill, given that all modern portability
targets have a getcwd that works on short names.
* modules/getcwd-lgpl: New module.
* lib/getcwd-lgpl.c: New file.
* doc/posix-functions/getcwd.texi (getcwd): Document it.
* MODULES.html.sh (lacking POSIX:2008): Likewise.
* modules/getcwd (configure.ac): Set C witness.
* m4/getcwd.m4 (gl_FUNC_GETCWD_LGPL): New macro.
Signed-off-by: Eric Blake <eblake@redhat.com>
* m4/mkstemp.m4 (gl_FUNC_MKSTEMP): Add test for non-owner
read/write mode bits set in file created by mkstemp.
* doc/posix-functions/mkstemp.texi (mkstemp): Document the fix.
Signed-off-by: Eric Blake <eblake@redhat.com>
* modules/strtod-obsolete: New file.
* m4/strtod-obsolete.m4: New file.
* m4/strtod.m4 (gl_FUNC_STRTOD): Don't check whether strtod is declared
if gl_FUNC_STRTOD_OBSOLETE is not also defined.
* modules/strtod (Depends-on): Add strtod-obsolete.
* doc/posix-functions/strtod.texi: Mention module strtod-obsolete.
* modules/nonblocking (Depends-on): Remove 'open'.
* m4/nonblocking.m4 (gl_NONBLOCKING_IO_BODY): Set
gl_cv_have_open_O_NONBLOCK.
* m4/open.m4 (gl_FUNC_OPEN): Replace open() also when required for
O_NONBLOCK support.
* doc/posix-functions/open.texi: Document support for O_NONBLOCK.
* lib/write.c (rpl_write): Split a write request that failed merely
because the byte count was larger than the pipe buffer's size.
* doc/posix-functions/write.texi: Mention the problem with large byte
counts.
But do not change the occurrences in maintain.texi or in
build-aux/po/Makefile.in.in, which I presume comes from gettext.
* doc/gnulib-tool.texi: s/can not/cannot/
* doc/posix-functions/accept.texi (accept): Likewise.
* doc/posix-functions/socket.texi (socket): Likewise.
* lib/mbrtowc.c: Likewise.
* lib/stdlib.in.h (mbtowc): New declaration.
* lib/mbtowc.c: New file.
* lib/mbtowc-impl.h: New file, from libutf8 with modifications
* m4/mbtowc.m4: New file.
* m4/stdlib_h.m4 (gl_STDLIB_H_DEFAULTS): Initialize GNULIB_MBTOWC,
REPLACE_MBTOWC.
* modules/stdlib (Makefile.am): Substitute GNULIB_MBTOWC,
REPLACE_MBTOWC.
* modules/mbtowc: New file.
* tests/test-stdlib-c++.cc: Test signature of mbtowc.
* doc/posix-functions/mbtowc.texi: Mention the new module.
* modules/btowc (Depends-on): Add mbtowc.
* m4/mbrtowc.m4 (gl_MBRTOWC_RETVAL): Detect native Windows bug. Use the
guess when no suitable locale for testing was found.
* doc/posix-functions/mbrtowc.texi: Mention the native Windows bug.
* m4/mbsinit.m4 (gl_FUNC_MBSINIT): Replace mbsinit also on mingw.
* lib/mbsinit.c (mbsinit): Provide an alternate definition for native
Windows.
* doc/posix-functions/mbsinit.texi: Mention the mingw bug.
* m4/wcsrtombs.m4 (gl_WCSRTOMBS_NULL): Test against mingw bug.
* lib/wcsrtombs.c (rpl_wcsrtombs): When dest is NULL, pass SIZE_MAX
instead of len.
* doc/posix-functions/wcsrtombs.texi: Document mingw bug.
* lib/setlocale.c (rpl_setlocale): On native Windows, when setlocale
succeeds but sets LC_CTYPE to "C", report a failure.
* tests/test-setlocale2.sh: New file.
* tests/test-setlocale2.c: New file.
* modules/setlocale-tests (Files): Add the new files.
(Makefile.am): Enable test-setlocale2.sh test.
* doc/posix-functions/setlocale.texi: Mention workaround.
* lib/locale.in.h (setlocale): New declaration.
* lib/setlocale.c: New file, based on
gettext/gettext-runtime/intl/setlocale.c.
* m4/setlocale.m4: New file.
* m4/locale_h.m4 (gl_LOCALE_H): Test whether setlocale is declared.
(gl_LOCALE_H_DEFAULTS): Initialize GNULIB_SETLOCALE, REPLACE_SETLOCALE.
* modules/locale (Makefile.am): Substitute GNULIB_SETLOCALE,
REPLACE_SETLOCALE.
* modules/setlocale: New file.
* tests/test-locale-c++.cc: Test the declaration of setlocale.
* doc/posix-functions/setlocale.texi: Mention the new module.
* modules/towctrans: New file.
* lib/wctype.in.h (towctrans): New declaration.
* lib/towctrans.c: New file.
* lib/towctrans-impl.h: New file.
* m4/towctrans.m4: New file.
* m4/wctype_h.m4 (gl_WCTYPE_H): Test whether towctrans is declared.
(gl_WCTYPE_H_DEFAULTS): Initialize GNULIB_TOWCTRANS.
* modules/wctype-h (Makefile.am): Substitute GNULIB_TOWCTRANS.
* tests/test-wctype-h-c++.cc: Test the declaration of towctrans.
* doc/posix-functions/towctrans.texi: Mention the new module.
* modules/wctrans: New file.
* lib/wctype.in.h (wctrans): New declaration.
* lib/wctrans.c: New file.
* lib/wctrans-impl.h: New file.
* m4/wctrans.m4: New file.
* m4/wctype_h.m4 (gl_WCTYPE_H): Test whether wctrans is declared.
(gl_WCTYPE_H_DEFAULTS): Initialize GNULIB_WCTRANS.
* modules/wctype-h (Makefile.am): Substitute GNULIB_WCTRANS.
* tests/test-wctype-h-c++.cc: Test the declaration of wctrans.
* doc/posix-functions/wctrans.texi: Mention the new module.
* modules/iswctype: New file.
* lib/wctype.in.h (iswctype): New declaration.
* lib/iswctype.c: New file.
* lib/iswctype-impl.h: New file.
* m4/iswctype.m4: New file.
* m4/wctype_h.m4 (gl_WCTYPE_H): Test whether iswctype is declared.
(gl_WCTYPE_H_DEFAULTS): Initialize GNULIB_ISWCTYPE.
* modules/wctype-h (Makefile.am): Substitute GNULIB_ISWCTYPE.
* tests/test-wctype-h-c++.cc: Test the declaration of iswctype.
* doc/posix-functions/iswctype.texi: Mention the new module and the
HP-UX 11.00 problem.
* modules/wctype: Change to represent the wctype() substitute.
* lib/wctype.in.h (wctype): New declaration.
* lib/wctype.c: New file.
* lib/wctype-impl.h: New file.
* m4/wctype.m4: New file.
* m4/wctype_h.m4 (gl_WCTYPE_H): Test whether wctype is declared.
(gl_WCTYPE_H_DEFAULTS): Initialize GNULIB_WCTYPE.
* modules/wctype-h (Makefile.am): Substitute GNULIB_WCTYPE.
* tests/test-wctype-h-c++.cc: Test the declaration of wctype.
* doc/posix-functions/wctype.texi: Mention the new module and the
HP-UX 11.00 problem.
* modules/wcswidth: New file.
* lib/wchar.in.h (wcswidth): New declaration.
* lib/wcswidth.c: New file.
* lib/wcswidth-impl.h: New file, from libutf8 with modifications.
* m4/wcswidth.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcswidth is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSWIDTH, HAVE_WCSWIDTH,
REPLACE_WCSWIDTH.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSWIDTH,
HAVE_WCSWIDTH, REPLACE_WCSWIDTH.
* tests/test-wchar-c++.cc: Test the declaration of wcswidth.
* doc/posix-functions/wcswidth.texi: Mention the new module.
* modules/wcstok: New file.
* lib/wchar.in.h (wcstok): New declaration.
* lib/wcstok.c: New file.
* lib/wcstok-impl.h: New file, from libutf8 with modifications.
* m4/wcstok.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcstok is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSTOK, HAVE_WCSTOK.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSTOK, HAVE_WCSTOK.
* tests/test-wchar-c++.cc: Test the declaration of wcstok.
* doc/posix-functions/wcstok.texi: Mention the new module.
* modules/wcsstr: New file.
* lib/wchar.in.h (wcsstr): New declaration.
* lib/wcsstr.c: New file.
* lib/wcsstr-impl.h: New file, from libutf8 with modifications.
* m4/wcsstr.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsstr is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSSTR, HAVE_WCSSTR.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSSTR, HAVE_WCSSTR.
* tests/test-wchar-c++.cc: Test the declaration of wcsstr.
* doc/posix-functions/wcsstr.texi: Mention the new module.
* modules/wcspbrk: New file.
* lib/wchar.in.h (wcspbrk): New declaration.
* lib/wcspbrk.c: New file.
* lib/wcspbrk-impl.h: New file, from libutf8 with modifications.
* m4/wcspbrk.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcspbrk is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSPBRK, HAVE_WCSPBRK.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSPBRK, HAVE_WCSPBRK.
* tests/test-wchar-c++.cc: Test the declaration of wcspbrk.
* doc/posix-functions/wcspbrk.texi: Mention the new module.
* modules/wcsspn: New file.
* lib/wchar.in.h (wcsspn): New declaration.
* lib/wcsspn.c: New file.
* lib/wcsspn-impl.h: New file, from libutf8 with modifications.
* m4/wcsspn.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsspn is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSSPN, HAVE_WCSSPN.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSSPN, HAVE_WCSSPN.
* tests/test-wchar-c++.cc: Test the declaration of wcsspn.
* doc/posix-functions/wcsspn.texi: Mention the new module.
* modules/wcscspn: New file.
* lib/wchar.in.h (wcscspn): New declaration.
* lib/wcscspn.c: New file.
* lib/wcscspn-impl.h: New file, from libutf8 with modifications.
* m4/wcscspn.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcscspn is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSCSPN, HAVE_WCSCSPN.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSCSPN, HAVE_WCSCSPN.
* tests/test-wchar-c++.cc: Test the declaration of wcscspn.
* doc/posix-functions/wcscspn.texi: Mention the new module.
* modules/wcsrchr: New file.
* lib/wchar.in.h (wcsrchr): New declaration.
* lib/wcsrchr.c: New file.
* lib/wcsrchr-impl.h: New file, from libutf8 with modifications.
* m4/wcsrchr.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsrchr is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSRCHR, HAVE_WCSRCHR.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSRCHR, HAVE_WCSRCHR.
* tests/test-wchar-c++.cc: Test the declaration of wcsrchr.
* doc/posix-functions/wcsrchr.texi: Mention the new module.
* modules/wcschr: New file.
* lib/wchar.in.h (wcschr): New declaration.
* lib/wcschr.c: New file.
* lib/wcschr-impl.h: New file, from libutf8 with modifications.
* m4/wcschr.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcschr is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSCHR, HAVE_WCSCHR.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSCHR, HAVE_WCSCHR.
* tests/test-wchar-c++.cc: Test the declaration of wcschr.
* doc/posix-functions/wcschr.texi: Mention the new module.
* modules/wcsdup: New file.
* lib/wchar.in.h (wcsdup): New declaration.
* lib/wcsdup.c: New file.
* lib/wcsdup-impl.h: New file, from libutf8 with modifications.
* m4/wcsdup.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsdup is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSDUP, HAVE_WCSDUP.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSDUP, HAVE_WCSDUP.
* tests/test-wchar-c++.cc: Test the declaration of wcsdup.
* doc/posix-functions/wcsdup.texi: Mention the new module.
* modules/wcsxfrm: New file.
* lib/wchar.in.h (wcsxfrm): New declaration.
* lib/wcsxfrm.c: New file.
* lib/wcsxfrm-impl.h: New file.
* m4/wcsxfrm.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsxfrm is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSXFRM, HAVE_WCSXFRM.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSXFRM, HAVE_WCSXFRM.
* tests/test-wchar-c++.cc: Test the declaration of wcsxfrm.
* doc/posix-functions/wcsxfrm.texi: Mention the new module.
* modules/wcscoll: New file.
* lib/wchar.in.h (wcscoll): New declaration.
* lib/wcscoll.c: New file.
* lib/wcscoll-impl.h: New file.
* m4/wcscoll.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcscoll is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSCOLL, HAVE_WCSCOLL.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSCOLL, HAVE_WCSCOLL.
* tests/test-wchar-c++.cc: Test the declaration of wcscoll.
* doc/posix-functions/wcscoll.texi: Mention the new module.