Jim Meyering [Sat, 4 Jan 2014 18:50:45 +0000 (10:50 -0800)]
maint: add a gnulib-local rule to keep non-ascii out of .texi files
* cfg.mk (sc_keep_gnulib_texi_files_mostly_ascii): New rule,
so that "make sc_maint" will ding anyone who puts non-ascii
in any of gnulib's .texi files.
Jim Meyering [Sat, 4 Jan 2014 01:17:27 +0000 (17:17 -0800)]
freadable, fwritable, fwriting: declare with the "pure" attribute
* lib/freadable.h (freadable): Declare with the "pure" attribute.
* lib/fwritable.h (fwritable): Likewise.
* lib/fwriting.h (fwriting): Likewise.
Suggested by Bruno Haible.
Jim Meyering [Sat, 4 Jan 2014 00:58:50 +0000 (16:58 -0800)]
maint.mk: adapt openat.h-include-without-use test
* top/maint.mk (sc_prohibit_openat_without_use): Also check for
FCHMODAT_INLINE, FCHOWNAT_INLINE and STATAT_INLINE, to avoid
failing on gnulib's own lib/{chmod,chown,stat}at.c files.
With this change, running "make sc_maint" in gnulib's top-level
directory now passes for me.
Paul Eggert [Thu, 2 Jan 2014 05:51:10 +0000 (21:51 -0800)]
relocatable-script: remove unused code
Problem reported by Reuben Thomas in:
http://lists.gnu.org/archive/html/bug-gnulib/2013-12/msg00117.html
* build-aux/relocatable.sh.in (func_tmpdir): Remove unused function.
Jim Meyering [Thu, 2 Jan 2014 04:25:44 +0000 (20:25 -0800)]
maint: fix public-submodule-commit to work with newer git
* top/maint.mk (public-submodule-commit): Remove excess quoting.
We were over-quoting the test arguments, and somewhere prior to
version 1.8.5.2.229, git stopped removing those excess quotes,
which made the test fail, since the unexpanded strings would
always differ; using GIT_TRACE=1 confirmed that the git merge-base
command wasn't even being run.
Eric Blake [Tue, 24 Dec 2013 18:16:07 +0000 (11:16 -0700)]
passfd: give nicer error for recvfd at eof
I noticed that recvfd() fails with errno set to EACCES if the
other end of the socket has closed (such as if it calls _exit());
but "Permission denied" as the strerror() message doesn't read
very well. This improves things to give the nicer message:
"Transport endpoint is not connected".
* lib/passfd.c (recvfd): Fake ENOTCONN if other end closes early.
* tests/test-passfd.c (main): Enhance test to cover this.
Paul Eggert [Tue, 17 Dec 2013 20:38:54 +0000 (12:38 -0800)]
gettimeofday: port recent C++ fix to Emacs
Without this further patch, Emacs won't build due to
the portcheck failing. Also, this simplifies the patch a bit.
* lib/time.in.h (localtime, gmtime): Don't replace unless
GNULIB_GETTIMEOFDAY. Treat them more like mktime.
* lib/time.in.h (localtime, gmtime):
* m4/gettimeofday.m4 (gl_GETTIMEOFDAY_REPLACE_LOCALTIME):
* m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS):
* modules/time (time.h):
Don't worry about about the possibility of localtime and gmtime
being absent; they're present in all C libraries we know about.
* m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS):
Don't assume sys_time is present and has been initialized.
Instead, use a hack that should work even if it hasn't been.
Don't use a portcheck for gmtime or localtime; this supports
the hack.
* modules/time (time.h): Substitute GNULIB_GETTIMEOFDAY.
John W. Eaton [Tue, 17 Dec 2013 19:04:37 +0000 (11:04 -0800)]
gettimeofday: fix C++ crosscompilation
Never replace gmtime and localtime by macros when compiling with
C++, this prevents <ctime> from being included.
* m4/gettimeofday.m4 (gl_GETTIMEOFDAY_REPLACE_LOCALTIME): Do not
define gmtime and localtime as preprocessor macros. Instead
define some HAVE_GMTIME, HAVE_LOCALTIME, REPLACE_GMTIME, and
REPLACE_LOCALTIME substitutions.
* lib/time.in.h: Declare gmtime and localtime when needed.
* m4/time_h.m4 (gl_HEADER_TIME_H_DEFAULTS): AC_SUBST HAVE_GMTIME,
HAVE_LOCALTIME, REPLACE_GMTIME, and REPLACE_LOCALTIME.
* modules/time: Depend on gettimeofday, and substitute the above
variables in time.h.
Paul Eggert [Tue, 17 Dec 2013 18:49:01 +0000 (10:49 -0800)]
qacl: port to Windows better
See Eli Zaretskii in
<http://lists.gnu.org/archive/html/emacs-devel/2013-12/msg00593.html>.
* lib/file-has-acl.c (acl_access_nontrivial):
Return -1 and set errno if !HAVE_ACL_FIRST_ENTRY &&
!HAVE_ACL_TO_SHORT_TEXT && !HAVE_ACL_FREE_TEXT.
Pádraig Brady [Sun, 8 Dec 2013 23:19:29 +0000 (23:19 +0000)]
md5, sha1, sha256, sha512: fix link error with partial libcrypto
* m4/gl-openssl.m4 (gl_CRYPTO_CHECK): Only clear LIB_CRYPTO at
init time, so that if early checks find crypto routines,
while the last does not, then @LIB_CRYPTO@ is replaced correctly,
avoiding link failures.
This provides a new way to specify the default for
gl_CRYPTO_CHECK, one that is reflected in the --help message.
Emacs uses this, as well as the old way.
This attempts to implement a suggestion by Pádraig Brady in
<http://lists.gnu.org/archive/html/coreutils/2013-12/msg00080.html>.
* m4/gl-openssl.m4(gl_SET_CRYPTO_CHECK_DEFAULT): New macro.
(gl_CRYPTO_CHECK): Use it. Mention the default in --help output.
Paul Eggert [Sun, 8 Dec 2013 01:00:44 +0000 (17:00 -0800)]
md5, sha1, sha256, sha512: add 'auto', and a way to specify default
* m4/gl-openssl.m4 (gl_CRYPTO_CHECK):
Add support for a new option, --with-openssl=auto, which causes
the library to be used if available and silently ignored if not.
Add support to allow allow configure.ac to specify its own
default, by setting with_openssl_default before invoking gl_INIT.
Eric Blake [Wed, 4 Dec 2013 00:42:38 +0000 (17:42 -0700)]
bootstrap: warn about BSD toolchain snafu
With my help on IRC, Roman Bogorodskiy identified a bug where the
BSD autoconf wrapper script eats stdin[1], which in turn causes
autopoint from gettext 0.18.3 to fail to find AM_GNU_GETTEXT_VERSION
out of configure.ac[2], with this error:
./bootstrap: autopoint --force
autopoint: *** Missing version: please specify in configure.ac through a line 'AM_GNU_GETTEXT_VERSION(x.yy.zz)' the gettext version the package is using
The workaround would be painful to automate (because gettext
hardcodes the use of autom4te rather than honoring ${AUTOM4TE},
we'd have to create a temporary wrapper earlier in $PATH that
forwards to the real autom4te-x.yz - basically, repeating the
logic of what a wrapper script was supposed to do). Further,
while the broken autom4te definitely hurts gettext 0.18.3, it
tends to have no issues with gettext 0.18.2; and since the
problem has been identified, it will not be long before fixed
autom4te and/or improved gettext that is not so stubborn
about using exactly 'autom4te' will be available. Therefore,
for now we just warn about the situation.
* build-aux/bootstrap: Alert users to a broken autom4te.
Paul Eggert [Thu, 5 Dec 2013 17:22:20 +0000 (09:22 -0800)]
open-tests: port to glibc with _FORTIFY_SOURCE and -O1
Problem reported by Daiki Ueno in:
http://lists.gnu.org/archive/html/bug-gnulib/2013-06/msg00052.html
* tests/test-open.h (__always_inline):
New macro, if not already defined.
(test_open): Use it.
Eric Blake [Wed, 4 Dec 2013 17:00:00 +0000 (10:00 -0700)]
include_next: minimize code duplication
I noticed some code duplication while trying to resolve a bug
originally reported by Rhys Ulerich:
https://lists.gnu.org/archive/html/bug-gnulib/2013-10/msg00049.html
* modules/include_next (Depends-on): Add absolute-header.
* m4/include_next.m4 (gl_NEXT_HEADERS_INTERNAL): Reuse
gl_ABSOLUTE_HEADER_ONE instead of open-coding it.
Pádraig Brady [Wed, 4 Dec 2013 12:11:40 +0000 (12:11 +0000)]
regex: suppress core dumps from detection code
* m4/regex.m4 (gl_REGEX): Catch the SIGABRT and convert to SIGTERM
to suppress core dumps that may well occur on glibc systems.
These core dumps might not be cleaned up automatically, or could
trigger some system core dump handling logic.
Pádraig Brady [Tue, 3 Dec 2013 13:53:03 +0000 (13:53 +0000)]
md5, sha1, sha256, sha512: support mandating use of openssl
* m4/gl-openssl.m4 (gl_CRYPTO_CHECK): Adjust the --with-openssl
description, to list the now 3 separate options. Also don't
mention the default=no, since this is implicit given the option
is described as --with-openssl rather than --without-openssl.
If projects change the default they're free to document that.
With --with-openssl[=yes] we now error out when the specified
hash algorithm is not available in libcrypto.
Eric Blake [Tue, 3 Dec 2013 17:34:13 +0000 (10:34 -0700)]
regex: avoid glibc deadlock during configure
glibc has a known bug where certain corruptions of the heap can
cause malloc to default to printing a debug message that includes
a backtrace, but the act of getting the backtrace uses dlopen
which in turn calls into malloc, causing a recursive lock ending
in deadlock. Thus, when configure is probing for a known glibc
heap corruption bug, the overall configure would hang.
The solution suggested by glibc developers is to force malloc
to quit printing debug messages, which avoids recursive malloc.
* m4/regex.m4 (gl_REGEX): Avoid recursive malloc deadlock when
glibc bug 15078 in turn triggers bug 16159.
Reported by Michal Privoznik.
Paul Eggert [Thu, 28 Nov 2013 08:46:06 +0000 (00:46 -0800)]
ignore-value: revert previous code change
* lib/ignore-value.h (ignore_value): Use __extension__ and
__typeof__ only for GCC 3.4 and later. Reported by Eric Blake in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-11/msg00102.html>.
Change the comment to try to explain this better.
Pádraig Brady [Wed, 27 Nov 2013 21:53:19 +0000 (21:53 +0000)]
selinux-h: improve stub types and add more stub functions
* lib/se-selinux.in.h: Change security_context_t to a typedef
rather than a define, as it's a pointer type and so is better
as a typedef to avoid issues declaring multiple variables
with the comma operator. Also add stub for string_to_security_class().
* lib/se-context.in.h: Add stub functions for
context_{type,range,role,user}_get().
Paul Eggert [Wed, 27 Nov 2013 22:52:17 +0000 (14:52 -0800)]
ignore-value: prefer GCC version back through 2.0
The code didn't match the comments, so I did a bit of software
archaeology. GCC 2.0 seems to support __extension__ and
__typeof__, so fix both code and comments to use 2.0.
* lib/ignore-value.h (ignore_value): Use __extension__ and
__typeof__ for GCC 2.0 through 3.3, too.
The intended preprocessor macro HAVE_FORKPTY is
never defined, yet `lib/forkpty.c' depends on it.
* m4/pty.m4 (gl_FUNC_FORKPTY): At completed analysis,
apply AC_DEFINE_UNQUOTED to HAVE_FORKPTY with value
$HAVE_FORKPTY for access to wrapper in `lib/forkpty.c'.
Jim Meyering [Tue, 19 Nov 2013 01:35:01 +0000 (17:35 -0800)]
quotearg: don't attempt to store 1 << 31 into an "int"
* lib/quotearg.c (quotearg_buffer_restyled): Building coreutils with
gcc's new -fsanitize=undefined and running its tests triggered some
new test failures due to undefined behavior, all with this diagnostic:
lib/quotearg.c:629:62: runtime error: left shift of 1 by 31 places \
cannot be represented in type int
Rather than shifting "1" left to form a mask, shift the bits right and
simply use "1" as the mask. Co-authored-by: Paul Eggert <eggert@cs.ucla.edu>
Paul Eggert [Thu, 21 Nov 2013 20:12:45 +0000 (12:12 -0800)]
error: depend on stdio
Problem reported by Nikos Mavrogiannopoulos in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-11/msg00084.html>
* modules/error (Depends-on): Add stdio.
Pádraig Brady [Mon, 11 Nov 2013 14:19:09 +0000 (14:19 +0000)]
base64: provide a fast path for encoding well sized buffers
Avoid conditionals in the base64 encoding loop,
which was seen to give a 60% throughput improvement
with the base64 utility from coreutils:
$ truncate -s100MiB file.in
$ time base64-old -w0 < file.in >/dev/null
real 0m0.302s
$ time base64-new -w0 < file.in >/dev/null
real 0m0.182s
* lib/base64.c (base64_encode_fast): A new function to be called
when we don't want to NUL terminate, and we have enough space
in the output to encode the given input.
(base64_encode): Call the _fast() version when appropriate.
Also remove a redundant mask with 0x3F on the first encoded byte.
Paul Eggert [Fri, 8 Nov 2013 15:57:15 +0000 (07:57 -0800)]
extern-inline: port better to OS X 10.9
* m4/extern-inline.m4: Omit serial number; this file doesn't use them.
(gl_EXTERN_INLINE): Do not suppress the use of extern inline on
OS X 10.9, except for g++ where the bug is still present.
See <http://trac.macports.org/ticket/41033>.
Eric Blake [Fri, 8 Nov 2013 13:33:43 +0000 (06:33 -0700)]
fpending: fix regression on DragonFly BSD
Commit 3f5bf99e claimed that it is safe to declare __fpending twice,
but in reality this caused a regression on Dragonfly BSD. Reported by
GW in <https://lists.gnu.org/archive/html/bug-m4/2013-11/msg00000.html>,
<https://lists.gnu.org/archive/html/bug-gnulib/2013-11/msg00022.html>.
Paul Eggert [Thu, 31 Oct 2013 16:44:44 +0000 (09:44 -0700)]
obstack: pacify HP C
* lib/obstack.h (obstack_free) [!__GNUC__]: Rewrite to avoid
warning "conversion from pointer to smaller integer" from HP
C-ANSI-C - cc version B9007AA/B3910B A.06.26. It's safe to assume
C89 or later nowadays, so cast to void instead of int. Privately
reported by H.Merijn Brand. Also, change header to match glibc's,
to make checking against glibc easier.
Paul Eggert [Thu, 31 Oct 2013 03:51:39 +0000 (20:51 -0700)]
isnan: port to VAX
Reported by John Klos for NetBSD-5/VAX in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-10/msg00133.html>.
* lib/isnan.c (IEEE_FLOATING_POINT): New macro, stolen from Emacs.
(FUNC): Use it.
Jim Meyering [Mon, 28 Oct 2013 23:08:16 +0000 (16:08 -0700)]
gnulib-tool: protect against CDPATH
* gnulib-tool: Many "cd" built-in functions print a directory name
to stdout when CDPATH is set, e.g.,
$ bash -c 'CDPATH=/; cd tmp'
/tmp
Unset it, when possible. Prompted by a comment from Bruce Korb.
Jim Meyering [Mon, 28 Oct 2013 22:25:25 +0000 (15:25 -0700)]
maint.mk: restore functionality removed by recent change
Sunday's change, v0.0-8062-g6b24f60, may have appeared correct from
the context of a shallow-cloned gnulib repository: "git describe"
would fail in such a directory. However, that change made it so
the reported gnulib revision no longer includes the version number
or a commit count, even when run from a full clone.
* top/maint.mk (gnulib-version): Use the full "git describe"
output when possible, e.g., the form above, rather than the
abbreviated, no-tag, no-commit-count string, and fall back to
using a 10-byte hash, rather than the default minimal-length
hash prefix, since while the minimal-length one may be fine today,
it is likely not to be unique for very long.
The GPL 'error' module is used by some of the gnulib testsuites;
and for some projects that use LGPL 'vasnprintf' in their lib/
directory, having 'error' depend on GPL 'vfprintf-posix' meant
that compilation breaks for those projects:
autoreconf: running: aclocal -I m4 --force -I m4
missing file gnulib/tests/vasnprintf.c
configure.ac:135: error: expected source file, required through
AC_LIBSOURCES, not found
m4/gnulib-comp.m4:518: gl_INIT is expanded from...
configure.ac:135: the top level
autom4te: /usr/bin/m4 failed with exit status: 1
I suspect that the problem encountered on OS/x was a warning from
gcc complaining about inconsistent use of __attribute__((__format__
__printf__)) vs. ((__format__ __gnu_printf__)); so perhaps the
real fix is to teach error.h to copy the extra care taken by
stdio.h with regards to whether merely system or full GNU printf
specifiers are being handled. But without actually reproducing
that situation myself, the easiest action for now is to just revert
the dependency that violates the 'Comment' section of vfprintf-posix.
Jim Meyering [Sun, 27 Oct 2013 02:26:13 +0000 (19:26 -0700)]
maint.mk: fix "release" target to build _version
This fixes a bug in README-release whereby following the outlined
steps, one would publish a tarball whose programs would report
--version output not consistent with the package version number.
This bug caused grep-2.15 to produce a grep program whose
--version option made it print 2.14.56-1e3d rather than 2.15.
* top/maint.mk (release): Making this target build "_version"
ensures that the new version number is reflected in configure.
Bruno Haible [Tue, 22 Oct 2013 05:48:35 +0000 (22:48 -0700)]
install-reloc: Support multi-binary installation.
* build-aux/install-reloc: Support installing multiple programs in
one invocation, as done by Automake starting with commit 4295fe33eb23f (Multi-file install for PROGRAMS.). From Bruno
Haible <bruno@clisp.org>, archived at
http://lists.debian.org/debian-bsd/2012/05/msg00032.html.
Reported by Sylvain <beuc@gnu.org>.
selinux-h: really build without selinux when library is missing
* m4/selinux-selinux-h.m4: When the selinux library is missing, really
continue without selinux, as already told in the warning message.
This is necessary for when the 64bit selinux development package is
installed only, but the package (tar-1.27 fex) is built as 32bit,
causing the header files to be found while the library already wasn't
found earlier.
Paul Eggert [Wed, 16 Oct 2013 14:47:53 +0000 (07:47 -0700)]
mkfifo-tests, etc.: allow HP-UX 11.11 bug
Problem reported by Daniel Richard G. in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-10/msg00068.html>.
* doc/posix-functions/mkfifo.texi (mkfifo):
* doc/posix-functions/mkfifoat.texi (mkfifoat):
* doc/posix-functions/mknod.texi (mknod):
* doc/posix-functions/mknodat.texi (mknodat):
Document the HP-UX 11.11 bug.
* tests/test-mkfifo.h (test_mkfifo):
Allow the HP-UX 11.11 bug.
Paul Eggert [Mon, 14 Oct 2013 21:25:06 +0000 (14:25 -0700)]
acl: allow cross-compilation to Gentoo
Problem reported by Gabriel Marcano in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-10/msg00058.html>.
* m4/acl.m4 (gl_ACL_GET_FILE): When cross-compiling,
test only whether it links.
Paul Eggert [Mon, 14 Oct 2013 06:08:42 +0000 (23:08 -0700)]
mgetgroups: remove dependency on realloc-gnu
The dependency violates the comment in realloc-gnu, which
says that tests can't depend on realloc-gnu; some tests depend
on mgetgroups, so mgetgroups can't depend on realloc-gnu.
Problem reported by Daniel Richard G. in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-10/msg00056.html>.
* lib/mgetgroups.c (mgetgroups): Don't call realloc (NULL, 0).
* modules/mgetgroups (Depends-on): Depend on realloc-posix,
not realloc-gnu.
Paul Eggert [Sat, 12 Oct 2013 18:50:15 +0000 (11:50 -0700)]
regex-tests: port to HP-UX 11.11
Problem reported by Daniel Richard G. in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-10/msg00052.html>.
* modules/regex-tests (test_regex_LDADD): Add LIBTHREAD, LIB_PTHREAD.
Eric Blake [Thu, 10 Oct 2013 18:24:59 +0000 (12:24 -0600)]
strtoumax: fix typo in previous commit.
Tom G. Christensen reported:
> I see this in the configure output:
> ./configure: line 7680: test: =: unary operator expected
>
> $ sed -n 7680p configure
> if test $HAVE_STRTOUMAX = 0 || test $REPLACE_STRTOUMAX = 1; then
and indeed, we're only setting HAVE_DECL_STRTOUMAX.
Paul Eggert [Thu, 10 Oct 2013 16:15:18 +0000 (09:15 -0700)]
strtoumax: port to Solaris 8
This problem was introduced in the recent HP-UX patch.
Reported by Tom G. Christensen in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-10/msg00037.html>.
* modules/strtoumax (Depends-on): Test HAVE_STRTOUMAX
and REPLACE_STRTOUMAX rather than ac_cv_func_strtoumax.
Paul Eggert [Wed, 9 Oct 2013 15:05:24 +0000 (08:05 -0700)]
strtoimax, strtoumax: port to HP-UX 11.11
Problem reported by Daniel Richard G. in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-10/msg00023.html>.
* lib/inttypes.in.h (strtoumax): Replace strtoumax if
REPLACE_STRTOUMAX, thus treating it consistently with strtoimax.
* m4/inttypes.m4 (gl_INTTYPES_H_DEFAULTS): Add default for
REPLACE_STRTOUMAX.
* m4/strtoimax.m4 (gl_FUNC_STRTOIMAX):
* m4/strtoumax.m4 (gl_FUNC_STRTOUMAX):
Replace the function if defined as a macro but not as a function.
* modules/inttypes-incomplete (inttypes.h): Substitute
REPLACE_STRTOUMAX.
* modules/strtoumax (configure.ac): Replace strtoumax if
REPLACE_STRTOUMAX.
Paul Eggert [Wed, 9 Oct 2013 06:27:49 +0000 (23:27 -0700)]
strtoimax: port to HP-UX 11.11
Problem reported by Daniel Richard G.
* lib/strtoimax.c (Strtoimax, Strtol, Strtoll): New macros.
(strtoimax, strtol, strtoll) [UNSIGNED]: Remove, since
they might clash with inttypes.h.
Paul Eggert [Mon, 7 Oct 2013 06:51:44 +0000 (23:51 -0700)]
count-leading-zeros: port to MSC; support types wider than 64 bits
The ideas behind the MSC port are stolen from Emacs.
* lib/count-leading-zeros.h:
Don't include verify.h: it's no longer needed, as types wider than
64 bits are now supported.
(COUNT_LEADING_ZEROS): New arg MSC_BUILTIN, for better
performance with MSC. All uses changed. Do not assume that TYPE
has at most 64 bits.
(count_leading_zeros_32): Assume 0 < X < 2**32, for speed.
All uses changed. Fold the subtraction from 31 into the table.
Paul Eggert [Mon, 7 Oct 2013 06:43:43 +0000 (23:43 -0700)]
count-one-bits: port to MSC; support types wider than 64 bits
The ideas behind the MSC port are stolen from Emacs.
* lib/count-one-bits.c (popcount_support) [_MSC_VER]: New variable.
* lib/count-one-bits.h: Include limits.h, for CHAR_BIT.
Don't include verify.h: it's no longer needed, as types wider than
64 bits are now supported.
(COUNT_ONE_BITS_GENERIC): New macro.
(popcount_supported) [_MSC_VER]: New inline function.
(COUNT_ONE_BITS): Use it. New arg MSC_BUILTIN, for better
performance with MSC. All uses changed. Do not assume that TYPE
has at most 64 bits.
* modules/count-one-bits (Depends-on): Do not depend on 'verify'.
Paul Eggert [Thu, 3 Oct 2013 04:59:38 +0000 (21:59 -0700)]
verify: new macro 'assume'
This is taken from Emacs, and should be generally useful.
* doc/verify.texi (assume): Document it.
* lib/verify.h (assume): New macro.
(__has_builtin): Expand to 0 if not defined.
Eric Blake [Thu, 26 Sep 2013 13:07:07 +0000 (07:07 -0600)]
dup2, dup3: work around another cygwin crasher
Cygwin 1.7.25 can crash due to an off-by-one bug on an attempt to
duplicate a file into the current RLIMIT_NOFILE soft limit, when
that limit is smaller than the hard limit. The intent in the
cygwin code was to allow the dup and auto-increase the soft limit,
which is itself questionable (and which we work around in the
gnulib getdtablesize module); but avoiding the crash is worth
doing even if the soft limit semantics are wrong.
Eric Blake [Thu, 26 Sep 2013 17:26:29 +0000 (11:26 -0600)]
getdtablesize: work around cygwin issue
Cygwin 1.7.25 has a bug that even though it claims to support
RLIMIT_NOFILE inheritance, there is no enforcement of the soft
limit, and getdtablesize() automatically grows until it reaches
the hard limit which cannot be changed by setrlimit(). Best is
to just treat things as an invariant limit, as several other
modules assume that getdtablesize() will not change without an
intervening setrlimit().
* m4/getdtablesize.m4 (gl_FUNC_GETDTABLESIZE): Detect problem.
* modules/getdtablesize (configure.ac): Build replacement.
* m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Set up a witness.
* modules/unistd (Makefile.am): Expose the witness.
* lib/unistd.in.h (getdtablesize): Declare replacement.
* lib/getdtablesize.c (rpl_getdtablesize): Work around it.
* tests/test-getdtablesize.c (main): Test it.
* doc/glibc-functions/getdtablesize.texi (getdtablesize): Document it.
Eric Blake [Tue, 24 Sep 2013 12:33:40 +0000 (06:33 -0600)]
manywarnings: enable nicer gcc warning messages
With gcc 4.3.4, -Wdisabled-optimization is noisy unless you also
use -funit-at-a-time.
With gcc 4.4.7, there is no indication which warning option
triggered a particular message unless you also use
-fdiagnostics-show-option.
Both of these options are default in newer gcc (such as 4.8.1);
but including them in the list of possible warnings makes the
experience nicer on older platforms.
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Older gcc requires
some -f options for optimal warnings.
Paul Eggert [Mon, 23 Sep 2013 17:16:13 +0000 (10:16 -0700)]
warnings: port --enable-gcc-warnings to Solaris Studio 12.3
Problem reported by Dagobert Michelsen via Eric Blake in
<http://lists.gnu.org/archive/html/bug-gnulib/2013-09/msg00052.html>.
* m4/warnings.m4 (gl_COMPILER_OPTION_IF): Use AC_LINK_IFELSE,
not AC_COMPILE_IFELSE.
Eric Blake [Thu, 12 Sep 2013 22:23:31 +0000 (16:23 -0600)]
configmake: support new --runstatedir option
http://lwn.net/Articles/436012/ documents that many distros
are now preferring to use /run rather than /var/run for
storage of pid files and other per-process temporary files
that must not be cleaned out during arbitrary TMPDIR sweeps.
As such, the GNU Coding Standards were recently changed to
recommend a new configure option to make it easy to choose
this directory at configure time, and autoconf 2.70 will
support the new directory by default. This patch adds support
for propagating results of the new option (for new enough
autotools) or providing a sane default (for older autotools)
into C code.
* m4/configmake.m4 (gl_CONFIGMAKE_PREP): Substitute runstatedir
even if autoconf was too old to provide the command line option.
* modules/configmake (Makefile.am): Propagate it to .h file.
Paul Eggert [Mon, 23 Sep 2013 04:25:25 +0000 (21:25 -0700)]
ctype, string: depend on extern-inline
This is needed to complete the recent OS X fixes.
Also, fix related documentation as suggested by Eric Blake.
* doc/posix-functions/isalnum.texi, doc/posix-functions/isalpha.texi:
* doc/posix-functions/isascii.texi, doc/posix-functions/iscntrl.texi:
* doc/posix-functions/isdigit.texi, doc/posix-functions/isgraph.texi:
* doc/posix-functions/islower.texi, doc/posix-functions/isprint.texi:
* doc/posix-functions/ispunct.texi, doc/posix-functions/isspace.texi:
* doc/posix-functions/isupper.texi, doc/posix-functions/isxdigit.texi:
* doc/posix-functions/toascii.texi, doc/posix-functions/tolower.texi:
* doc/posix-functions/toupper.texi:
List the 'ctype' gnulib module.
* doc/posix-functions/strcat.texi, doc/posix-functions/strcpy.texi:
* doc/posix-functions/strncpy.texi:
List the 'string' gnulib module.
* modules/memcpy, modules/memmove, modules/memset (Depends-on):
Add string.
* modules/ctype, modules/string (Depends-on): Add extern-inline.
userspec: support optional parameters to parse_user_spec()
* lib/userspec.c (parse_user_spec): If the GID param is NULL,
then avoid group processing and treat the full spec as a user.
(parse_with_separator): Allow the USERNAME and GROUPNAME to
be optional params (NULL), in which case they're ignored.
* tests/test-userspec.c (main): Ensure NULL params are ignored.
Paul Eggert [Thu, 19 Sep 2013 21:12:29 +0000 (14:12 -0700)]
timespec: new function make_timespec, and new constants
* lib/timespec.h: Incorporate recent changes on the Emacs trunk.
(TIMESPEC_RESOLUTION, LOG10_TIMESPEC_RESOLUTION): New constants.
(make_timespec): New function.
* lib/dtotimespec.c (dtotimespec):
* lib/timespec-add.c (timespec_add):
* lib/timespec-sub.c (timespec_sub):
* lib/utimens.c (validate_timespec):
* lib/utimensat.c (rpl_utimensat):
Use these new constants and functions.