Eric Blake [Tue, 1 Feb 2011 03:14:37 +0000 (20:14 -0700)]
dup2: work around Haiku bug
dup2(n,n) must be a no-op, but on Haiku, it resets FD_CLOEXEC.
However, we must keep the Linux workaround for dup2(n,n)
returning (unsigned int)-EBADF.
* m4/dup2.m4 (gl_FUNC_DUP2): Test for bug.
* lib/dup2.c (rpl_dup2) [!WIN32]: Add workaround.
* doc/posix-functions/dup2.texi (dup2): Document the bug.
* tests/test-dup2.c (main): Enhance test.
Paul Eggert [Sun, 30 Jan 2011 17:36:23 +0000 (09:36 -0800)]
mktime: clarify long_int width checking
* lib/mktime.c (long_int_is_wide_enough): Move this assertion to
the top level, to make it clearer that the assumption about
long_int width is being checked. See
<http://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00554.html>.
* lib/intprops.h (TYPE_MINIMUM, TYPE_MAXIMUM): Do not shift a
negative number, which the C Standard says has undefined behavior.
In practice this is not a problem, but might as well do it by the book.
Reported by Rich Felker and Eric Blake; see
<http://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00493.html>.
* lib/strtol.c (TYPE_MINIMUM, TYPE_MAXIMUM): Likewise.
* m4/mktime.m4 (AC_FUNC_MKTIME): Likewise.
* m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Likewise.
* m4/parse-datetime.m4 (gl_PARSE_DATETIME): Likewise.
* m4/stdint.m4 (gl_STDINT_H): Likewise.
* lib/mktime.c (TYPE_MAXIMUM): Redo slightly to match the others.
* lib/mktime.c (isdst_differ): New function.
(__mktime_internal): Use it systematically for all isdst comparisons.
This completes the fix for libc BZ #6723, and removes the need for
normalizing tm_isdst. See
<http://sourceware.org/bugzilla/show_bug.cgi?id=6723>
(not_equal_tm) [DEBUG]: Use isdst_differ here, too.
Paul Eggert [Sat, 29 Jan 2011 23:47:04 +0000 (15:47 -0800)]
mktime: fix some integer overflow issues and sidestep the rest
This was prompted by a bug report by Benjamin Lindner for MinGW
<http://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00472.html>.
His bug is due to signed integer overflow (0 - INT_MIN), and I
I scanned through mktime.c looking for other integer overflow
problems, fixing all the bugs I found.
Although the C Standard says the resulting code is still not safe
in the presence of integer overflow, in practice it should be good
enough for all real-world two's-complement implementations, except
for debugging environments that deliberately trap on integer
overflow (e.g., gcc -ftrapv).
* lib/mktime.c (WRAPV): New macro.
(SHR): Also check that long_int and time_t shift right in the
usual way, before using the fast-but-unportable method.
(TYPE_ONES_COMPLEMENT, TYPE_SIGNED_MAGNITUDE): Remove, no longer
used. The code already assumed two's complement, so there's
no need to test for alternatives. All uses removed.
(TYPE_MAXIMUM): Don't rely here on overflow behavior not defined by
the C standard. Problem reported by Rich Felker in
<http://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00488.html>.
(twos_complement_arithmetic): Also check long_int and time_t.
(time_t_avg, time_t_add_ok, time_t_int_add_ok): New functions.
(guess_time_tm, ranged_convert, __mktime_internal): Use them.
(__mktime_internal): Avoid integer overflow with unary subtraction
in two instances where -1 - X is an adequate replacement for -X,
since the calculations are approximate.
Eric Blake [Thu, 27 Jan 2011 17:06:08 +0000 (10:06 -0700)]
mktime: avoid infinite loop
* m4/mktime.m4 (AC_FUNC_MKTIME): Avoid overflow on possibly-signed
type; behavior is still undefined but portable to all known targets.
Reported by Rich Felker.
Paul Eggert [Sat, 29 Jan 2011 05:02:31 +0000 (21:02 -0800)]
mktime: avoid problems on NetBSD 5 / i386
* lib/mktime.c (long_int): New type. This works around a problem
on NetBSD 5 / i386, where 'long int' and 'int' are both 32 bits
but time_t is 64 bits, and where I expect the existing code is
wrong in some cases.
(leapyear, ydhms_diff, guess_time_tm, __mktime_internal): Use it.
(ydhms_diff): Bring back the compile-time check for wide-enough
year and yday.
Ralf Wildenhues [Sat, 22 Jan 2011 15:44:52 +0000 (16:44 +0100)]
move-if-change: cope with concurrent mv of identical file.
* build-aux/move-if-change (CMPPROG): Accept environment
variable as an override for `cmp'.
(usage): Document CMPPROG.
Adjust comparison to drop stdout. Cope with failure of mv if
the target file exists and is identical to the source, for
parallel builds.
Report from H.J. Lu against binutils in PR binutils/12283.
Bruno Haible [Thu, 27 Jan 2011 10:42:45 +0000 (11:42 +0100)]
vma-iter, get-rusage-as: Add OpenBSD support.
* modules/vma-iter (configure.ac): Test for mquery.
* lib/vma-iter.h (VMA_ITERATE_SUPPORTED): Define also on OpenBSD.
* lib/vma-iter.c: Include <sys/mman.h>.
(vma_iterate): Add an implementation based on mquery().
* lib/resource-ext.h (get_rusage_as): Update comments.
* lib/get-rusage-as.c: Likewise.
* lib/get-rusage-data.c: Likewise.
Eric Blake [Wed, 26 Jan 2011 05:06:16 +0000 (22:06 -0700)]
fcntl: work around Haiku F_DUPFD bugs
* m4/fcntl.m4 (gl_FUNC_FCNTL): Also catch Haiku errno bug.
* lib/fcntl.c (rpl_fcntl) [F_DUPFD]: Work around Haiku losing
cloexec bit on duplication.
* doc/posix-functions/fcntl.texi (fcntl): Document the bug.
Bruno Haible [Mon, 24 Jan 2011 02:56:02 +0000 (03:56 +0100)]
New module 'vma-iter'.
* lib/vma-iter.h: New file.
* lib/vma-iter.c: New file, based on lib/get-rusage-as.c.
* modules/vma-iter: New file.
* lib/get-rusage-as.c: Include vma-iter.h. Don't include system headers
for get_rusage_as_via_iterator.
(vma_iterate_callback): New function.
(get_rusage_as_via_iterator): Rewritten to use vma_iterate.
* modules/get-rusage-as (Depends-on): Add vma-iter.
Paul Eggert [Sat, 22 Jan 2011 06:18:18 +0000 (22:18 -0800)]
getopt: omit HAVE_OPTRESET, HAVE_GETOPT_CLIP from config.h
* m4/getopt.m4 (gl_GETOPT_CHECK_HEADERS): Do not put the
symbols HAVE_OPTRESET and HAVE_GETOPT_CLIP into config.h,
as they are needed only for configure's test case.
This removes two unnecessary symbols from config.h.
Eric Blake [Fri, 21 Jan 2011 16:17:38 +0000 (09:17 -0700)]
bootstrap: minor portability fixes
* build-aux/bootstrap (me): Use $me instead of $0 in functions.
(usage): Omit leading capital and trailing . on help phrases, per
GNU Coding Standards.
(check_versions, top level): Prefix messages with script name.
Bruno Haible [Fri, 21 Jan 2011 13:12:24 +0000 (14:12 +0100)]
uN_strstr: New unit tests.
* modules/unistr/u8-strstr-tests: New file.
* modules/unistr/u16-strstr-tests: New file.
* modules/unistr/u32-strstr-tests: New file.
* tests/unistr/test-u-strstr.h: New file, based on tests/test-strstr.c.
* tests/unistr/test-u8-strstr.c: New file.
* tests/unistr/test-u16-strstr.c: New file.
* tests/unistr/test-u32-strstr.c: New file.
Pádraig Brady [Fri, 21 Jan 2011 08:47:51 +0000 (08:47 +0000)]
test-malloca: unset MALLOC_PERTURB_ to speed up test
* tests/test-malloca.c (main): Unset the environment variable
to greatly speed up the test.
* tests/init.sh: Don't say that MALLOC_PERTURB_ is cheap.
* modules/malloca-tests: Depend on unsetenv.
Jim Meyering [Thu, 20 Jan 2011 07:47:24 +0000 (08:47 +0100)]
init.sh: insert space between each function name and "()"
* tests/init.sh: Make it a little easier to see that a function's
name is "warn_", and not "warn" when looking at the first part of
its definition: "warn_ ()". Suggested by Ralf Wildenhues.
Jim Meyering [Fri, 14 Jan 2011 08:43:00 +0000 (09:43 +0100)]
bootstrap: avoid failure when there is no .gitmodules file
": ${gnulib_path=gnulib}" fails to set $gnulib_path when that variable
has been assigned to, even when its value is the empty string.
* build-aux/bootstrap (gnulib_path): Test explicitly for an empty
"$gnulib_path", rather than using ${gnulib_path=gnulib}.
Reported by John W. Eaton <jwe@gnu.org>.
Jim Meyering [Thu, 20 Jan 2011 08:35:37 +0000 (09:35 +0100)]
mountlist: clean up code formatting
* lib/mountlist.c (read_file_system_list): Split a long line,
correct bracing style, use NULL in place of "(struct statfs *)0",
don't parenthesize return value, add spaces around "=" and after
";-in-for-stmt".
Markus Duft [Thu, 20 Jan 2011 08:19:24 +0000 (09:19 +0100)]
mountlist: add support for Interix
* lib/mountlist.c (read_file_system_list) [MOUNTED_INTERIX_STATVFS]:
Apply statvfs to all entries of /dev/fs.
* m4/ls-mntd-fs.m4 (gl_LIST_MOUNTED_FILE_SYSTEMS): Check for statvfs,
and if found, AC_DEFINE MOUNTED_INTERIX_STATVFS.
Jim Meyering [Thu, 20 Jan 2011 10:50:53 +0000 (11:50 +0100)]
maint.mk: improve the public-submodule-commit rule
* top/maint.mk (public-submodule-commit): Prefix with $(AM_V_GEN),
to suppress printing of its commands... unless V=1.
Add git submodule's --quiet option to suppress printing of e.g.,
"Entering gnulib" output.
"cd" into $(srcdir) before running git submodule.
Bruno Haible [Thu, 20 Jan 2011 10:25:32 +0000 (11:25 +0100)]
include_next: Fix bug introduced on 2011-01-18.
* m4/include_next.m4 (gl_NEXT_HEADERS_INTERNAL): New macro, extracted
from gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. Omit test of
ac_cv_header_... variable if the second argument is not 'check'.
(gl_CHECK_NEXT_HEADERS, gl_NEXT_HEADERS): Invoke
gl_NEXT_HEADERS_INTERNAL.
Jim Meyering [Fri, 14 Jan 2011 08:43:00 +0000 (09:43 +0100)]
bootstrap: avoid failure when there is no .gitmodules file
": ${gnulib_path=gnulib}" fails to set $gnulib_path when that variable
has been assigned to, even when its value is the empty string.
* build-aux/bootstrap (gnulib_path): Test explicitly for an empty
"$gnulib_path", rather than using ${gnulib_path=gnulib}.
Reported by John W. Eaton <jwe@gnu.org>.
Eric Blake [Wed, 19 Jan 2011 17:12:12 +0000 (10:12 -0700)]
c-stack: assume stack overflow if SA_SIGINFO unsupported
* lib/c-stack.c (SIGACTION_WORKS): Rename...
(SIGINFO_WORKS): ...since gnulib module guarantees that (most) of
sigaction will work.
(die): Assume stack overflow if siginfo doesn't work, to let Haiku
behavior match Linux.
* tests/test-c-stack.c (main): Prefer NULL for pointers.
Eric Blake [Wed, 19 Jan 2011 13:17:20 +0000 (06:17 -0700)]
binary-io: fix O_TEXT on Haiku
* modules/binary-io (Depends-on): Add fcntl-h.
* lib/binary-io.h (O_TEXT): Rely on replacement <fcntl.h> rather
than blindly undefining O_TEXT.
Reported by Scott McCreary.
Paul Eggert [Wed, 19 Jan 2011 06:38:10 +0000 (22:38 -0800)]
include_next: do not check for standard headers like stddef.h
I found this problem when modifying Emacs to use gnulib.
I noticed that it added HAVE_STDDEF_H to config.h, even though
gnulib always assumes <stddef.h> exists as per README and this
symbol is unnecessary.
* m4/include_next.m4 (gl_NEXT_HEADERS): New macro, which does not
use AC_CHECK_HEADERS_ONCE, but which otherwise contains what
gl_CHECK_NEXT_HEADERS used to contain. This makes 'configure' run
faster for headers like stddef.h that are known to exist.
(gl_CHECK_NEXT_HEADERS): Use it.
* m4/float_h.m4 (gl_FLOAT_H): For float.h, use gl_NEXT_HEADERS
rather than gl_CHECK_NEXT_HEADERS.
* m4/stdarg.m4 (gl_STDARG_H): Likewise, for stdarg.h.
* m4/stddef_h.m4 (gl_STDDEF_H): Likewise, for stddef.h.
Bruno Haible [Tue, 18 Jan 2011 19:11:59 +0000 (20:11 +0100)]
*printf-posix: Avoid test failures. Make tests work on MacOS X, Cygwin.
* tests/test-fprintf-posix3.c: Include "resource-ext.h".
(main): Perform test also when getrlimit and setrlimit don't exist or
when setrlimit of RLIMIT_DATA fails (like on Cygwin). Instead of
limiting the address space size using setrlimit, compare the address
space size before and after the the test.
* tests/test-dprintf-posix2.c: Likewise.
* tests/test-fprintf-posix3.sh: Update skip messages.
* tests/test-dprintf-posix2.sh: Likewise.
* modules/fprintf-posix-tests (Depends-on): Add get-rusage-as.
* modules/dprintf-posix-tests (Depends-on): Likewise.
Reported by Bruce Korb <bkorb@gnu.org> and
Gary V. Vaughan <gary@gnu.org>.
Paul Eggert [Tue, 18 Jan 2011 17:40:16 +0000 (09:40 -0800)]
strftime: remove dependencies on multibyte modules
strftime depended on mbrlen, mbsinit, and wchar, but these modules
are needed only if ! MULTIBYTE_IS_FORMAT_SAFE, and that is true
only if __osf__ is defined, and I suspect OSF doesn't need these
other modules. If my guess is wrong, we'll need to come up with a
variant of strftime that doesn't need the multibyte modules.
I discovered this problem when attempting modify Emacs to use the
strftime module. With the previous gnulib, this caused Emacs to
need 31 new files, ranging from lib/config.charset to
m4/wint_t.m4. This was overkill and I expect would be offputting
to the Emacs maintainers. After this change, only 6 new files are
needed, namely strftime.[ch], srtftime.m4, stdbool.in.h,
stdbool.m4, and tm_gmtoff.m4.
* lib/strftime.c (MULTIBYTE_IS_FORMAT_SAFE): Define to 1 always.
Suggested by Bruno Haible in
<http://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00238.html>.
* m4/strftime.m4 (gl_FUNC_STRFTIME): Do not require AC_TYPE_MBSTATE_T,
and do not check for wchar.h.
* modules/strftime (Files): Remove m4/mbstate_t.m4.
(Depends-on): Remove mbrlen, mbsinit, wchar.
Rob Vermaas [Wed, 12 Jan 2011 09:08:53 +0000 (10:08 +0100)]
save-cwd: no longer include "xgetcwd.h"
* lib/save-cwd.c: Don't include "xgetcwd.h"; it's no longer used.
This avoids a compilation failure in projects that use save-cwd
without also using the xgetcwd module.
Paul Eggert [Wed, 12 Jan 2011 00:36:12 +0000 (16:36 -0800)]
ftoastr: split into 3 modules ftoastr, dtoastr, ldtoastr
This is so that a program like Emacs, which needs only dtoastr,
does not have to bother with distributing and compiling ftoastr
and ldtoastr.
* MODULES.html.sh: Document these modules (ftoastr wasn't documented).
* modules/dtoastr, modules/ldtoastr: New files.
* modules/ftoastr: Now works just for 'float'.
(Files): Remove lib/dtoastr.c, lib/ldtoastr.c.
(Makefile.am): Remove ftoastr.h (not needed and no effect),
dtoastr.c, ldtoastr.c.
Jim Meyering [Tue, 11 Jan 2011 20:41:41 +0000 (21:41 +0100)]
save-cwd: remove #if-!HAVE_FCHDIR'd code; use the fchdir module
There is no need to work around the lack of the fchdir function,
since gnulib can now provide a replacement when required.
* lib/save-cwd.c: Remove #if !HAVE_FCHDIR...#endif code.
* modules/save-cwd (Depends-on): Add fchdir.
Paul Eggert [Tue, 11 Jan 2011 18:42:55 +0000 (10:42 -0800)]
openat, save-cwd: avoid xmalloc
This removes a direct (but undocumented) dependency of openat on
xalloc, along with an indirect dependency via save-cwd. It also
removes a dependency of save-cwd on xgetcwd, and thereby
indirectly on xalloc. This change causes the openat substitute
to fall back on save_cwd when memory is tight, and for save_cwd to
fail instead of dying when memory is tight, but that's good enough.
* lib/openat-proc.c: Include stdlib.h (for malloc), not
xalloc.h (for xmalloc).
(openat_proc_name): Use malloc, not xmalloc.
* lib/save-cwd.c (save_cwd): Use getcwd, not xgetcwd.
* modules/save-cwd (Files): Depend on getcwd, not xgetcwd.
Paul Eggert [Tue, 11 Jan 2011 18:26:56 +0000 (10:26 -0800)]
openat: Increase OPENAT_BUFFER_SIZE from 512 to at least 1024
This avoids heap allocation for file names whose lengths are in
the range 512..1023, with the upper bound increasing to at most
4031 depending on the platform's PATH_MAX. (We do not want
pathmax.h here as it might supply a non-constant PATH_MAX.)
* lib/openat-priv.h (SAFER_ALLOCA_MAX, SAFER_ALLOCA): New macros.
Perhaps they should be moved to malloca.h?
(OPENAT_BUFFER_SIZE): Use them.
Bruno Haible [Sun, 9 Jan 2011 10:28:10 +0000 (11:28 +0100)]
New module 'unictype/property-changes-when-casemapped'.
* modules/unictype/property-changes-when-casemapped: New file.
* lib/unictype/pr_changes_when_casemapped.c: New file.
* lib/unictype/pr_changes_when_casemapped.h: New file, automatically
generated by gen-uni-tables.
* modules/unictype/property-changes-when-casemapped-tests: New file.
* tests/unictype/test-pr_changes_when_casemapped.c: New file,
automatically generated by gen-uni-tables.