Bruno Haible [Wed, 9 Oct 2024 15:22:59 +0000 (17:22 +0200)]
csharpcomp: Avoid error on Windows.
Reported by Michele Locati <michele@locati.it>.
* build-aux/csharpcomp.sh.in: Don't produce -reference options for DLLs
whose name starts with a lowercase letter or contains '.Native.'.
* lib/csharpcomp.c (name_is_dll): Filter our file names that start with
a lowercase letter or contain '.Native.'.
Bruno Haible [Wed, 9 Oct 2024 01:14:26 +0000 (03:14 +0200)]
csharpcomp-script: Add support for dotnet.
* m4/csharpcomp.m4 (gt_CSHARPCOMP): Support 'dotnet' as implementation.
Set HAVE_DOTNET_SDK, HAVE_DOTNET_CSC.
* build-aux/csharpcomp.sh.in: Add implementations for the cases
$HAVE_DOTNET_SDK = 1 and $HAVE_DOTNET_CSC = 1.
Bruno Haible [Wed, 9 Oct 2024 01:12:42 +0000 (03:12 +0200)]
csharpexec-script: Add support for dotnet.
* m4/csharpexec.m4 (gt_CSHARPEXEC): Support 'dotnet' as implementation.
Set HAVE_DOTNET.
* build-aux/csharpexec.sh.in (func_tmpdir): New function, copied from
build-aux/csharpcomp.sh.in.
Add implementation for the case $HAVE_DOTNET = 1.
* lib/csharpcomp.c (compile_csharp_using_sscli): Allocate the source
options with malloc() always, not sometimes with malloca() and sometimes
with malloc().
Bruno Haible [Mon, 7 Oct 2024 18:25:06 +0000 (20:25 +0200)]
csharpcomp: Improve Cygwin support.
* lib/csharpcomp.c: Include cygpath.h.
(compile_csharp_using_sscli): Convert the file names passed to 'csc' to
native Windows syntax.
* modules/csharpcomp (Depends-on): Add cygpath.
Bruno Haible [Mon, 7 Oct 2024 18:15:44 +0000 (20:15 +0200)]
csharpexec: Improve Cygwin support.
* lib/csharpexec.c: Include cygpath.h.
(execute_csharp_using_sscli): Convert the first 'clix' argument to
native Windows syntax.
* modules/csharpexec (Depends-on): Add cygpath.
Bruno Haible [Mon, 7 Oct 2024 12:30:52 +0000 (14:30 +0200)]
file-has-acl: Fix performance regression on FreeBSD, Cygwin.
* lib/dirent.in.h (_GL_DT_NOTDIR): New macro.
* lib/acl.h (ACL_SYMLINK_FOLLOW): Increase value.
* lib/file-has-acl.c (file_has_aclinfo): Don't call
acl_get_file (name, ACL_TYPE_DEFAULT) if we know that name does not
denote a directory.
(file_has_acl): Extract from *SB the information that NAME is not a
directory.
Bruno Haible [Sun, 6 Oct 2024 23:14:20 +0000 (01:14 +0200)]
javacomp, javaversion: Fix resource leak.
* lib/javacomp.c (execute_and_read_line): When fdopen fails, terminate
the program.
* lib/javaversion.c (execute_and_read_line): Likewise. When we can't
read a single line, call fclose and wait_subprocess, to free resources.
Paul Eggert [Sat, 5 Oct 2024 16:02:23 +0000 (09:02 -0700)]
mktime: fix daylight default
Problem for FreeBSD 14 reported by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2024-10/msg00026.html
* m4/mktime.m4 (gl_PREREQ_MKTIME): Default daylight to 1, not 0.
Paul Eggert [Sat, 5 Oct 2024 04:07:09 +0000 (21:07 -0700)]
mktime: improve thread-safety
* lib/mktime.c (__mktime_internal) [!_LIBC]: Double the number of
probes. Although this isn’t guaranteed to suffice, it should be
good enough for practical applications, and fixing the problem
in general would require access to the underlying tz state lock
which would be hard to do.
Paul Eggert [Sat, 5 Oct 2024 02:01:30 +0000 (19:01 -0700)]
mktime: fix timegm bug that set tmp->tm_isdst
* lib/timegm.c (__timegm64): Omit now-unnecessary initialization
of tm_isdst. Anyway, the initialization was always wrong, since
timegm should not modify *TMP when it fails.
Bruno Haible [Fri, 4 Oct 2024 21:52:13 +0000 (23:52 +0200)]
bcp47: Refactor.
* lib/bcp47.c (SCRIPT_*): New macros.
(default_script_in_territory, default_script_for_language2,
default_script_for_language3): New functions.
(xpg_to_bcp47, bcp47_to_xpg): Use them.
Paul Eggert [Fri, 4 Oct 2024 16:12:42 +0000 (09:12 -0700)]
timegm: ignore incoming tm_isdst
Problem reported by Florian Weimer via a proposed glibc patch in:
https://sourceware.org/pipermail/libc-alpha/2024-October/160310.html
* lib/mktime.c (__mktime_internal): Ignore any tm_isdst request
if the timezone never observes DST, as is the case for timegm.
* m4/mktime.m4 (gl_PREREQ_MKTIME): Define new C macro __daylight
if needed.
Paul Eggert [Fri, 4 Oct 2024 16:10:21 +0000 (09:10 -0700)]
timegm: desync from glibc for now
* config/srclist.txt: Omit time/timegm.c and time/mktime-internal.h
for now, until we can sync glibc from Gnulib.
* lib/mktime-internal.h, lib/timegm.c: Revert autoupdate, going
back to the recent Gnulib-specific version.
Paul Eggert [Fri, 4 Oct 2024 05:06:33 +0000 (22:06 -0700)]
mktime: prefer static_assert to verify
This should work better with glibc.
* lib/mktime.c: Do not include verify.h.
Use static_assert instead of verify.
* modules/mktime (Depends-on): Depend on assert-h, not verify.
Paul Eggert [Fri, 4 Oct 2024 01:29:43 +0000 (18:29 -0700)]
mktime: refactor convert_time
This is to better merge with a future version of glibc.
This merges a glibc patch by Florian Weimer in:
https://sourceware.org/pipermail/libc-alpha/2024-October/160308.html
* lib/mktime.c (convert_time): Accept a boolean flag instead
of a function pointer. All callers changed.
Paul Eggert [Fri, 4 Oct 2024 01:14:30 +0000 (18:14 -0700)]
mktime: improve comment wording
* src/mktime.c: Improve comment wording. glibc has
changed the comment wording, and this improves on
the glibc changes with the result scheduled to be
copied back to glibc.
Paul Eggert [Thu, 3 Oct 2024 00:40:34 +0000 (17:40 -0700)]
file-has-acl: no need for struct stat
Change the API of the new file_has_aclinfo function so that it no
longer needs a struct stat *. In some cases this can help GNU ls
avoid an unnecessary ‘stat’ call for each file it lists, which
can be a significant win.
* lib/acl.h (ACL_SYMLINK_NOFOLLOW): Change from 1 to UCHAR_MAX+1
so that it can be ORed with any d_type value.
* lib/file-has-acl.c: Include dirent.h, for the DT_* macros.
Check that ACL_SYMLINK_NOFOLLOW is outside unsigned char range.
(file_has_aclinfo): Change API so that struct stat is no longer
needed. Instead, the file type (if known) is passed as part of
the flags. All callers changed. Simplify NFSv4 code.
* modules/file-has-acl (Depends-on): Add assert-h for static_assert,
and dirent for DT_* macros.
* tests/test-file-has-acl.c: Include dirent.h.
(main): Adjust to file_has_aclinfo API change.
Briefly test ACL_SYMLINK_FOLLOW.
Paul Eggert [Wed, 2 Oct 2024 22:50:10 +0000 (15:50 -0700)]
dirent: define DT_* macros on all platforms
* lib/dirent.in.h (DT_UNKNOWN, DT_FIFO, DT_CHR, DT_DIR, DT_BLK)
(DT_REG, DT_LNK, DT_SOCK, DT_WHT): Define these on all platforms,
if the system does not already define them. Check that they
have distinct values.
(_GL_DIRENT_S_ISWHT, _GL_DIRENT_S_IFWHT) [!(IFTODT && DTTOIF)]:
New macros.
(IFTODT, DTTOIF): Define if not already defined.
* modules/dirent (Depends-on): Add assert-h, extensions.
Paul Eggert [Wed, 2 Oct 2024 02:51:50 +0000 (19:51 -0700)]
file-has-acl.c: port back to macOS
Problem reported by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2024-10/msg00000.html
* lib/file-has-acl.c (file_has_aclinfo): Don’t attempt to link to
acl_extended_file if !HAVE_ACL_EXTENDED_FILE. Most of this patch
consists of indenting changes; the real change is to use ‘#if’
rather than ‘if’.
Bruno Haible [Wed, 2 Oct 2024 00:23:57 +0000 (02:23 +0200)]
localename-unsafe: Modernize locale name mapping.
* lib/localename-unsafe.c (gl_locale_name_from_win32_LANGID): Return
"az" instead of "az@latin", "az_AZ" instead of "az_AZ@latin",
"ber_MA" instead of "ber_MA@arabic", "ber_DZ" instead of "ber_DZ@latin".
Paul Eggert [Mon, 30 Sep 2024 17:46:57 +0000 (10:46 -0700)]
file-has-acl: improve performance on Linux symlinks
* lib/file-has-acl.c (USE_LINUX_XATTR): Now can be used outside #if.
(file_has_aclinfo): As an optimization on Linux, do not attempt to
get extended attributes on symlinks, as this will always fail.
Also, use lgetxattr (not getxattr) and acl_extended_file_nofollow
(not acl_extended_file) when not following symlinks, to avoid some
races.
Paul Eggert [Sun, 29 Sep 2024 23:13:53 +0000 (16:13 -0700)]
file-has-acl: new function file_has_aclinfo
This is for GNU coreutils, whose ‘ls’ can be made faster with the
new function because it means (for example) that ‘ls’ needn’t call
both listxattr and lgetxattr in the common case where the file has
no extended attributes.
* lib/acl.h (ACL_SYMLINK_FOLLOW): New constant.
(struct aclinfo): New type.
* lib/file-has-acl.c (UNKNOWN_SECURITY_CONTEXT): New constant.
(USE_LINUX_XATTR): New macro. When set:
Include stdint.h (for uint32_t). If also USE_SELINUX_SELINUX_H,
include selinux/selinux.h (for getfilecon).
If HAVE_SMACK, include <sys/smack.h>, otherwise provide substitutes
for smack_smackfs_path and smack_new_label_from_path.
(is_smack_enabled): New function.
(aclinfo_has_xattr): Rename from have_xattr and make it extern.
Use struct aclinfo const * arg instead of char const * and ssize_t.
Work even if ai->size < 0. Supply a no-op macro on platforms
lacking xattr.
(get_aclinfo): New static function, much of it taken from
coreutils/src/ls.c.
(file_has_aclinfo): New function, which generalizes file_has_acl
to provide more info. Its body is taken from the old file_has_acl
with new stuff from ls.c.
(file_has_acl): Use it.
(aclinfo_scontext_free, aclinfo_free): Nwew functions, if not
already no-op macros.
* m4/acl.m4 (gl_FUNC_ACL_ARG): Add --without-libsmack option.
(gl_FILE_HAS_ACL): Check for libsmack, selinux.
* m4/selinux-selinux-h.m4 (gl_CHECK_HEADER_SELINUX_SELINUX_H):
New macro, for use by file-has-acl. Rename HAVE_SELINUX_SELINUX_H
to USE_SELINUX_SELINUX_H to avoid confusion as to whether we have
<selinux/selinux.h>; all uses changed.
(gl_HEADERS_SELINUX_SELINUX_H): Use the new macro.
* modules/file-has-acl (Files): Add m4/selinux-selinux-h.m4.
(Depends-on): Add errno, ssize_t.
* tests/test-file-has-acl.c (main): Add a little test for
file_has_aclinfo.
Bruno Haible [Thu, 26 Sep 2024 00:02:56 +0000 (02:02 +0200)]
relocatable-lib-lgpl: Add support for mingw builds on Cygwin hosts.
Reported by Michele Locati <michele@locati.it> in
<https://lists.gnu.org/archive/html/bug-gettext/2024-09/msg00033.html>.
* m4/relocatable-lib.m4 (gl_RELOCATABLE_LIBRARY_BODY): Use
gl_BUILD_TO_HOST on the value of INSTALLPREFIX.
* modules/relocatable-lib (Files): Add m4/build-to-host.m4.
* modules/relocatable-lib-lgpl (Files): Likewise.
* modules/relocatable-prog-wrapper (Files): Likewise.
Bruno Haible [Wed, 25 Sep 2024 23:33:45 +0000 (01:33 +0200)]
build-to-host.m4: Add some convenience macros.
Reported by Michele Locati <michele@locati.it> in
<https://lists.gnu.org/archive/html/bug-gettext/2024-09/msg00033.html>.
* m4/build-to-host.m4 (gl_BUILD_TO_HOST_BINDIR, gl_BUILD_TO_HOST_LIBDIR,
gl_BUILD_TO_HOST_LIBEXECDIR, gl_BUILD_TO_HOST_LOCALEDIR,
gl_BUILD_TO_HOST_PKGDATADIR, gl_BUILD_TO_HOST_PKGLIBDIR): New macros.
* m4/gettext.m4 (AM_GNU_GETTEXT): Invoke gl_BUILD_TO_HOST_LOCALEDIR.
* doc/relocatable-maint.texi (Supporting Relocation): Suggest to use the
*dir_c_make variables and explain how to get them.
Bruno Haible [Wed, 25 Sep 2024 15:19:41 +0000 (17:19 +0200)]
string-buffer: Add more API.
* lib/string-buffer.h: Include string-desc.h.
(sb_append1, sb_append_desc): New declarations.
(sb_append_c): Renamed from sb_append.
(sb_contents, sb_contents_c, sb_dupfree): New declarations.
(sb_dupfree_c): Renamed from sb_dupfree.
* lib/string-buffer.c (sb_append1, sb_append_desc): New functions.
(sb_append_c): Renamed from sb_append.
(sb_contents, sb_contents_c, sb_dupfree): New functions.
(sb_dupfree_c): Renamed from sb_dupfree. Optimize.
* modules/string-buffer (Depends-on): Add string-desc.
* tests/test-string-buffer.c (main): Use sb_append_c instead of
sb_append. Use sb_dupfree_c instead of sb_dupfree. Test also sb_append1,
sb_append_desc, sb_contents.
* NEWS: Mention the changes.
Bruno Haible [Wed, 25 Sep 2024 14:21:12 +0000 (16:21 +0200)]
string-buffer: Enable resource leak warnings from clang.
* m4/gnulib-common.m4 (gl_COMMON_BODY): Define the macros
_GL_ATTRIBUTE_CAPABILITY_TYPE, _GL_ATTRIBUTE_ACQUIRE_CAPABILITY,
_GL_ATTRIBUTE_RELEASE_CAPABILITY.
* lib/string-buffer.h (sb_heap_allocated_pointer_t): New type.
(struct string_buffer): Use it.
(sb_init): Mark with _GL_ATTRIBUTE_ACQUIRE_CAPABILITY.
(sb_free, sb_dupfree): Mark with _GL_ATTRIBUTE_RELEASE_CAPABILITY.
* lib/string-buffer.c: Silence the -Wthread-safety warnings in this
compilation unit.
Bruno Haible [Tue, 24 Sep 2024 16:31:49 +0000 (18:31 +0200)]
string-buffer: Remove INT_MAX limitation.
* lib/string-buffer.h (sb_appendvf, sb_appendf): Document that errno is
set upon failure.
* lib/string-buffer-printf.c: Include <errno.h>.
(sb_appendvf): Call vsnzprintf instead of vsnprintf. Ensure errno is
set upon failure.
(sb_appendf): Likewise.
* modules/string-buffer (Depends-on): Add vsnzprintf-posix. Remove
vsnprintf-posix.
* tests/test-string-buffer.c (main): Test error code from sb_appendf.
Bruno Haible [Tue, 24 Sep 2024 15:28:07 +0000 (17:28 +0200)]
string-buffer: Link to vasnprintf implementation only when needed.
* lib/string-buffer-printf.c: New file, extracted from
lib/string-buffer.c.
* lib/string-buffer.c: Don't include <stdarg.h>.
(sb_ensure_more_bytes): Declare. Make non-static.
(sb_appendvf, sb_appendf): Moved to lib/string-buffer-printf.c.
* modules/string-buffer (Files): Add lib/string-buffer-printf.c.
(Makefile.am): Arrange to compile string-buffer-printf.c.
Bruno Haible [Tue, 24 Sep 2024 10:30:54 +0000 (12:30 +0200)]
sf-istream: New module.
* lib/sf-istream.h: New file.
* lib/sf-istream.c: New file.
* modules/sf-istream: New file.
* doc/posix-functions/fmemopen.texi: Mention the new module.
Bruno Haible [Mon, 23 Sep 2024 14:03:07 +0000 (16:03 +0200)]
utimens: Fix test failure on NetBSD 10 (regression 2024-09-16).
* lib/utimens.h (utimens): Declare as an override if utimens exists in
libc.
(lutimens): Declare as an override if lutimens exists in libc.
* lib/utimens.c (is_valid_timespec, is_valid_timespecs): New functions,
extracted from validate_timespec.
(validate_timespec): Call is_valid_timespecs.
(utimens, lutimens): On NetBSD, validate the argument before calling
NetBSD's libc function.
* tests/test-utimens-common.h (check_ctime): Set to -1 on NetBSD.
Paul Eggert [Sat, 21 Sep 2024 02:24:39 +0000 (19:24 -0700)]
sigsegv-tests: port to GCC 14
GCC 14 on x86-64 with -O2 apparently outsmarts our test for null
pointer dereference, and this is something the C standard allows.
Fix the test by putting ‘volatile’ at the right place.
* tests/test-sigsegv-catch-stackoverflow2.c (null_pointer):
Make it a volatile pointer, not a pointer to volatile.
Also, rename from null_pointer_to_volatile_int; use changed.
Paul Eggert [Tue, 17 Sep 2024 06:55:37 +0000 (23:55 -0700)]
utimens: port to NetBSD-10.99.12/amd64
On this platform, <sys/time.h> declares utimens and lutimens and the
C library defines them, so we needn’t (and shouldn’t).
Problem reported privately by Thomas Klausner.
* lib/utimens.c (utimens) [HAVE_UTIMENS]: Don’t define.
(lutimens) [HAVE_LUTIMENS]: Don’t define.
* lib/utimens.h [HAVE_UTIMENS || HAVE_LUTIMENS]:
Include <sys/time.h>, for NetBSD’s declaration of utimens and lutimens.
(utimens) [HAVE_UTIMENS]: Don’t declare.
(lutimens) [HAVE_LUTIMENS]: Don’t declare.
* m4/utimens.m4 (gl_UTIMENS): Check for utimens, lutimens.
Paul Eggert [Mon, 16 Sep 2024 18:12:24 +0000 (11:12 -0700)]
parse-datetime no longer depends on nstrftime
I discovered this unnecessary dependency when debugging
GNU Patch.
* lib/parse-datetime.y:
(populate_local_time_zone_table) [!HAVE_STRUCT_TM_TM_ZONE]:
(debug_strfdatetime): Use strftime not nstrftime,
as we don’t need nstrftime’s extensions or bug fixes.
* modules/parse-datetime (Depends-on): Remove nstrftime.
Also remove setenv, unsetenv, timegm, as this module
no longer depends on them directly.
Paul Eggert [Mon, 16 Sep 2024 16:45:36 +0000 (09:45 -0700)]
Don’t port July [[...]] changes to C89
Yesterday’s changes to port to C17 and earlier were intrusive,
since they twice replaced one macro with two. Revert the macro
definitions to what they were before yesterday, and instead change
callers so that they always have four arguments even if the last
one is empty. Although this change requires C99 or later, that’s
safe nowadays. Suggested by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2024-09/msg00079.html
* lib/c++defs.h (_GL_FUNCDECL_RPL, _GL_FUNCDECL_SYS):
Revert yesterday’s changes. All callers changed.
Add comments explaining the required comma before missing attrs.