Jim Meyering [Fri, 29 Apr 2011 07:53:25 +0000 (09:53 +0200)]
test-getcwd.c: avoid new set-but-not-used warning
* tests/test-getcwd.c (test_abort_bug): Exit nonzero for any problem,
not just the glibc/abort one that getcwd-abort-bug.m4 detects.
This also adds an additional test for an unlikely chdir("..") failure.
* m4/getcwd-abort-bug.m4: Update this now-duplicated code to match,
and adjust the code that sets gl_cv_func_getcwd_abort_bug accordingly.
Eric Blake [Thu, 28 Apr 2011 22:46:16 +0000 (16:46 -0600)]
getaddrinfo: fix gai_strerror signature
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.
Eric Blake [Thu, 28 Apr 2011 21:24:46 +0000 (15:24 -0600)]
getsockopt: avoid compiler warning
getsockopt.c: In function 'rpl_getsockopt':
getsockopt.c:51:7: warning: passing argument 4 of 'getsockopt' from
incompatible pointer type
c:\dev\msys_setup\mingw\bin\../lib/gcc/mingw32/4.5.0/../../../../include/winsock2.h:543:32:
note: expected 'char *' but argument is of type 'int *'
A simple cast works around the mingw signature lameness. If only
they had picked void* instead of char*, like POSIX says...
* lib/getsockopt.c (rpl_getsockopt): Add a cast for mingw.
Reported by Matthias Bolte.
Eric Blake [Wed, 27 Apr 2011 22:38:05 +0000 (16:38 -0600)]
tests: drop unused link dependency
Ever since commit 2392b18099, openat and fdopendir no longer drag in
xalloc-die through indirect dependencies, so these tests no longer
need $(LIBINTL).
Eric Blake [Wed, 27 Apr 2011 21:54:30 +0000 (15:54 -0600)]
xalloc-oversized: new module
Due to inline functions, mere inclusion of xalloc.h can result
in a link dependency on xalloc_die() on some platforms. However,
there are several modules that want to use just xalloc_oversized
in order to short-circuit the potential to call xalloc_die.
Splitting the macro into a new header and module makes this easy.
* modules/xalloc-oversized: New module.
* modules/xalloc (Depends-on): Add it.
* lib/xalloc.h (xalloc_oversized): Move...
* lib/xalloc-oversized.h: ...into new file.
Eric Blake [Tue, 26 Apr 2011 21:58:03 +0000 (15:58 -0600)]
fchdir: avoid extra chdir and fix test
On Linux, with a forced ac_cv_func_fchdir=no, the test failed
because dup2 was not replaced, all because the shell variable
ac_cv_func_dup2 had not been set yet.
Meanwhile, computing the canonical pathname of a directory on
mingw was rather expensive -- multiple chdir()! -- but nothing
cared whether the name was canonical, just that it was absolute.
* modules/fchdir (Depends-on): Add dosname, filenamecat-lgpl,
getcwd-lgpl.
* lib/fchdir.c (get_name): Any absolute name will do; it does not
have to be canonical.
* m4/dup2.m4 (gl_REPLACE_DUP2): Ensure dup2 is replaced.
Eric Blake [Tue, 26 Apr 2011 21:07:07 +0000 (15:07 -0600)]
save-cwd: reduce default dependency
save-cwd generally needs only a working fchdir or a working
getcwd(NULL,0). If you are not worried about directories whose
absolute name is longer than PATH_MAX, then reducing the default
dependencies reduces the bulk for this module.
However, there are cases where neither function works on Linux
(an unreadable but searchable directory can be opened by O_SEARCH,
except that Linux doesn't implement that yet; and Linux getcwd()
has issues with long absolute names which glibc does not work
around but which the full-blown getcwd module does). So someone
desiring a truly robust solution needs to import the 'getcwd'
module at the same time as 'save-cwd'.
* modules/save-cwd (Depends-on): Use getcwd-lgpl.
* lib/save-cwd.c: Update comments.
* NEWS: Document the semantic change.
Eric Blake [Tue, 26 Apr 2011 20:51:24 +0000 (14:51 -0600)]
getcwd: enhance tests
The existing getcwd was weak, and only tested things guaranteed
by the new getcwd-lgpl. Move those tests into a new file and
strengthen them slightly (such as guaranteeing the ERANGE error
for a non-zero but too-small size). Then copy the m4 tests
for PATH_MAX failures into the GPL getcwd tests, to prove that
our replacement really is fixing the things that cause us to
reject the system getcwd as non-robust.
* tests/test-getcwd-lgpl.c: New file, taken from...
* tests/test-getcwd.c: ...old contents. Rewrite this file to
repeat long path stress tests from m4 probe.
* modules/getcwd-lgpl-tests: New module.
* modules/getcwd-tests (Depends-on): Depend on lgpl tests.
* m4/getcwd-abort-bug.m4: Update comment.
* m4/getcwd-path-max.m4: Likewise.
Eric Blake [Tue, 26 Apr 2011 20:40:58 +0000 (14:40 -0600)]
getcwd-lgpl: new module
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.
Reuben Thomas [Wed, 27 Apr 2011 13:51:22 +0000 (14:51 +0100)]
mkstemp: replace if system version uses wrong permissions
* 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.
For backwards compatibility, the 4.4BSD join used by NetBSD supports a
"-a" option as if it was "-a 1 -a 2". Unfortunately, this was done in
such a way that "-a 1" and "-a 2" need to be passed as "-a1" or "-a2".
Paul Eggert [Tue, 26 Apr 2011 02:33:14 +0000 (19:33 -0700)]
inttypes-incomplete: new module
* m4/inttypes.m4 (gl_INTTYPES_INCOMPLETE): New macro, containing
all but the PRI* and SCN* parts of gl_INTTYPES_H.
(gl_INTTYPES_PRI_SCN): New macro, containing the PRI* and SCN* parts
of gl_INTTYPES_H.
(gl_INTTYPES_H): Rewrite in terms of these new macros.
(gl_INTTYPES_H_DEFAULTS): Provide defaults for the PRI* and SCN*
parts, in case gl_INTTYPE_PRI_SCN is not invoked.
* modules/imaxabs, modules/imaxdiv, modules/strtoimax (Depends-on):
* modules/strtoumax, modules/xstrtol (Depends-on):
Depend on inttypes-incomplete, not inttypes.
* modules/inttypes-incomplete: New module, containing the contents
of the old modules/inttypes module, except that the Files: section
omits m4/inttypes-pri.m4, and the configure.ac section invokes
gl_INTTYPES_INCOMPLETE rather than gl_INTTYPES_H.
* modules/inttypes (Files): Remove lib/inttypes.in.h, m4/inttypes.m4.
(Depends-on): Depend only on inttypes-incomplete.
(Makefile.am): Remove everything; this is now in inttypes-incomplete.
Paul Eggert [Tue, 26 Apr 2011 00:33:42 +0000 (17:33 -0700)]
strtoimax, strtoumax: simplify, port to HP-UX 11.00 64-bit
This supports apps that need pointers to strtoimax and strtoumax,
and ports to HP-UX 11.00 64.bit, which has macros that expand to
nonexistent functions. See
<http://lists.gnu.org/archive/html/bug-gnulib/2011-04/msg00241.html>
et seq.
* lib/inttypes.in.h (strtoimax, strtoumax): #undef before declaring.
* m4/strtoimax.m4 (gl_FUNC_STRTOIMAX): Don't check whether it's
a macro.
* m4/strtoumax.m4 (gl_FUNC_STRTOUMAX): Likewise.
Bruno Haible [Mon, 25 Apr 2011 18:53:41 +0000 (20:53 +0200)]
strtod: Remove check for strtod, unless supporting old platforms.
* 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.
Paul Eggert [Mon, 25 Apr 2011 06:29:28 +0000 (23:29 -0700)]
strtoul: remove dependency on strtol
This is so that 'configure' need not check for strtol merely because
the application needs strtoul.
* modules/strtoul (Files): Add lib/strtol.c.
(Depends-on): Remove strtol.
Paul Eggert [Mon, 25 Apr 2011 06:27:44 +0000 (23:27 -0700)]
strtoll: remove dependency on strtol
This is so that 'configure' need not check for strtol merely because
the application needs strtoll.
* modules/strtoll (Files): Add lib/strtol.c.
(Depends-on): Remove strtol.
Eric Blake [Thu, 21 Apr 2011 17:48:22 +0000 (11:48 -0600)]
passfd: speed up configure and drop unused code
Ultimately, it would be nice to provide a sendmsg and recvmsg module,
and have those provide a replacement struct msghdr and silently
convert msg_accrights into the replacement struct's msg_control, when
targeting older BSD. But until that point in time, this is a nice
cleanup.
SCM_RIGHTS really only works on Unix sockets; however, there is
nothing in passfd.c that needs to be hard-coded to this (rather,
the hard-coding of the address family is done externally when
the socket or socketpair is created).
* m4/afunix.m4 (gl_SOCKET_AFUNIX): Rename...
* m4/passfd.m4 (gl_PASSFD): ...to something more fitting of
its use. Drop test for setting unused HAVE_UNIXSOCKET_SCM_RIGHTS.
Instead of probing at configure for unix_scm_rights_bsd44_way,
instead probe for CMSG_FIRSTHDR at compile time. Simplify BSD 4.3
check to a struct member probe.
* lib/passfd.c (includes): Nothing here requires <sys/un.h>.
(sendfd, recvfd): Update preprocessor checks.
* modules/passfd (Files): Reflect rename, and drop unused file.
(Depends-on): Drop unused dependency.
Eric Blake [Thu, 21 Apr 2011 13:16:20 +0000 (07:16 -0600)]
passfd: allow compilation on mingw
The passfd module now skips on mingw, rather than failing to compile.
It may be nice to add a sendmsg and recvmsg module in the future,
but for now passfd is the only client that cares.
* modules/sys_socket (Depends-on): Add sys_uio.
* lib/sys_socket.in.h [!@HAVE_SYS_SOCKET_H@]: Use it for struct
iovec and a minimal struct msghdr.
* tests/test-sys_socket.c (main): Enhance test.
* m4/afunix.m4 (gl_SOCKET_AFUNIX): Detect recvmsg/sendmsg.
* lib/passfd.c (include): Drop <sys/uio.h>; <sys/sockets.h> is
guaranteed to provide what we need.
(sendmsg, recvmsg): Declare fallbacks if we lack sendmsg.
* modules/passfd-tests (Depends-on): Add sys_wait.
* tests/test-passfd.c (main): Skip test on mingw, for now.
* doc/posix-headers/sys_socket.texi (sys/socket.h): Document the
partial 'struct msghdr' implementation.
Jim Meyering [Wed, 20 Apr 2011 13:44:54 +0000 (15:44 +0200)]
useless-if-before-free: avoid false-positive
* build-aux/useless-if-before-free: Adjust regexp for the non-brace
disjunct so that it too requires a terminating ";". Without that,
this script would identify as useless one statement from gcc that
was not:
if (aligned_ptr)
free (((void **) aligned_ptr) [-1]);
Bruno Haible [Tue, 19 Apr 2011 08:38:30 +0000 (10:38 +0200)]
Move the support of O_NONBLOCK in open() to the 'open' module.
* 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.
Bruno Haible [Sun, 17 Apr 2011 17:50:10 +0000 (19:50 +0200)]
nonblocking: Add tests for sockets.
* tests/test-nonblocking-socket.sh: New file.
* tests/test-nonblocking-socket-main.c: New file.
* tests/test-nonblocking-socket-child.c: New file.
* tests/test-nonblocking-socket.h: New file.
* tests/socket-server.h: New file.
* tests/socket-client.h: New file.
* modules/nonblocking-socket-tests: New file.
* modules/nonblocking-tests (Depends-on): Add nonblocking-socket-tests.
Bruno Haible [Sun, 17 Apr 2011 17:27:28 +0000 (19:27 +0200)]
nonblocking: Add tests for pipes.
* tests/test-nonblocking-pipe.sh: New file.
* tests/test-nonblocking-pipe-main.c: New file.
* tests/test-nonblocking-pipe-child.c: New file.
* tests/test-nonblocking-pipe.h: New file.
* tests/test-nonblocking-writer.h: New file.
* tests/test-nonblocking-reader.h: New file.
* tests/test-nonblocking-misc.h: New file.
* modules/nonblocking-pipe-tests: New file.
* modules/nonblocking-tests (Depends-on): Add nonblocking-pipe-tests.
Bruno Haible [Sat, 16 Apr 2011 10:10:16 +0000 (12:10 +0200)]
strchrnul: Tweak last commit.
* doc/glibc-functions/strchrnul.texi: Add more details about Cygwin
bug.
* lib/string.in.h (strchrnul): Use same arguments in _GL_FUNCDECL_RPL
as in _GL_FUNCDECL_SYS.
* m4/strchrnul.m4 (gl_FUNC_STRCHRNUL): Invoke gl_PREREQ_STRCHRNUL after
AC_LIBOBJ. When cross-compiling, say "guessing yes" not "yes".
Eric Blake [Fri, 15 Apr 2011 19:53:50 +0000 (13:53 -0600)]
strchrnul: work around cygwin bug
A misplaced * means that cygwin 1.7.9 dereferences NULL rather
than returning the location of the trailing NUL byte.
* doc/glibc-functions/strchrnul.texi (strchrnul): Document bug.
* m4/strchrnul.m4 (gl_FUNC_STRCHRNUL): Detect it.
* m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): New witness.
* modules/string (Makefile.am): Substitute it.
* lib/string.in.h (strchrnul): Use it.
Bruno Haible [Thu, 14 Apr 2011 21:42:01 +0000 (23:42 +0200)]
Support non-blocking pipe I/O in write() on native Windows.
* 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.
Jim Meyering [Sun, 10 Apr 2011 08:26:46 +0000 (10:26 +0200)]
maint.mk: prohibit doubled words
Detect them also when they're separated by a newline.
There are 3 ways to customize it:
- disable the test on a per file basis, as usual with rules using
$(VC_LIST_EXCEPT)
- replace the default doubled-word-selecting regexp (affects all files)
- ignore a particular file-vs-doubled-word match
I nearly used that last one to ignore the "is is" match in
coreutils' NEWS file, since the text was "ls -is is ..."
To do that, I would have added this line to cfg.mk:
ignore_doubled_word_match_RE_ = ^NEWS:[0-9]+:is[ ]is$
but it would have ignored any "is is" match in NEWS.
Low probability, but still...
Instead, I changed the text, slightly:
- ls -is is now consistent with ls -lis in ignoring values returned
+ "ls -is" is now consistent with ls -lis in ignoring values returned
* top/maint.mk (prohibit_double_word_RE_): Provide default.
(prohibit_doubled_word_): Define.
(sc_prohibit_doubled_word): New rule.
(sc_prohibit_the_the): Remove. Subsumed by the above.
Jim Meyering [Sat, 9 Apr 2011 21:05:22 +0000 (23:05 +0200)]
maint: change "can not" to "cannot"
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.
Bruno Haible [Sat, 9 Apr 2011 00:12:11 +0000 (02:12 +0200)]
verify: Fix syntax error with GCC 4.6 in C++ mode.
* lib/verify.h (HAVE__STATIC_ASSERT): Don't define in C++ mode.
(HAVE_STATIC_ASSERT): New macro.
(verify_true, verify): Use 'static_assert' if it is supported and
'_Static_assert' is not supported.