Bruno Haible [Fri, 10 May 2019 14:08:38 +0000 (16:08 +0200)]
base64: Avoid false positive warning from Coverity.
Reported by Kamil Dudka <kdudka@redhat.com>.
Idea by Paul Eggert.
* lib/base64.c (base64_encode_fast, base64_encode): Add a no-op
'& 0x3f' to the array index expressions. This convinces Coverity that
there is no out-of-bounds array reference, regardless of the input.
Paul Eggert [Thu, 9 May 2019 15:57:56 +0000 (08:57 -0700)]
Support C2X and C++17 static_assert
C2X and C++17 finally added support for a simple, single-argument
‘static_assert’ that implements what the Gnulib ‘verify’ macro was
doing back in 2005. Implement static_assert on older platforms.
The only remaining advantage of ‘verify’ is a shorter name.
* doc/posix-headers/assert.texi (assert.h):
* doc/verify.texi (Compile-time Assertions):
Modernize for C2X and C++17.
* lib/verify.h (_GL_HAVE__STATIC_ASSERT1, _GL_HAVE_STATIC_ASSERT1):
New macros.
(_GL_HAVE__STATIC_ASSERT): Remove.
(_GL_HAVE__STATIC_ASSERT): Rely more heavily on __STDC_VERSION__.
(_GL_VERIFY_TRUE, _GL_VERIFY_TYPE): Remove 2nd arg, the diagnostic
string. All callers changed.
(_GL_VERIFY): Require 3 or more args, of which only the first 2
are used. All callers changed.
(_Static_assert): Allow either 1 or 2 args, and define if
!_GL_HAVE__STATIC_ASSERT1 instead of defining if
!_GL_HAVE__STATIC_ASSERT.
(static_assert): Define if !_GL_HAVE_STATIC_ASSERT1 instead
of defining if !_GL_HAVE_STATIC_ASSERT.
(verify_expr, verify): Don’t bother trying to copy the expression
into the diagnostic, since 1-argument static_assert doesn’t.
(verify): Prefer 1-argument _Static_assert if it works.
* m4/assert_h.m4 (gl_ASSERT_H): Check for 1-argument static_assert.
Bruno Haible [Sun, 5 May 2019 11:18:23 +0000 (13:18 +0200)]
wcwidth: Ensure width 1, not 2, for ambiguous characters.
Reported by Kiyoshi KANAZAWA <yoi_no_myoujou@yahoo.co.jp>
via Akim Demaille <akim.demaille@gmail.com>.
* m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Check the width of U+2202. Use an
en_US.UTF-8 locale, since that is more likely to be present than an
fr_FR.UTF-8 locale.
* tests/test-wcwidth.c (main): Check the width of U+2202.
* doc/posix-functions/wcwidth.texi: Mention the issue.
Bruno Haible [Sun, 28 Apr 2019 09:21:41 +0000 (11:21 +0200)]
tls tests: Prevent that the test takes too long.
* tests/test-tls.c: Include <signal.h>, <unistd.h>.
(main): Let the test fail if it takes more than 10 minutes.
* modules/tls-tests (configure.ac): Test whether 'alarm' is declared.
Bruno Haible [Sat, 27 Apr 2019 22:19:33 +0000 (00:19 +0200)]
lock tests: Prevent that the test takes too long.
* tests/test-lock.c: Include <signal.h>, <unistd.h>.
(main): Let the test fail if it takes more than 10 minutes.
* modules/lock-tests (configure.ac): Test whether 'alarm' is declared.
* lib/argmatch.h, lib/argmatch.c (argmatch, argmatch_valid)
(__xargmatch_internal, argmatch_to_argument): Use void* for pointers
to "values", keep char* for strings.
Bernhard Voelker [Thu, 18 Apr 2019 21:04:26 +0000 (23:04 +0200)]
di-set: allow free with 'ino_map' being NULL
* lib/di-set.c (di_set_free): Avoid ino_map_free() when dis->ino_map
is NULL. Bug introduced in commit 3703dbbe88dd.
* tests/test-di-set.c: Add di_set_free() right after di_set_alloc()
as a test.
mountlist: make parsing /proc/self/mountinfo more robust
Cater for the following issues with mountinfo parsing (the first
one was reported by Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
in <https://bugs.gnu.org/35137>).
1. The fields source, target, mntroot and fstype may contain characters
like '\r'; sscanf(3) fails to read such values with the %s format
specifier because it would stop at such characters.
Example: "mount -t tmpfs tmpfs /foo^Mbar".
The only true separator in that file is the ' ' character.
2. The source field may be an empty string, which happens e.g. with
"mount -t tmpfs '' /target".
3. The fstype field may contain mangled characters as well which need
unescaping.
* lib/mountlist.c (terminate_at_blank): Add utility function.
(read_file_system_list): In the block trying to read the mountinfo file,
avoid using sscanf(3) with %s format; instead, parse the above fields
separated by spaces one by one.
This also handles the case when the source field is an empty string.
Unescape the fstype field.
Bruno Haible [Sun, 24 Mar 2019 22:12:03 +0000 (23:12 +0100)]
term-style-control: New module.
* lib/term-style-control.h: New file, based on libtextstyle's
term-ostream.oo.h and term-ostream.oo.c.
* lib/term-style-control.c: New file, based on libtextstyle's
term-ostream.oo.c.
* modules/term-style-control: New file.
Bruno Haible [Sat, 23 Mar 2019 20:39:37 +0000 (21:39 +0100)]
futimens: Document musl libc bug.
* doc/posix-functions/futimens.texi: Mention the bug.
* m4/futimens.m4 (gl_FUNC_FUTIMENS): Require AC_CANONICAL_HOST. When
cross-compiling, guess no on glibc and musl systems.
Akim Demaille [Mon, 18 Mar 2019 17:27:27 +0000 (18:27 +0100)]
bitset: expose bitset_resize
* lib/bitset.h (bitset_resize): Bounce on the polymorphic implementation.
* tests/test-bitset.c (check_attributes): Check bitset_resize.
(main): Use a variable bitset as reference, since fixed does not support resize.
Bruno Haible [Tue, 19 Mar 2019 23:37:52 +0000 (00:37 +0100)]
libtextstyle-optional: Add tests.
* tests/test-libtextstyle.c: New file, based on libtextstyle's
adhoc-tests/hello.c.
* tests/test-libtextstyle-default.css: New file, copied from
libtextstyle's adhoc-tests/hello-default.css.
* modules/libtextstyle-optional-tests: New file.
Bruno Haible [Tue, 19 Mar 2019 23:35:11 +0000 (00:35 +0100)]
libtextstyle-optional: New module.
* lib/textstyle.in.h: New file, based on libtextstyle's textstyle.h.
* m4/libtextstyle-optional.m4: New file, based on m4/libtextstyle.m4.
* modules/libtextstyle-optional: New file.
Bruno Haible [Tue, 19 Mar 2019 22:32:42 +0000 (23:32 +0100)]
Help making signal handlers more reliable.
* m4/gnulib-common.m4 (gl_COMMON_BODY): Emit definition of
_GL_ASYNC_SAFE into config.h.
* lib/nanosleep.c (sighandler): Mark as _GL_ASYNC_SAFE.
* lib/fatal-signal.h (at_fatal_signal): Add _GL_ASYNC_SAFE marker to
argument.
* lib/fatal-signal.c (action_t, uninstall_handlers,
fatal_signal_handler): Mark as _GL_ASYNC_SAFE.
* lib/clean-temp.c (cleanup_action): Mark as _GL_ASYNC_SAFE.
* lib/wait-process.c (cleanup_slaves, cleanup_slaves_action): Mark as
_GL_ASYNC_SAFE.
* lib/c-stack.h (c_stack_action): Add _GL_ASYNC_SAFE marker to argument.
* lib/c-stack.c: Add _GL_ASYNC_SAFE markers.
Akim Demaille [Sat, 16 Mar 2019 16:16:48 +0000 (17:16 +0100)]
bitset: fix overflows
Reported by Bruno Haible.
https://lists.gnu.org/archive/html/bug-gnulib/2019-03/msg00017.html
* lib/bitset/table.c (tbitset_test): last_bit is the position of
the bit in the array of bitset_word, so be sure to take its modulo
number-of-bits-in-bitset-word (i.e., EBITSET_ELT_WORDS).
* lib/bitset/list.c (lbitset_unused_clear): Likewise.
Bruno Haible [Sat, 16 Mar 2019 21:56:21 +0000 (22:56 +0100)]
fatal-signal: Pass the signal number to the action.
* lib/fatal-signal.h (at_fatal_signal): Change the signature.
* lib/fatal-signal.c (action_t): Take the signal number as parameter.
(fatal_signal_handler): Pass the signal number to the action.
* lib/clean-temp.c (cleanup_action): Renamed from cleanup. Take the
signal number as parameter.
(create_temp_dir): Update.
* lib/wait-process.c (cleanup_slaves_action): New function.
(register_slave_subprocess): Update at_fatal_signal invocation.
* NEWS: Mention the change.
Bruno Haible [Thu, 14 Mar 2019 22:54:28 +0000 (23:54 +0100)]
isatty: Make it return true in Cygwin consoles on native Windows.
* lib/isatty.c: Include <string.h>.
(GetProcAddress): New macro.
(GetNamedPipeClientProcessIdFuncType): New type.
(GetNamedPipeClientProcessIdFunc): New variable.
(QueryFullProcessImageNameFuncType): New type.
(QueryFullProcessImageNameFunc): New variable.
(initialized): New variable.
(initialize): New function.
(IsCygwinConsoleHandle): New function.
(isatty): Invoke it.
* doc/posix-functions/isatty.texi: Mention the issue.
Paul Eggert [Mon, 11 Mar 2019 23:40:29 +0000 (16:40 -0700)]
strtod: fix clash with strtold
Problem reported for RHEL 5 by Jesse Caldwell (Bug#34817).
* lib/strtod.c (compute_minus_zero, minus_zero):
Simplify by remving the macro / external variable,
and having just a function. User changed. This avoids
the need for an external variable that might clash.
Bruno Haible [Sun, 10 Mar 2019 19:39:34 +0000 (20:39 +0100)]
alloca-opt: Fix conflict mingw's new <alloca.h> file.
Reported by Eli Zaretskii <eliz@gnu.org>.
* lib/alloca.in.h: On mingw systems that have <alloca.h>, include that.
* m4/alloca.m4 (gl_FUNC_ALLOCA): Set HAVE_ALLOCA_H.
* modules/alloca-opt (Makefile.am): Substitute HAVE_ALLOCA_H.
* lib/get-rusage-as.c (get_rusage_as): When compiled by
"gcc -fsanitize=thread", don't try get_rusage_as_via_setrlimit.
* tests/test-pthread_sigmask2.c (main): Clean up the killer_thread
before exiting.
Jim Meyering [Sun, 10 Mar 2019 05:38:03 +0000 (21:38 -0800)]
test-userspec.c: don't print NULL
* tests/test-userspec.c (main): A test release of gcc,
9.0.1 20190310, warned that this test would attempt to
print a NULL pointer via a %s printf format. Fix that
and remove the unnecessary preceding "!diag" conjunct.
Also add a comment.
Bruno Haible [Sat, 9 Mar 2019 22:30:40 +0000 (23:30 +0100)]
strfmon_l: Fix -fsanitize=address finding.
* lib/strfmon_l.c: Include <errno.h>, <stdbool.h>, <stdlib.h>,
<string.h>.
(MAX_ARGS): Renamed from MAX_ARG_WORDS.
(directive_t, directives_t): New types.
(fmon_parse): New function.
(rpl_strfmon_l): Don't call va_arg more often than needed for the
format string. Consume 'long double' arguments in places where the
format string indicates so.
* modules/strfmon_l (Depends-on): Add 'stdbool'.
Bruno Haible [Sat, 9 Mar 2019 19:32:25 +0000 (20:32 +0100)]
Fix undefined behaviour.
* lib/bitrotate.h (rotl16, rotr16, rotl8, rotr8): Case x to
'unsigned int', to avoid shift operations on 'int'.
* lib/xmemdup0.c (xmemdup0): Don't invoke memcpy with a zero size.
* tests/test-count-leading-zeros.c (main): Use a random number that has
as many bits as TYPE, not only 2*15 or 2*31 bits.
* tests/test-count-trailing-zeros.c (main): Likewise.
* tests/test-count-one-bits.c (main): Likewise.
* tests/test-memmem.c: Don't include "null-ptr.h".
(main): Use zerosize_ptr() instead of null_ptr().
* modules/memmem-tests (Files): Remove tests/null-ptr.h.
Paul Eggert [Tue, 5 Mar 2019 23:05:33 +0000 (15:05 -0800)]
git-version-gen: fix --version copyright year
* build-aux/git-version-gen, build-aux/move-if-change (version):
--version output copyright year is now taken from script year,
so that it no longer needs to be updated by hand.