Bruno Haible [Fri, 2 Sep 2011 12:13:59 +0000 (14:13 +0200)]
tests: init.sh: work also with any non-GNU diff that supports -u
* tests/init.sh: Relax check for diff -u support.
Rather than checking for GNU diff via --version, simply check
for support for -u itself. Useful at least on OpenBSD 4.9,
AIX 7.1, IRIX 6.5 and Solaris 10.
Bruno Haible [Thu, 1 Sep 2011 23:36:31 +0000 (01:36 +0200)]
strtoumax: Avoid link error on OSF/1 with DTK cc.
* m4/strtoumax.m4 (gl_FUNC_STRTOUMAX): Always test whether strtoumax is
defined as a function.
* modules/strtoumax (Depends-on, configure.ac): Test only whether
strtoumax is defined, not whether it is declared.
Bruno Haible [Thu, 1 Sep 2011 23:35:53 +0000 (01:35 +0200)]
strtoimax: Avoid link error on OSF/1 with DTK cc.
* m4/strtoimax.m4 (gl_FUNC_STRTOIMAX): Always test whether strtoimax is
defined as a function.
* modules/strtoimax (Depends-on, configure.ac): Test only whether
strtoimax is defined, not whether it is declared.
Bruno Haible [Thu, 1 Sep 2011 23:33:11 +0000 (01:33 +0200)]
imaxdiv: Avoid link error on OSF/1 with DTK cc.
* m4/imaxdiv.m4 (gl_FUNC_IMAXDIV): Also test whether imaxdiv is defined
as a function.
* modules/imaxdiv (configure.ac): Test whether imaxdiv is defined, not
whether it is declared.
Paul Eggert [Thu, 1 Sep 2011 19:53:10 +0000 (12:53 -0700)]
openat: work around AIX 7.1 fstatat issue
This should fix the problem that was not properly fixed
in the previous change, dated 2011-08-30.
* lib/fstatat.c: Include <sys/stat.h> twice, the first with
__need_system_stat_h defined.
(orig_fstatat) [HAVE_FSTATAT]: New function.
(rpl_fstatat): Go back to the old way of doing things,
except call orig_fstatat instead of fstatat.
* m4/openat.m4 (gl_FUNC_FSTATAT): Remove unnecessary check for openat.
Remove unnecessary check whether fstatat fills in st_size etc.
Jim Meyering [Wed, 31 Aug 2011 15:15:35 +0000 (17:15 +0200)]
maint: indent with spaces, not TABs
I need to get in the habit of running gnulib's "make check".
Both of these would have been caught.
* m4/largefile.m4: Indent with spaces, not TABs.
* lib/parse-datetime.y (iso_8601_time): Likewise.
Spotted by Pádraig Brady.
Jim Meyering [Wed, 31 Aug 2011 14:43:29 +0000 (16:43 +0200)]
test-parse-datetime.c: accommodate a relatively strict gcc warning
* tests/test-parse-datetime.c (gmt_offset): Declare function "static",
to avoid a warning from gcc's -Werror=missing-declarations.
Insert a few spaces-before-funcall-parenthesis.
J.T. Conklin [Wed, 17 Aug 2011 23:40:49 +0000 (16:40 -0700)]
parse-datetime: accept ISO 8601 date and time rep with "T" separator
The parser now accepts ISO 8601 date-time strings with "T" as the
separator. It has long parsed dates like "2004-02-29 16:21:42"
with a space between the date and time strings. Now it also parses
"2004-02-29T16:21:42" and fractional-second and time-zone-annotated
variants like "2004-02-29T16:21:42.333-07:00"
* lib/parse-datetime.y: Parse ISO 8601 extended date and time
of day representation using the 'T' separator character.
* doc/parse-datetime.texi (General date syntax): replace use of
deprecated --iso-8601 option with --rfc-3339 in example of date
command output formats that can be parsed.
* tests/test-parse-datetime.c (tm_diff): New function, taken from
lib/parse-datetime.y.
(gmt_offset): New function.
(main): Add additional test cases to validate ISO8601 extended
date and time of day format parsing.
Paul Eggert [Tue, 30 Aug 2011 23:38:59 +0000 (16:38 -0700)]
openat: work around AIX 7.1 fstatat bug
Problem reported by Kevin Brott for GNU tar, in the thread containing
<http://lists.gnu.org/archive/html/bug-tar/2011-08/msg00015.html>.
* lib/fstatat.c (rpl_fstatat): Do not invoke underlying fstatat if
FSTATAT_ST_SIZE_ETC_BROKEN.
(fstatat) [FSTATAT_ST_SIZE_ETC_BROKEN && HAVE_FSTATAT]: #define to
rpl_fstatat.
* m4/openat.m4 (gl_FUNC_FSTATAT): New macro, with the fstatat-relevant
part of gl_FUNC_OPENAT. Also, check for the AIX 7.1 bug, and use
AC_CHECK_FUNCS_ONCE for fstatat.
(gl_FUNC_OPENAT): Use it. Use AC_CHECK_FUNCS_ONCE for
fchmodat, mkdirat, openat and unlinkat.
Bruno Haible [Tue, 23 Aug 2011 06:40:27 +0000 (08:40 +0200)]
tmpdir: Use a good default directory on native Windows.
* lib/tmpdir.c: Include <windows.h>, pathmax.h.
(P_tmpdir): Default to _P_tmpdir on native Windows.
(path_search): On native Windows, try the value returned by GetTempPath
before trying P_tmpdir.
* modules/tmpdir (Depends-on): Add pathmax.
Suggested by John Darrington <john@darrington.wattle.id.au>.
Jim Meyering [Wed, 17 Aug 2011 08:27:29 +0000 (10:27 +0200)]
fts: do not exhaust memory when processing million-entry directories
Before this change, processing (via rm -rf, find, du, etc.) an N-entry
directory would require about 256*N bytes of memory. Thus, it was
easy to construct a directory too large to be processed by any of
those tools. With this change, fts' maximum memory utilization is
now limited to around 30MB.
* lib/fts.c (FTS_MAX_READDIR_ENTRIES): Define.
(fts_read): When we've processed the final entry (i.e., when
->fts_link is NULL) and fts_dirp is non-NULL, call fts_build
using the parent entry to read any remaining entries. Dispatch
depending on what fts_build returns:
- NULL+stop, aka failure: stop
- NULL otherwise: move up in the dir hierarchy
- non-NULL: handle this new entry
(fts_build): Declare and use new local, continue_readdir.
Prepare to be called from fts_read, when the entries
from a partially-read directory have just been exhausted.
In that case, we'll skip the opendir and instead use the parent's
fts_dirp and derive dir_fd from that.
Finally, in the readdir loop, if we read max_entries entries,
exit the loop ensuring *not* to call closedir. This is required
so that fts_dirp can be reused on a subsequent call.
Prompted by Ben England's report of memory exhaustion in find
and rm -rf vs. NFS: https://bugzilla.redhat.com/719749.
Jim Meyering [Wed, 17 Aug 2011 07:20:41 +0000 (09:20 +0200)]
fts: add/use new struct member, fts_dirp
We are about to use this to manage any directory with
too many entries to read all of them into memory at once.
To do that, we'll need to save the DIR* pointer in each
affected FTSENT struct.
* lib/fts_.h: Include <dirent.h>.
(struct FTSENT) [fts_dirp]: New member.
* lib/fts.c (closedir_and_clear): Define.
Use it in place of closedir so that we are sure to
clear the new fts_dirp member when done with it.
(fts_alloc): Initialize the new member.
(fts_lfree): Free, if needed.
Jim Meyering [Tue, 16 Aug 2011 18:20:30 +0000 (20:20 +0200)]
maint: fts: give __opendir2 a new parameter and rename
* lib/fts.c (__opendir2): Give it a new parameter, Pdir_fd, rather
than surreptitiously using sole caller's "dir_fd".
(fts_opendir): Rename from __opendir2.
Paul Eggert [Thu, 18 Aug 2011 07:46:17 +0000 (00:46 -0700)]
regex: port to Stratus OpenVOS
* lib/regex_internal.h (internal_function) [!_LIBC]: Simply
define to empty, rather than attempting nonportable optimizations.
Problem reported by Paul Green in:
http://lists.gnu.org/archive/html/bug-diffutils/2011-08/msg00047.html
and fix suggested by Eric Blake in:
http://lists.gnu.org/archive/html/bug-gnulib/2011-08/msg00143.html
Eric Blake [Wed, 17 Aug 2011 23:51:47 +0000 (17:51 -0600)]
getcwd: fix test failures on mingw
The GPL getcwd replacement now kicks in for mingw thanks to the
signature check, but does not have to do anything. However,
because the code was not taking an early exit for ERANGE when
a buffer size was given, it instead tried to second-guess
mingw's cwd algorithm, which doesn't work. After fixing that,
the tests still failed, even though mingw getcwd doesn't have
any problems with long paths (since they can't be created in
the first place).
* lib/getcwd.c (__getcwd): Early exit for ERANGE.
* tests/test-getcwd.c (test_abort_bug, test_long_name): Don't fail
test if long directory cannot be created, and allow mingw errno.
Eric Blake [Wed, 17 Aug 2011 22:14:12 +0000 (16:14 -0600)]
getcwd-lgpl: fix m4 to match relaxed test for BSD
Commit c6dc8f1 changed test-getcwd-lgpl to allow BSD behavior
where getcwd(NULL,1) allocates the proper size, in addition to
the glibc behavior of allocating exactly one byte then failing
with ERANGE. But the m4 test was still rejecting the former
behavior.
However, merely fixing the test to avoid probing the behavior
would be a regression of commit 8585ce2, since it was the only
reason why rpl_getcwd was being compiled on mingw. Hence, we
have to add a signature check in its place to keep mingw happy.
* m4/getcwd.m4 (gl_FUNC_GETCWD_NULL): Relax probe.
(gl_FUNC_GETCWD_SIGNATURE): New macro.
(gl_FUNC_GETCWD_LGPL, gl_FUNC_GETCWD): Use it.
* doc/posix-functions/getcwd.texi (getcwd): Tweak mentions of
signature problem.
Eric Blake [Wed, 17 Aug 2011 20:13:35 +0000 (14:13 -0600)]
getcwd: fix compilation on mingw64
Mingw 64 added <direct.h> as a place that declared getcwd. It is
a non-standard header, but since we already include it in the
replacement for <sys/stat.h>, we must also include it in the
replacement for <unistd.h> to avoid compilation problems.
Ben Pfaff [Tue, 16 Aug 2011 05:33:25 +0000 (22:33 -0700)]
relocatable-prog: fix link error
* modules/relocatable-prog (configure.ac) [RELOCATABLE]: Also
invoke AC_LIBOBJ([relocatable]). This invocation was previously
in the gl_RELOCATABLE_LIBRARY macro. That invocation was moved
into modules/relocatable-lib without noticing that
modules/relocatable-prog also invokes gl_RELOCATABLE_LIBRARY and
also needs to build relocatable.c.
Paul Eggert [Fri, 12 Aug 2011 07:18:19 +0000 (00:18 -0700)]
getaddrinfo: fix sh typo in gai_strerrorA decl checking
* m4/getaddrinfo.m4 (gl_GETADDRINFO): Fix typo in the generated
shell code: it contained a 'break' that was not in a loop.
Apparently the macro assumed that AC_CHECK_DECLS is implemenented
via a shell-language loop; this may have been true in old Autoconf
versions, but it's not true in Autoconf 2.68. I found this bug
when testing coreutils git on Solaris 8, whose shell complains
about the syntax error.
Paul Eggert [Thu, 11 Aug 2011 17:46:26 +0000 (10:46 -0700)]
po/Makefile.in.in: fix make -q problem
* build-aux/po/Makefile.in.in (check-macro-version): Remove this
rule, since there's no file named 'check-macro-version' and its
use as a file breaks make -q.
(all): Don't depend on check-macro-version.
(CHECK_MACRO_VERSION): New macro.
(stamp-po): Use it.
Paul Eggert [Thu, 11 Aug 2011 18:20:28 +0000 (11:20 -0700)]
configmake: fix make -q problem
* modules/configmake (configmake.h): Update configmake.h's time stamp
even if the file does not change. Otherwise, 'make -q' fails.
Problem reported by Simon Josefsson in
<http://lists.gnu.org/archive/html/bug-gnulib/2011-08/msg00088.html>.
Paul Eggert [Wed, 10 Aug 2011 19:36:13 +0000 (12:36 -0700)]
base64: fix off-by-one buffer size bug
Problem and (trivial) fix reported by Gijs van Tulder in
<http://lists.gnu.org/archive/html/bug-gnulib/2011-08/msg00083.html>.
* lib/base64.c (base64_decode_alloc_ctx): Allocate one more byte.
* tests/test-base64.c (main): Catch the bug.
Eric Blake [Tue, 9 Aug 2011 21:18:31 +0000 (15:18 -0600)]
fseeko: fix bug on glibc
Commit 1074f45959f had a bug on glibc that caused the unit test to
fail, but instead of figuring why the failure was happening, we
instead added a partial hack to avoid the problem in the scenario
covered by the testsuite.
https://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00171.html
But that hack doesn't cover all scenarios, and papers over the
real issue: if you fopen()/ftell()/fseek(,0,SEEK_END)/ftell(),
then the stream should be positioned at the same place as the
underlying fd, even though no I/O occurred, and without requiring
an fflush() in the middle.
* lib/fseeko.c (fseeko): Set stream offset to match fd offset.
Reported by John W. Eaton.
Eric Blake [Mon, 8 Aug 2011 15:35:14 +0000 (09:35 -0600)]
largefile: fix typo that regressed large file support
With no configure.ac-early, and two configure.ac sections, gnulib-tool
only picked up the second (empty) section, and thus completely skipped
any AC_SYS_LARGEFILE call altogether.
Bruno Haible [Fri, 5 Aug 2011 01:01:01 +0000 (03:01 +0200)]
pathmax: Leave PATH_MAX undefined on the Hurd, and a constant otherwise.
* lib/pathmax.h (PATH_MAX): Leave it undefined on GNU/Hurd.
* lib/chdir-long.h: Include pathmax.h.
* lib/clean-temp.c (PATH_MAX): Remove code that is done by pathmax.h.
* lib/getcwd.c: Include pathmax.h instead of <limits.h>.
(PATH_MAX): Remove code that is done by pathmax.h.
* lib/canonicalize.c (PATH_MAX): Provide a fallback value.
* lib/tmpfile.c: Add a comment.
* m4/pathmax.m4 (gl_PATHMAX): Don't test for pathconf.
* modules/chdir-long (Depends-on): Add pathmax.
* modules/getcwd (Depends-on): Add pathmax.
* tests/test-getcwd.c (test_abort_bug): Avoid syntax error when PATH_MAX
is not defined.
* doc/posix-headers/limits.texi: Mention the pathmax module.
* NEWS: Mention the change.
Jim Meyering [Tue, 2 Aug 2011 12:54:34 +0000 (14:54 +0200)]
maint.mk: relax the default _gl_TS_function_match regexp
* top/maint.mk (_gl_TS_function_match): Don't require at least one
space between function name and "(" in an "extern" declaration.
That would fail to match a decl with no space there: extern void foo();
git-version-gen: document that EXTRA_DIST must include .version
* build-aux/git-version-gen: In the how-to-use comment, document
that EXTRA_DIST must include .version. Otherwise, "make distcheck"
will fail when run from an unpacked distribution tarball.
Bruno Haible [Sun, 31 Jul 2011 20:39:32 +0000 (22:39 +0200)]
wctype-h: Add support for Minix.
* m4/wctype_h.m4 (gl_WCTYPE_H): Test whether towlower is declared. Set
REPLACE_TOWLOWER.
* modules/wctype-h (Makefile.am): Substitute REPLACE_TOWLOWER.
* lib/wctype.in.h (towlower, towupper): Test REPLACE_TOWLOWER, not
REPLACE_ISWCNTRL.
Bruno Haible [Sun, 31 Jul 2011 17:00:23 +0000 (19:00 +0200)]
errno: Port to Minix.
* m4/errno_h.m4 (gl_HEADER_ERRNO_H): Test also whether ENETRESET and
ECONNABORTED are defined.
* lib/errno.in.h (ENETRESET, GNULIB_defined_ENETRESET, ECONNABORTED,
GNULIB_defined_ECONNABORTED): New macros.
* lib/strerror-override.h (strerror_override): Test also
GNULIB_defined_ENETRESET, GNULIB_defined_ECONNABORTED.
* lib/strerror-override.c (strerror_override): Handle also ENETRESET,
ECONNABORTED.
* doc/posix-headers/errno.texi: Mention the Minix problem.
Bruno Haible [Sun, 31 Jul 2011 15:05:59 +0000 (17:05 +0200)]
Work around declaration collisions on Minix.
* m4/mbsinit.m4 (gl_FUNC_MBSINIT): If mbsinit is declared but not
defined, set REPLACE_MBSINIT.
* m4/mbrtowc.m4 (gl_FUNC_MBRTOWC): If mbrtowc is declared but not
defined, set REPLACE_MBRTOWC.
* m4/mbrlen.m4 (gl_FUNC_MBRLEN): If mbrlen is declared but not defined,
set REPLACE_MBRLEN.
* m4/mbsrtowcs.m4 (gl_FUNC_MBSRTOWCS): If mbsrtowcs is declared but not
defined, set REPLACE_MBSRTOWCS.
* m4/wcrtomb.m4 (gl_FUNC_WCRTOMB): If wcrtomb is declared but not
defined, set REPLACE_WCRTOMB.
* m4/wcsrtombs.m4 (gl_FUNC_WCSRTOMBS): If wcsrtombs is declared but not
defined, set REPLACE_WCSRTOMBS.
Jim Meyering [Wed, 27 Jul 2011 18:27:48 +0000 (20:27 +0200)]
maint.mk: avoid sc_prohibit_always-defined_macros failure in coreutils
* top/maint.mk (gl_extract_significant_defines_): Now that
SA_RESETHAND and SA_RESTART are #defined (albeit conditionally) in
gnulib/lib/signal.in.h, and now that we recommend to
define-if-undefined those two symbols in application code,
we must filter them out of the "significant" list.
This avoids a "make syntax-check" failure in coreutils.
Eric Blake [Tue, 26 Jul 2011 19:58:26 +0000 (13:58 -0600)]
include-next, warnings: support older autoconf
Older autoconf did not know how to peer through quoting of the
m4 macro created by AS_VAR_PUSHDEF; while newer autoconf has
been patched to allow typical autoconf quoting rules to still
apply, compatibility with autoconf 2.59 requires the unquoted
use of the macro name for all uses prior to AS_VAR_POPDEF.
absolute-header.m4 and warn-on-use.m4 already got this right.
* m4/include_next.m4 (gl_NEXT_HEADERS_INTERNAL): Use
AS_VAR_PUSHDEF in a way that works with older autoconf.
* m4/warnings.m4 (gl_WARN_ADD): Likewise.
Reported by Daniel P. Berrange.
Bruno Haible [Mon, 25 Jul 2011 22:01:49 +0000 (00:01 +0200)]
fclose: Move AC_LIBOBJ invocation to module description.
* m4/fclose.m4 (gl_REPLACE_FCLOSE): Remove macro.
(gl_FUNC_FCLOSE): Instead of gl_REPLACE_FCLOSE, just set REPLACE_FCLOSE
to 1.
* modules/fclose (configure.ac): Invoke AC_LIBOBJ.
Bruno Haible [Mon, 25 Jul 2011 21:47:31 +0000 (23:47 +0200)]
close: Move AC_LIBOBJ invocation to module description.
* m4/close.m4 (gl_REPLACE_CLOSE): Remove macro.
(gl_FUNC_CLOSE): Instead of gl_REPLACE_CLOSE, just set REPLACE_CLOSE to
1.
* modules/close (configure.ac): Invoke AC_LIBOBJ.
Bruno Haible [Mon, 25 Jul 2011 21:38:11 +0000 (23:38 +0200)]
open: Move AC_LIBOBJ invocation to module description.
* m4/open.m4 (gl_REPLACE_OPEN): Remove macro.
(gl_FUNC_OPEN): Instead of gl_REPLACE_OPEN, just set REPLACE_OPEN to 1.
* modules/open (configure.ac): Invoke AC_LIBOBJ and gl_PREREQ_OPEN.