]> git.eshelyaron.com Git - emacs.git/commitdiff
Update from Gnulib by running admin/merge-gnulib
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 17 Dec 2024 22:02:41 +0000 (14:02 -0800)
committerEshel Yaron <me@eshelyaron.com>
Mon, 23 Dec 2024 15:12:29 +0000 (16:12 +0100)
* admin/merge-gnulib (AVOIDED_MODULES): Avoid gnulib-i18n.
* lib/stdlib.c, m4/selinux-selinux-h.m4:
New files, taken from Gnulib.

(cherry picked from commit b1e5f6d6ef8432a9cce0664238de72d387730bd1)

172 files changed:
admin/merge-gnulib
build-aux/install-sh
lib/acl-internal.c
lib/acl.h
lib/dirent.in.h
lib/file-has-acl.c
lib/getopt-cdefs.in.h
lib/getopt-pfx-core.h
lib/getopt.c
lib/gettext.h
lib/gnulib.mk.in
lib/malloc.c
lib/md5-stream.c
lib/md5.h
lib/memset_explicit.c
lib/mini-gmp.c
lib/mini-gmp.h
lib/mktime-internal.h
lib/mktime.c
lib/nproc.c
lib/pipe2.c
lib/realloc.c
lib/regex.h
lib/regex_internal.c
lib/regex_internal.h
lib/stdio-impl.h
lib/stdlib.c [new file with mode: 0644]
lib/stdlib.in.h
lib/timegm.c
lib/unistd.in.h
lib/utimens.c
lib/utimens.h
m4/00gnulib.m4
m4/__inline.m4
m4/absolute-header.m4
m4/acl.m4
m4/alloca.m4
m4/assert_h.m4
m4/builtin-expect.m4
m4/byteswap.m4
m4/c-bool.m4
m4/canonicalize.m4
m4/clock_time.m4
m4/codeset.m4
m4/copy-file-range.m4
m4/d-type.m4
m4/dirent_h.m4
m4/dirfd.m4
m4/double-slash-root.m4
m4/dup2.m4
m4/endian_h.m4
m4/environ.m4
m4/errno_h.m4
m4/euidaccess.m4
m4/execinfo.m4
m4/extensions-aix.m4
m4/extensions.m4
m4/extern-inline.m4
m4/faccessat.m4
m4/fchmodat.m4
m4/fcntl.m4
m4/fcntl_h.m4
m4/fdopendir.m4
m4/filemode.m4
m4/flexmember.m4
m4/fpending.m4
m4/fpieee.m4
m4/free.m4
m4/fstatat.m4
m4/fsusage.m4
m4/fsync.m4
m4/futimens.m4
m4/getdelim.m4
m4/getdtablesize.m4
m4/getgroups.m4
m4/getline.m4
m4/getloadavg.m4
m4/getopt.m4
m4/getrandom.m4
m4/gettime.m4
m4/gettimeofday.m4
m4/gnulib-common.m4
m4/gnulib-comp.m4
m4/group-member.m4
m4/ieee754-h.m4
m4/include_next.m4
m4/inttypes.m4
m4/largefile.m4
m4/lchmod.m4
m4/libgmp.m4
m4/limits-h.m4
m4/locale-en.m4
m4/lstat.m4
m4/malloc.m4
m4/manywarnings.m4
m4/mbstate_t.m4
m4/md5.m4
m4/memmem.m4
m4/mempcpy.m4
m4/memrchr.m4
m4/memset_explicit.m4
m4/minmax.m4
m4/mkostemp.m4
m4/mktime.m4
m4/mode_t.m4
m4/multiarch.m4
m4/musl.m4
m4/nanosleep.m4
m4/nocrash.m4
m4/nproc.m4
m4/nstrftime.m4
m4/off_t.m4
m4/open-cloexec.m4
m4/open-slash.m4
m4/open.m4
m4/pathmax.m4
m4/pid_t.m4
m4/pipe2.m4
m4/pselect.m4
m4/pthread_sigmask.m4
m4/rawmemchr.m4
m4/readlink.m4
m4/readlinkat.m4
m4/readutmp.m4
m4/realloc.m4
m4/regex.m4
m4/selinux-selinux-h.m4 [new file with mode: 0644]
m4/sha1.m4
m4/sha256.m4
m4/sha512.m4
m4/sig2str.m4
m4/sigdescr_np.m4
m4/signal_h.m4
m4/socklen.m4
m4/ssize_t.m4
m4/stat-time.m4
m4/stdalign.m4
m4/stdbit_h.m4
m4/stddef_h.m4
m4/stdint.m4
m4/stdio_h.m4
m4/stdlib_h.m4
m4/stpcpy.m4
m4/string_h.m4
m4/strnlen.m4
m4/strtoimax.m4
m4/strtoll.m4
m4/symlink.m4
m4/sys_cdefs_h.m4
m4/sys_random_h.m4
m4/sys_select_h.m4
m4/sys_socket_h.m4
m4/sys_stat_h.m4
m4/sys_time_h.m4
m4/sys_types_h.m4
m4/tempname.m4
m4/time_h.m4
m4/time_r.m4
m4/time_rz.m4
m4/timegm.m4
m4/timer_time.m4
m4/timespec.m4
m4/tm_gmtoff.m4
m4/unistd_h.m4
m4/unlocked-io.m4
m4/utimens.m4
m4/utimensat.m4
m4/utimes.m4
m4/vararrays.m4
m4/warnings.m4
m4/xattr.m4
m4/zzgnulib.m4

index 0c7de65a323ada34698401ea6e0d0d78acefb378..7b718809ae0cdf95a54d83c622e139d2c82820e2 100755 (executable)
@@ -53,7 +53,7 @@ GNULIB_MODULES='
 '
 
 AVOIDED_MODULES='
-  access btowc chmod close crypto/af_alg dup fchdir fstat
+  access btowc chmod close crypto/af_alg dup fchdir fstat gnulib-i18n
   iswblank iswctype iswdigit iswxdigit langinfo libgmp-mpq
   localename-unsafe-limited lock
   mbrtowc mbsinit memchr mkdir msvc-inval msvc-nothrow nl_langinfo
index b1d7a6f67f61f9fb53b653d557bdef8fbc1e20e0..8a76989bbc4603dc76dca5b84ad909572bd0b1f9 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2024-06-19.01; # UTC
+scriptversion=2024-12-03.03; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -533,7 +533,7 @@ do
 done
 
 # Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp nil t)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
 # time-stamp-time-zone: "UTC0"
index ae5398306af2fd306b262753b76e6f22560c5b31..b729126118a7668942e094e13a9a9bb17d788739 100644 (file)
 
 #include <config.h>
 
-#include "acl.h"
-
+/* Specification.  */
+#define ACL_INTERNAL_INLINE _GL_EXTERN_INLINE
 #include "acl-internal.h"
 
+#include "acl.h"
+
 #if defined __CYGWIN__
 # include <sys/types.h>
 # include <grp.h>
index 475231c2db7e3e5165af9412fa86f0e109cf5f8f..1d52345c6681b338180b46c8e544a72b4fbd4348 100644 (file)
--- a/lib/acl.h
+++ b/lib/acl.h
 extern "C" {
 #endif
 
+/* file_has_acl flags guaranteed to not collide with any <dirent.h>
+   DT_* or _GL_DT_* value.  */
+enum
+  {
+    /* Get scontext information as well.  */
+    ACL_GET_SCONTEXT = 0x10000,
+
+    /* Follow symlinks.  */
+    ACL_SYMLINK_FOLLOW = 0x20000,
+  };
+
+/* Information about an ACL.  */
+struct aclinfo
+{
+  /* If 'size' is nonnegative, a buffer holding the concatenation
+     of extended attribute names, each terminated by NUL
+     (either u.__gl_acl_ch, or heap-allocated).  */
+  char *buf;
+
+  /* The number of useful bytes at the start of buf, counting trailing NULs.
+     If negative, there was an error in getting the ACL info,
+     and u.err is the corresponding errno.  */
+  ssize_t size;
+
+  /* Security context string.  Do not modify its contents.  */
+  char *scontext;
+  /* Security context errno value.  It is zero if there was no
+     error getting the security context.  When nonzero, scontext is "?".  */
+  int scontext_err;
+
+  union
+  {
+    /* An errno value, when there was an error getting the ACL info.  */
+    int err;
+
+    /* A small array of char, big enough for most listxattr results.
+       The size is somewhat arbitrary; it equals the max length of a
+       trivial NFSv4 ACL (a size used by file-has-acl.c in 2023-2024
+       but no longer relevant now), and a different value might be
+       better once experience is gained.  For internal use only.  */
+    char __gl_acl_ch[152];
+  } u;
+};
 
 bool acl_errno_valid (int) _GL_ATTRIBUTE_CONST;
 int file_has_acl (char const *, struct stat const *);
+int file_has_aclinfo (char const *restrict, struct aclinfo *restrict, int);
+
+#if HAVE_LINUX_XATTR_H && HAVE_LISTXATTR
+bool aclinfo_has_xattr (struct aclinfo const *, char const *)
+  _GL_ATTRIBUTE_PURE;
+void aclinfo_free (struct aclinfo *);
+#else
+# define aclinfo_has_xattr(ai, xattr) false
+# define aclinfo_free(ai) ((void) 0)
+#endif
+#if (HAVE_LINUX_XATTR_H && HAVE_LISTXATTR \
+     && (HAVE_SMACK || USE_SELINUX_SELINUX_H))
+void aclinfo_scontext_free (char *);
+#else
+# define aclinfo_scontext_free(s) ((void) 0)
+#endif
 
 int qset_acl (char const *, int, mode_t);
 int xset_acl (char const *, int, mode_t);
index 7ba8fc64d896504efbb6ea7ef4df53462097c172..a0ac39b4968fe211709d43b961b48af17043978a 100644 (file)
@@ -46,20 +46,95 @@ struct dirent
   char d_type;
   char d_name[1];
 };
-/* Possible values for 'd_type'.  */
-#  define DT_UNKNOWN 0
-#  define DT_FIFO    1          /* FIFO */
-#  define DT_CHR     2          /* character device */
-#  define DT_DIR     4          /* directory */
-#  define DT_BLK     6          /* block device */
-#  define DT_REG     8          /* regular file */
-#  define DT_LNK    10          /* symbolic link */
-#  define DT_SOCK   12          /* socket */
-#  define DT_WHT    14          /* whiteout */
 #  define GNULIB_defined_struct_dirent 1
 # endif
 #endif
 
+/* 'd_type' macros specified in GNU, i.e., POSIX.1-2024 plus DT_WHT,
+   but not (yet) DT_MQ, DT_SEM, DT_SHM, DT_TMO.
+   These macros can be useful even on platforms that do not support
+   d_type or the corresponding file types.
+   The values of these macros are all in the 'unsigned char' range.
+   Default to the Linux values which are also popular elsewhere,
+   and check that all macros have distinct values.  */
+#ifndef DT_UNKNOWN
+# define DT_UNKNOWN 0
+#endif
+#ifndef DT_FIFO
+# define DT_FIFO  1 /* FIFO */
+#endif
+#ifndef DT_CHR
+# define DT_CHR   2 /* character device */
+#endif
+#ifndef DT_DIR
+# define DT_DIR   4 /* directory */
+#endif
+#ifndef DT_BLK
+# define DT_BLK   6 /* block device */
+#endif
+#ifndef DT_REG
+# define DT_REG   8 /* regular file */
+#endif
+#ifndef DT_LNK
+# define DT_LNK  10 /* symbolic link */
+#endif
+#ifndef DT_SOCK
+# define DT_SOCK 12 /* socket */
+#endif
+#ifndef DT_WHT
+# define DT_WHT  14 /* whiteout */
+#endif
+static_assert (DT_UNKNOWN != DT_FIFO && DT_UNKNOWN != DT_CHR
+               && DT_UNKNOWN != DT_BLK && DT_UNKNOWN != DT_REG
+               && DT_UNKNOWN != DT_LNK && DT_UNKNOWN != DT_SOCK
+               && DT_UNKNOWN != DT_WHT
+               && DT_FIFO != DT_CHR && DT_FIFO != DT_BLK && DT_FIFO != DT_REG
+               && DT_FIFO != DT_LNK && DT_FIFO != DT_SOCK && DT_FIFO != DT_WHT
+               && DT_CHR != DT_BLK && DT_CHR != DT_REG && DT_CHR != DT_LNK
+               && DT_CHR != DT_SOCK && DT_CHR != DT_WHT
+               && DT_BLK != DT_REG && DT_BLK != DT_LNK && DT_BLK != DT_SOCK
+               && DT_BLK != DT_WHT
+               && DT_REG != DT_LNK && DT_REG != DT_SOCK && DT_REG != DT_WHT
+               && DT_LNK != DT_SOCK && DT_LNK != DT_WHT
+               && DT_SOCK != DT_WHT);
+
+/* Other optional information about a directory entry.  */
+#define _GL_DT_NOTDIR 0x100   /* Not a directory */
+
+/* Conversion between S_IF* and DT_* file types.  */
+#if ! (defined IFTODT && defined DTTOIF)
+# include <sys/stat.h>
+# ifdef S_ISWHT
+#  define _GL_DIRENT_S_ISWHT(mode) S_ISWHT(mode)
+# else
+#  define _GL_DIRENT_S_ISWHT(mode) 0
+# endif
+# ifdef S_IFWHT
+#  define _GL_DIRENT_S_IFWHT S_IFWHT
+# else
+#  define _GL_DIRENT_S_IFWHT (DT_WHT << 12) /* just a guess */
+# endif
+#endif
+/* Conversion from a 'stat' mode to a DT_* value.  */
+#ifndef IFTODT
+# define IFTODT(mode) \
+   (S_ISREG (mode) ? DT_REG : S_ISDIR (mode) ? DT_DIR \
+    : S_ISLNK (mode) ? DT_LNK : S_ISBLK (mode) ? DT_BLK \
+    : S_ISCHR (mode) ? DT_CHR : S_ISFIFO (mode) ? DT_FIFO \
+    : S_ISSOCK (mode) ? DT_SOCK \
+    : _GL_DIRENT_S_ISWHT (mode) ? DT_WHT : DT_UNKNOWN)
+#endif
+/* Conversion from a DT_* value to a 'stat' mode.  */
+#ifndef DTTOIF
+# define DTTOIF(dirtype) \
+   ((dirtype) == DT_REG ? S_IFREG : (dirtype) == DT_DIR ? S_IFDIR \
+    : (dirtype) == DT_LNK ? S_IFLNK : (dirtype) == DT_BLK ? S_IFBLK \
+    : (dirtype) == DT_CHR ? S_IFCHR :  dirtype == DT_FIFO ? S_IFIFO \
+    : (dirtype) == DT_SOCK ? S_IFSOCK \
+    : (dirtype) == DT_WHT ? _GL_DIRENT_S_IFWHT \
+    : (dirtype) << 12 /* just a guess */)
+#endif
+
 #if !@DIR_HAS_FD_MEMBER@
 # if !GNULIB_defined_DIR
 /* struct gl_directory is a type with a field 'int fd_to_close'.
index 06759a4948c1dea0648cc04c7ca9b052538fd110..7c29f2015894ecb796d753bdb88e8d21e65b6332 100644 (file)
 
 #include "acl.h"
 
+#include <dirent.h>
+#include <limits.h>
+
 #include "acl-internal.h"
 #include "attribute.h"
 #include "minmax.h"
 
-#if USE_ACL && HAVE_LINUX_XATTR_H && HAVE_LISTXATTR
+/* Check the assumption that UCHAR_MAX < INT_MAX.  */
+static_assert (ACL_SYMLINK_FOLLOW & ~ (unsigned char) -1);
+
+static char const UNKNOWN_SECURITY_CONTEXT[] = "?";
+
+#if HAVE_LINUX_XATTR_H && HAVE_LISTXATTR
+# define USE_LINUX_XATTR true
+#else
+# define USE_LINUX_XATTR false
+#endif
+
+#if USE_LINUX_XATTR
+# if USE_SELINUX_SELINUX_H
+#  include <selinux/selinux.h>
+# endif
 # include <stdckdint.h>
+# include <stdint.h>
 # include <string.h>
 # include <arpa/inet.h>
 # include <sys/xattr.h>
 #  define XATTR_NAME_POSIX_ACL_DEFAULT "system.posix_acl_default"
 # endif
 
+# ifdef HAVE_SMACK
+#  include <sys/smack.h>
+# else
+static char const *
+smack_smackfs_path (void)
+{
+  return NULL;
+}
+static ssize_t
+smack_new_label_from_path (MAYBE_UNUSED const char *path,
+                           MAYBE_UNUSED const char *xattr,
+                           MAYBE_UNUSED int follow, MAYBE_UNUSED char **label)
+{
+  return -1;
+}
+# endif
+static bool
+is_smack_enabled (void)
+{
+ return !!smack_smackfs_path ();
+}
+
 enum {
   /* ACE4_ACCESS_ALLOWED_ACE_TYPE = 0x00000000, */
   ACE4_ACCESS_DENIED_ACE_TYPE  = 0x00000001,
   ACE4_IDENTIFIER_GROUP        = 0x00000040
 };
 
-/* Return true if ATTR is in the set represented by the NUL-terminated
-   strings in LISTBUF, which is of size LISTSIZE.  */
+/* Does AI's xattr set contain XATTR?  */
 
-ATTRIBUTE_PURE static bool
-have_xattr (char const *attr, char const *listbuf, ssize_t listsize)
+bool
+aclinfo_has_xattr (struct aclinfo const *ai, char const *xattr)
 {
-  char const *blim = listbuf + listsize;
-  for (char const *b = listbuf; b < blim; b += strlen (b) + 1)
-    for (char const *a = attr; *a == *b; a++, b++)
-      if (!*a)
-        return true;
+  if (0 < ai->size)
+    {
+      char const *blim = ai->buf + ai->size;
+      for (char const *b = ai->buf; b < blim; b += strlen (b) + 1)
+        for (char const *a = xattr; *a == *b; a++, b++)
+          if (!*a)
+            return true;
+    }
   return false;
 }
 
+/* Get attributes of the file NAME into AI, if USE_ACL.
+   If FLAGS & ACL_GET_SCONTEXT, also get security context.
+   If FLAGS & ACL_SYMLINK_FOLLOW, follow symbolic links.  */
+static void
+get_aclinfo (char const *name, struct aclinfo *ai, int flags)
+{
+  int scontext_err = ENOTSUP;
+  ai->buf = ai->u.__gl_acl_ch;
+  ssize_t acl_alloc = sizeof ai->u.__gl_acl_ch;
+
+  if (! (USE_ACL || flags & ACL_GET_SCONTEXT))
+    ai->size = 0;
+  else
+    {
+      ssize_t (*lsxattr) (char const *, char *, size_t)
+        = (flags & ACL_SYMLINK_FOLLOW ? listxattr : llistxattr);
+      while (true)
+        {
+          ai->size = lsxattr (name, ai->buf, acl_alloc);
+          if (0 < ai->size)
+            break;
+          ai->u.err = ai->size < 0 ? errno : 0;
+          if (! (ai->size < 0 && ai->u.err == ERANGE && acl_alloc < SSIZE_MAX))
+            break;
+
+          /* The buffer was too small.  Find how large it should have been.  */
+          ssize_t size = lsxattr (name, NULL, 0);
+          if (size <= 0)
+            {
+              ai->size = size;
+              ai->u.err = size < 0 ? errno : 0;
+              break;
+            }
+
+          /* Grow allocation to at least 'size'.  Grow it by a nontrivial
+             amount, to defend against denial of service by an adversary
+             that fiddles with ACLs.  */
+          if (ai->buf != ai->u.__gl_acl_ch)
+            {
+              free (ai->buf);
+              ai->buf = ai->u.__gl_acl_ch;
+            }
+          if (ckd_add (&acl_alloc, acl_alloc, acl_alloc >> 1))
+            acl_alloc = SSIZE_MAX;
+          if (acl_alloc < size)
+            acl_alloc = size;
+          if (SIZE_MAX < acl_alloc)
+            {
+              ai->u.err = ENOMEM;
+              break;
+            }
+          char *newbuf = malloc (acl_alloc);
+          if (!newbuf)
+            {
+              ai->u.err = errno;
+              break;
+            }
+          ai->buf = newbuf;
+        }
+    }
+
+  if (0 < ai->size && flags & ACL_GET_SCONTEXT)
+    {
+      if (is_smack_enabled ())
+        {
+          if (aclinfo_has_xattr (ai, XATTR_NAME_SMACK))
+            {
+              ssize_t r = smack_new_label_from_path (name, "security.SMACK64",
+                                                     flags & ACL_SYMLINK_FOLLOW,
+                                                     &ai->scontext);
+              scontext_err = r < 0 ? errno : 0;
+            }
+        }
+      else
+        {
+# if USE_SELINUX_SELINUX_H
+          if (aclinfo_has_xattr (ai, XATTR_NAME_SELINUX))
+            {
+              ssize_t r =
+                ((flags & ACL_SYMLINK_FOLLOW ? getfilecon : lgetfilecon)
+                 (name, &ai->scontext));
+              scontext_err = r < 0 ? errno : 0;
+#  ifndef SE_SELINUX_INLINE
+              /* Gnulib's selinux-h module is not in use, so getfilecon and
+                 lgetfilecon can misbehave, be it via an old version of
+                 libselinux where these would return 0 and set the result
+                 context to NULL, or via a modern kernel+lib operating on a
+                 file from a disk whose attributes were set by a kernel from
+                 around 2006.  In that latter case, the functions return a
+                 length of 10 for the "unlabeled" context.  Map both failures
+                 to a return value of -1, and set errno to ENOTSUP in the
+                 first case, and ENODATA in the latter.  */
+              if (r == 0)
+                scontext_err = ENOTSUP;
+              if (r == 10 && memcmp (ai->scontext, "unlabeled", 10) == 0)
+                {
+                  freecon (ai->scontext);
+                  scontext_err = ENODATA;
+                }
+#  endif
+            }
+# endif
+        }
+    }
+  ai->scontext_err = scontext_err;
+  if (scontext_err)
+    ai->scontext = (char *) UNKNOWN_SECURITY_CONTEXT;
+}
+
+# ifndef aclinfo_scontext_free
+/* Free the pointer that file_has_aclinfo put into scontext.
+   However, do nothing if the argument is a null pointer;
+   This lets the caller replace the scontext member with a null pointer if it
+   is willing to own the member and call this function later.  */
+void
+aclinfo_scontext_free (char *scontext)
+{
+  if (scontext != UNKNOWN_SECURITY_CONTEXT)
+    {
+      if (is_smack_enabled ())
+        free (scontext);
+      else if (scontext)
+        freecon (scontext);
+    }
+}
+# endif
+
+/* Free AI's heap storage.  */
+void
+aclinfo_free (struct aclinfo *ai)
+{
+  if (ai->buf != ai->u.__gl_acl_ch)
+    free (ai->buf);
+  aclinfo_scontext_free (ai->scontext);
+}
+
 /* Return 1 if given ACL in XDR format is non-trivial, 0 if it is trivial.
    -1 upon failure to determine it.  Possibly change errno.  Assume that
    the ACL is valid, except avoid undefined behavior even if invalid.
@@ -150,196 +328,183 @@ acl_nfs4_nontrivial (uint32_t *xattr, ssize_t nbytes)
    0 if ACLs are not supported, or if NAME has no or only a base ACL,
    and -1 (setting errno) on error.  Note callers can determine
    if ACLs are not supported as errno is set in that case also.
-   SB must be set to the stat buffer of NAME,
-   obtained through stat() or lstat().  */
-
+   Set *AI to ACL info regardless of return value.
+   FLAGS should be a <dirent.h> d_type value, optionally ORed with
+     - _GL_DT_NOTDIR if it is known that NAME is not a directory,
+     - ACL_GET_SCONTEXT to retrieve security context and return 1 if present,
+     - ACL_SYMLINK_FOLLOW to follow the link if NAME is a symbolic link;
+       otherwise do not follow them if possible.
+   If the d_type value is not known, use DT_UNKNOWN though this may be less
+   efficient.  */
 int
-file_has_acl (char const *name, struct stat const *sb)
+file_has_aclinfo (MAYBE_UNUSED char const *restrict name,
+                  struct aclinfo *restrict ai, int flags)
 {
-#if USE_ACL
-  if (! S_ISLNK (sb->st_mode))
+  MAYBE_UNUSED unsigned char d_type = flags & UCHAR_MAX;
+
+#if USE_LINUX_XATTR
+  int initial_errno = errno;
+  get_aclinfo (name, ai, flags);
+
+  if (ai->size <= 0)
     {
+      errno = ai->size < 0 ? ai->u.err : initial_errno;
+      return ai->size;
+    }
 
-# if HAVE_LINUX_XATTR_H && HAVE_LISTXATTR
-      int initial_errno = errno;
-
-      /* The max length of a trivial NFSv4 ACL is 6 words for owner,
-         6 for group, 7 for everyone, all times 2 because there are
-         both allow and deny ACEs.  There are 6 words for owner
-         because of type, flag, mask, wholen, "OWNER@"+pad and
-         similarly for group; everyone is another word to hold
-         "EVERYONE@".  */
-      typedef uint32_t trivial_NFSv4_xattr_buf[2 * (6 + 6 + 7)];
-
-      /* A buffer large enough to hold any trivial NFSv4 ACL,
-         and also useful as a small array of char.  */
-      union {
-        trivial_NFSv4_xattr_buf xattr;
-        char ch[sizeof (trivial_NFSv4_xattr_buf)];
-      } stackbuf;
-
-      char *listbuf = stackbuf.ch;
-      ssize_t listbufsize = sizeof stackbuf.ch;
-      char *heapbuf = NULL;
-      ssize_t listsize;
-
-      /* Use listxattr first, as this means just one syscall in the
-         typical case where the file lacks an ACL.  Try stackbuf
-         first, falling back on malloc if stackbuf is too small.  */
-      while ((listsize = listxattr (name, listbuf, listbufsize)) < 0
-             && errno == ERANGE)
-        {
-          free (heapbuf);
-          ssize_t newsize = listxattr (name, NULL, 0);
-          if (newsize <= 0)
-            return newsize;
-
-          /* Grow LISTBUFSIZE to at least NEWSIZE.  Grow it by a
-             nontrivial amount too, to defend against denial of
-             service by an adversary that fiddles with ACLs.  */
-          bool overflow = ckd_add (&listbufsize, listbufsize, listbufsize >> 1);
-          listbufsize = MAX (listbufsize, newsize);
-          if (overflow || SIZE_MAX < listbufsize)
-            {
-              errno = ENOMEM;
-              return -1;
-            }
+  /* In Fedora 39, a file can have both NFSv4 and POSIX ACLs,
+     but if it has an NFSv4 ACL that's the one that matters.
+     In earlier Fedora the two types of ACLs were mutually exclusive.
+     Attempt to work correctly on both kinds of systems.  */
+
+  if (!aclinfo_has_xattr (ai, XATTR_NAME_NFSV4_ACL))
+    return
+      (aclinfo_has_xattr (ai, XATTR_NAME_POSIX_ACL_ACCESS)
+       || ((d_type == DT_DIR || d_type == DT_UNKNOWN)
+           && aclinfo_has_xattr (ai, XATTR_NAME_POSIX_ACL_DEFAULT)));
+
+  /* A buffer large enough to hold any trivial NFSv4 ACL.
+     The max length of a trivial NFSv4 ACL is 6 words for owner,
+     6 for group, 7 for everyone, all times 2 because there are both
+     allow and deny ACEs.  There are 6 words for owner because of
+     type, flag, mask, wholen, "OWNER@"+pad and similarly for group;
+     everyone is another word to hold "EVERYONE@".  */
+  uint32_t buf[2 * (6 + 6 + 7)];
+
+  int ret = ((flags & ACL_SYMLINK_FOLLOW ? getxattr : lgetxattr)
+             (name, XATTR_NAME_NFSV4_ACL, buf, sizeof buf));
+  if (ret < 0)
+    switch (errno)
+      {
+      case ENODATA: return 0;
+      case ERANGE : return 1; /* ACL must be nontrivial.  */
+      default: return - acl_errno_valid (errno);
+      }
 
-          listbuf = heapbuf = malloc (listbufsize);
-          if (!listbuf)
-            return -1;
-        }
+  /* It looks like a trivial ACL, but investigate further.  */
+  ret = acl_nfs4_nontrivial (buf, ret);
+  errno = ret < 0 ? EINVAL : initial_errno;
+  return ret;
+
+#else /* !USE_LINUX_XATTR */
+
+  ai->buf = ai->u.__gl_acl_ch;
+  ai->size = -1;
+  ai->u.err = ENOTSUP;
+  ai->scontext = (char *) UNKNOWN_SECURITY_CONTEXT;
+  ai->scontext_err = ENOTSUP;
+
+# if USE_ACL
+#  if HAVE_ACL_GET_FILE
+
+  {
+    /* POSIX 1003.1e (draft 17 -- abandoned) specific version.  */
+    /* Linux, FreeBSD, NetBSD >= 10, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */
+    int ret;
+
+#   if HAVE_ACL_EXTENDED_FILE /* Linux */
+      /* On Linux, acl_extended_file is an optimized function: It only
+         makes two calls to getxattr(), one for ACL_TYPE_ACCESS, one for
+         ACL_TYPE_DEFAULT.  */
+    ret = ((flags & ACL_SYMLINK_FOLLOW
+            ? acl_extended_file
+            : acl_extended_file_nofollow)
+           (name));
+#   elif HAVE_ACL_TYPE_EXTENDED /* Mac OS X */
+    /* On Mac OS X, acl_get_file (name, ACL_TYPE_ACCESS)
+       and acl_get_file (name, ACL_TYPE_DEFAULT)
+       always return NULL / EINVAL.  There is no point in making
+       these two useless calls.  The real ACL is retrieved through
+       acl_get_file (name, ACL_TYPE_EXTENDED).  */
+    acl_t acl = ((flags & ACL_SYMLINK_FOLLOW
+                  ? acl_get_file
+                  : acl_get_link_np)
+                 (name, ACL_TYPE_EXTENDED));
+    if (acl)
+      {
+        ret = acl_extended_nontrivial (acl);
+        acl_free (acl);
+      }
+    else
+      ret = -1;
+#   else /* FreeBSD, NetBSD >= 10, IRIX, Tru64, Cygwin >= 2.5 */
+    acl_t (*acl_get_file_or_link) (char const *, acl_type_t) = acl_get_file;
+#    if HAVE_ACL_GET_LINK_NP /* FreeBSD, NetBSD >= 10 */
+    if (! (flags & ACL_SYMLINK_FOLLOW))
+      acl_get_file_or_link = acl_get_link_np;
+#    endif
 
-      /* In Fedora 39, a file can have both NFSv4 and POSIX ACLs,
-         but if it has an NFSv4 ACL that's the one that matters.
-         In earlier Fedora the two types of ACLs were mutually exclusive.
-         Attempt to work correctly on both kinds of systems.  */
-      bool nfsv4_acl
-        = 0 < listsize && have_xattr (XATTR_NAME_NFSV4_ACL, listbuf, listsize);
-      int ret
-        = (listsize <= 0 ? listsize
-           : (nfsv4_acl
-              || have_xattr (XATTR_NAME_POSIX_ACL_ACCESS, listbuf, listsize)
-              || (S_ISDIR (sb->st_mode)
-                  && have_xattr (XATTR_NAME_POSIX_ACL_DEFAULT,
-                                 listbuf, listsize))));
-      free (heapbuf);
-
-      /* If there is an NFSv4 ACL, follow up with a getxattr syscall
-         to see whether the NFSv4 ACL is nontrivial.  */
-      if (nfsv4_acl)
-        {
-          ret = getxattr (name, XATTR_NAME_NFSV4_ACL,
-                          stackbuf.xattr, sizeof stackbuf.xattr);
-          if (ret < 0)
-            switch (errno)
+    acl_t acl = acl_get_file_or_link (name, ACL_TYPE_ACCESS);
+    if (acl)
+      {
+        ret = acl_access_nontrivial (acl);
+        int saved_errno = errno;
+        acl_free (acl);
+        errno = saved_errno;
+#    if HAVE_ACL_FREE_TEXT /* Tru64 */
+        /* On OSF/1, acl_get_file (name, ACL_TYPE_DEFAULT) always
+           returns NULL with errno not set.  There is no point in
+           making this call.  */
+#    else /* FreeBSD, NetBSD >= 10, IRIX, Cygwin >= 2.5 */
+        /* On Linux, FreeBSD, NetBSD, IRIX,
+               acl_get_file (name, ACL_TYPE_ACCESS)
+           and acl_get_file (name, ACL_TYPE_DEFAULT) on a directory
+           either both succeed or both fail; it depends on the
+           file system.  Therefore there is no point in making the second
+           call if the first one already failed.  */
+        if (ret == 0
+            && (d_type == DT_DIR
+                || (d_type == DT_UNKNOWN && !(flags & _GL_DT_NOTDIR))))
+          {
+            acl = acl_get_file_or_link (name, ACL_TYPE_DEFAULT);
+            if (acl)
               {
-              case ENODATA: return 0;
-              case ERANGE : return 1; /* ACL must be nontrivial.  */
+#     ifdef __CYGWIN__ /* Cygwin >= 2.5 */
+                ret = acl_access_nontrivial (acl);
+                saved_errno = errno;
+                acl_free (acl);
+                errno = saved_errno;
+#     else
+                ret = (0 < acl_entries (acl));
+                acl_free (acl);
+#     endif
               }
-          else
-            {
-              /* It looks like a trivial ACL, but investigate further.  */
-              ret = acl_nfs4_nontrivial (stackbuf.xattr, ret);
-              if (ret < 0)
-                {
-                  errno = EINVAL;
-                  return ret;
-                }
-              errno = initial_errno;
-            }
-        }
-      if (ret < 0)
-        return - acl_errno_valid (errno);
-      return ret;
+            else
+              {
+                ret = -1;
+#     ifdef __CYGWIN__ /* Cygwin >= 2.5 */
+                if (d_type == DT_UNKNOWN)
+                  ret = 0;
+#     endif
+              }
+          }
+#    endif
+      }
+    else
+      ret = -1;
+#   endif
 
-# elif HAVE_ACL_GET_FILE
+    return ret < 0 ? - acl_errno_valid (errno) : ret;
+  }
 
-      /* POSIX 1003.1e (draft 17 -- abandoned) specific version.  */
-      /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */
-      int ret;
+#  else /* !HAVE_ACL_GET_FILE */
 
-      if (HAVE_ACL_EXTENDED_FILE) /* Linux */
-        {
-          /* On Linux, acl_extended_file is an optimized function: It only
-             makes two calls to getxattr(), one for ACL_TYPE_ACCESS, one for
-             ACL_TYPE_DEFAULT.  */
-          ret = acl_extended_file (name);
-        }
-      else /* FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */
-        {
-#  if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */
-          /* On Mac OS X, acl_get_file (name, ACL_TYPE_ACCESS)
-             and acl_get_file (name, ACL_TYPE_DEFAULT)
-             always return NULL / EINVAL.  There is no point in making
-             these two useless calls.  The real ACL is retrieved through
-             acl_get_file (name, ACL_TYPE_EXTENDED).  */
-          acl_t acl = acl_get_file (name, ACL_TYPE_EXTENDED);
-          if (acl)
-            {
-              ret = acl_extended_nontrivial (acl);
-              acl_free (acl);
-            }
-          else
-            ret = -1;
-#  else /* FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */
-          acl_t acl = acl_get_file (name, ACL_TYPE_ACCESS);
-          if (acl)
-            {
-              int saved_errno;
-
-              ret = acl_access_nontrivial (acl);
-              saved_errno = errno;
-              acl_free (acl);
-              errno = saved_errno;
-#   if HAVE_ACL_FREE_TEXT /* Tru64 */
-              /* On OSF/1, acl_get_file (name, ACL_TYPE_DEFAULT) always
-                 returns NULL with errno not set.  There is no point in
-                 making this call.  */
-#   else /* FreeBSD, IRIX, Cygwin >= 2.5 */
-              /* On Linux, FreeBSD, IRIX, acl_get_file (name, ACL_TYPE_ACCESS)
-                 and acl_get_file (name, ACL_TYPE_DEFAULT) on a directory
-                 either both succeed or both fail; it depends on the
-                 file system.  Therefore there is no point in making the second
-                 call if the first one already failed.  */
-              if (ret == 0 && S_ISDIR (sb->st_mode))
-                {
-                  acl = acl_get_file (name, ACL_TYPE_DEFAULT);
-                  if (acl)
-                    {
-#    ifdef __CYGWIN__ /* Cygwin >= 2.5 */
-                      ret = acl_access_nontrivial (acl);
-                      saved_errno = errno;
-                      acl_free (acl);
-                      errno = saved_errno;
-#    else
-                      ret = (0 < acl_entries (acl));
-                      acl_free (acl);
-#    endif
-                    }
-                  else
-                    ret = -1;
-                }
-#   endif
-            }
-          else
-            ret = -1;
-#  endif
-        }
-      if (ret < 0)
-        return - acl_errno_valid (errno);
-      return ret;
+  /* The remaining APIs always follow symlinks and operate on
+     platforms where symlinks do not have ACLs, so skip the APIs if
+     NAME is known to be a symlink.  */
+  if (d_type != DT_LNK)
+    {
 
-# elif HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */
+#   if HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */
 
-#  if defined ACL_NO_TRIVIAL
+#    ifdef ACL_NO_TRIVIAL
 
       /* Solaris 10 (newer version), which has additional API declared in
          <sys/acl.h> (acl_t) and implemented in libsec (acl_set, acl_trivial,
          acl_fromtext, ...).  */
       return acl_trivial (name);
 
-#  else /* Solaris, Cygwin, general case */
+#    else /* Solaris, Cygwin, general case */
 
       /* Solaris 2.5 through Solaris 10, Cygwin, and contemporaneous versions
          of Unixware.  The acl() call returns the access and default ACL both
@@ -374,10 +539,7 @@ file_has_acl (char const *name, struct stat const *sb)
                 entries = malloced =
                   (aclent_t *) malloc (alloc * sizeof (aclent_t));
                 if (entries == NULL)
-                  {
-                    errno = ENOMEM;
-                    return -1;
-                  }
+                  return -1;
                 continue;
               }
             break;
@@ -415,7 +577,7 @@ file_has_acl (char const *name, struct stat const *sb)
         free (malloced);
       }
 
-#   ifdef ACE_GETACL
+#     ifdef ACE_GETACL
       /* Solaris also has a different variant of ACLs, used in ZFS and NFSv4
          file systems (whereas the other ones are used in UFS file systems).  */
       {
@@ -447,10 +609,7 @@ file_has_acl (char const *name, struct stat const *sb)
                 alloc = 2 * alloc; /* <= alloc_max */
                 entries = malloced = (ace_t *) malloc (alloc * sizeof (ace_t));
                 if (entries == NULL)
-                  {
-                    errno = ENOMEM;
-                    return -1;
-                  }
+                  return -1;
                 continue;
               }
             break;
@@ -491,12 +650,12 @@ file_has_acl (char const *name, struct stat const *sb)
           }
         free (malloced);
       }
-#   endif
+#     endif
 
       return 0;
-#  endif
+#    endif
 
-# elif HAVE_GETACL /* HP-UX */
+#   elif HAVE_GETACL /* HP-UX */
 
       {
         struct acl_entry entries[NACLENTRIES];
@@ -539,7 +698,7 @@ file_has_acl (char const *name, struct stat const *sb)
           }
       }
 
-#  if HAVE_ACLV_H /* HP-UX >= 11.11 */
+#    if HAVE_ACLV_H /* HP-UX >= 11.11 */
 
       {
         struct acl entries[NACLVENTRIES];
@@ -574,9 +733,9 @@ file_has_acl (char const *name, struct stat const *sb)
           }
       }
 
-#  endif
+#    endif
 
-# elif HAVE_ACLX_GET && defined ACL_AIX_WIP /* AIX */
+#   elif HAVE_ACLX_GET && defined ACL_AIX_WIP /* AIX */
 
       acl_type_t type;
       char aclbuf[1024];
@@ -604,10 +763,7 @@ file_has_acl (char const *name, struct stat const *sb)
             free (acl);
           acl = malloc (aclsize);
           if (acl == NULL)
-            {
-              errno = ENOMEM;
-              return -1;
-            }
+            return -1;
         }
 
       if (type.u64 == ACL_AIXC)
@@ -634,7 +790,7 @@ file_has_acl (char const *name, struct stat const *sb)
           return -1;
         }
 
-# elif HAVE_STATACL /* older AIX */
+#   elif HAVE_STATACL /* older AIX */
 
       union { struct acl a; char room[4096]; } u;
 
@@ -643,7 +799,7 @@ file_has_acl (char const *name, struct stat const *sb)
 
       return acl_nontrivial (&u.a);
 
-# elif HAVE_ACLSORT /* NonStop Kernel */
+#   elif HAVE_ACLSORT /* NonStop Kernel */
 
       {
         struct acl entries[NACLENTRIES];
@@ -675,10 +831,29 @@ file_has_acl (char const *name, struct stat const *sb)
             return acl_nontrivial (count, entries);
           }
       }
-
-# endif
+#   endif
     }
+#  endif
+# endif
 #endif
 
   return 0;
 }
+
+/* Return 1 if NAME has a nontrivial access control list,
+   0 if ACLs are not supported, or if NAME has no or only a base ACL,
+   and -1 (setting errno) on error.  Note callers can determine
+   if ACLs are not supported as errno is set in that case also.
+   SB must be set to the stat buffer of NAME,
+   obtained through stat() or lstat().  */
+int
+file_has_acl (char const *name, struct stat const *sb)
+{
+  int flags = IFTODT (sb->st_mode);
+  if (!S_ISDIR (sb->st_mode))
+    flags |= _GL_DT_NOTDIR;
+  struct aclinfo ai;
+  int r = file_has_aclinfo (name, &ai, flags);
+  aclinfo_free (&ai);
+  return r;
+}
index a1d304d49e876f0ca5c42aa52884308d45db4022..9d704a9f6e5567f4ac35920bfaa0b250984796e6 100644 (file)
 # endif
 #endif
 
+#if defined __clang__
+  /* clang really only groks GNU C 4.2, regardless of its value of __GNUC__.  */
+# undef __GNUC_PREREQ
+# define __GNUC_PREREQ(maj, min) ((maj) < 4 + ((min) <= 2))
+#endif
 #ifndef __GNUC_PREREQ
-# if defined __GNUC__ && defined __GNUC_VERSION__
-# define __GNUC_PREREQ(maj, min) \
-        ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+# if defined __GNUC__ && defined __GNUC_MINOR__
+#  define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__))
 # else
 #  define __GNUC_PREREQ(maj, min) 0
 # endif
index 78b7816aa42aa5a7cacd0a383a002f861b674029..df2cb183a526456214575263d76b10b86b87673d 100644 (file)
    functions and variables.  Renaming avoids problems with some
    compilers and linkers.  */
 #ifdef __GETOPT_PREFIX
+
+/* Include platform-dependent header files that may declare getopt() and
+   friends.  */
+# if defined _AIX || defined __hpux || defined __sun || defined __QNX__
+#  include <stdio.h>
+# endif
+
 # ifndef __GETOPT_ID
 #  define __GETOPT_CONCAT(x, y) x ## y
 #  define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
index ea2d1a529c48a46921d01b4d449da19867623954..47800c1b35bbffd5086729b50f7975c26a78b2bf 100644 (file)
@@ -42,7 +42,7 @@
 # define funlockfile(fp) _IO_funlockfile (fp)
 #else
 # include "gettext.h"
-# define _(msgid) gettext (msgid)
+# define _(msgid) dgettext ("gnulib", msgid)
 /* When used standalone, flockfile and funlockfile might not be
    available.  */
 # if (!defined _POSIX_THREAD_SAFE_FUNCTIONS \
@@ -732,7 +732,7 @@ _getopt_internal (int argc, char **argv, const char *optstring,
   NAME (int argc, char *const *argv, const char *optstring)    \
   {                                                            \
     return _getopt_internal (argc, (char **)argv, optstring,   \
-                            0, 0, 0, POSIXLY_CORRECT);         \
+                            NULL, NULL, 0, POSIXLY_CORRECT);   \
   }
 
 #ifdef _LIBC
index 39d5ae4daa55772105516eb315c30f45aa23264b..bf0aa41e230645ef9d8a939a2621c9fddfe6fb61 100644 (file)
@@ -1,6 +1,5 @@
 /* Convenience header for conditional use of GNU <libintl.h>.
-   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2024 Free Software
-   Foundation, Inc.
+   Copyright (C) 1995-2024 Free Software Foundation, Inc.
 
    This file is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as
@@ -18,6 +17,7 @@
 #ifndef _LIBGETTEXT_H
 #define _LIBGETTEXT_H 1
 
+
 /* NLS can be disabled through the configure --disable-nls option
    or through "#define ENABLE NLS 0" before including this file.  */
 #if defined ENABLE_NLS && ENABLE_NLS
    as well because people using "gettext.h" will not include <libintl.h>,
    and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
    is OK.  */
-#if defined(__sun)
-# include <locale.h>
-#endif
+# if defined(__sun)
+#  include <locale.h>
+# endif
 
 /* Many header files from the libstdc++ coming with g++ 3.3 or newer include
    <libintl.h>, which chokes if dcgettext is defined as a macro.  So include
    it now, to make later inclusions of <libintl.h> a NOP.  */
-#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
-# include <cstdlib>
-# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H
-#  include <libintl.h>
+# if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
+#  include <cstdlib>
+#  if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H
+#   include <libintl.h>
+#  endif
 # endif
-#endif
 
 /* Disabled NLS.
    The casts to 'const char *' serve the purpose of producing warnings
 
 #endif
 
+
 /* Prefer gnulib's setlocale override over libintl's setlocale override.  */
 #ifdef GNULIB_defined_setlocale
 # undef setlocale
 # define setlocale rpl_setlocale
 #endif
 
+
 /* A pseudo function call that serves as a marker for the automated
    extraction of messages, but does not call gettext().  The run-time
    translation is done at a different place in the code.
    initializer for static 'char[]' or 'const char[]' variables.  */
 #define gettext_noop(String) String
 
+
 /* The separator between msgctxt and msgid in a .mo file.  */
 #define GETTEXT_CONTEXT_GLUE "\004"
 
    MSGID.  MSGCTXT and MSGID must be string literals.  MSGCTXT should be
    short and rarely need to change.
    The letter 'p' stands for 'particular' or 'special'.  */
+
+#include <locale.h> /* for LC_MESSAGES */
+
 #ifdef DEFAULT_TEXT_DOMAIN
 # define pgettext(Msgctxt, Msgid) \
    pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
@@ -178,11 +184,12 @@ npgettext_aux (const char *domain,
     return translation;
 }
 
+
 /* The same thing extended for non-constant arguments.  Here MSGCTXT and MSGID
    can be arbitrary expressions.  But for string literals these macros are
    less efficient than those above.  */
 
-#include <string.h>
+#include <string.h> /* for memcpy */
 
 /* GNULIB_NO_VLA can be defined to disable use of VLAs even if supported.
    This relates to the -Wvla and -Wvla-larger-than warnings, enabled in
@@ -199,7 +206,7 @@ npgettext_aux (const char *domain,
 #endif
 
 #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
-#include <stdlib.h>
+# include <stdlib.h> /* for malloc, free */
 #endif
 
 #define pgettext_expr(Msgctxt, Msgid) \
@@ -297,4 +304,5 @@ dcnpgettext_expr (const char *domain,
   return (n == 1 ? msgid : msgid_plural);
 }
 
+
 #endif /* _LIBGETTEXT_H */
index 5e541d9af1ff61d9731ba46c822de5a8aeaf2b4f..53275a4e62ffcc2d9ba3eeac8eb5dd8106b9ad2e 100644 (file)
@@ -42,6 +42,7 @@
 #  --avoid=dup \
 #  --avoid=fchdir \
 #  --avoid=fstat \
+#  --avoid=gnulib-i18n \
 #  --avoid=iswblank \
 #  --avoid=iswctype \
 #  --avoid=iswdigit \
@@ -80,6 +81,7 @@
 #  alloca-opt \
 #  binary-io \
 #  boot-time \
+#  builtin-expect \
 #  byteswap \
 #  c-ctype \
 #  c-strcase \
@@ -261,7 +263,6 @@ DYNLIB_OBJ = @DYNLIB_OBJ@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
-EGREP = @EGREP@
 EMACSRES = @EMACSRES@
 EMACS_MANIFEST = @EMACS_MANIFEST@
 EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
@@ -336,6 +337,7 @@ GL_COND_OBJ_PTHREAD_SIGMASK_CONDITION = @GL_COND_OBJ_PTHREAD_SIGMASK_CONDITION@
 GL_COND_OBJ_RAWMEMCHR_CONDITION = @GL_COND_OBJ_RAWMEMCHR_CONDITION@
 GL_COND_OBJ_READLINKAT_CONDITION = @GL_COND_OBJ_READLINKAT_CONDITION@
 GL_COND_OBJ_READLINK_CONDITION = @GL_COND_OBJ_READLINK_CONDITION@
+GL_COND_OBJ_REALLOC_POSIX_CONDITION = @GL_COND_OBJ_REALLOC_POSIX_CONDITION@
 GL_COND_OBJ_REGEX_CONDITION = @GL_COND_OBJ_REGEX_CONDITION@
 GL_COND_OBJ_SIG2STR_CONDITION = @GL_COND_OBJ_SIG2STR_CONDITION@
 GL_COND_OBJ_SIGDESCR_NP_CONDITION = @GL_COND_OBJ_SIGDESCR_NP_CONDITION@
@@ -584,7 +586,6 @@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@
 GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
 GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
 GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
-GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
 GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
 GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
 GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
@@ -707,7 +708,6 @@ GNUSTEP_CFLAGS = @GNUSTEP_CFLAGS@
 GNU_OBJC_CFLAGS = @GNU_OBJC_CFLAGS@
 GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
 GOBJECT_LIBS = @GOBJECT_LIBS@
-GREP = @GREP@
 GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
 GSETTINGS_LIBS = @GSETTINGS_LIBS@
 GTK_CFLAGS = @GTK_CFLAGS@
@@ -1031,6 +1031,7 @@ LIB_MATH = @LIB_MATH@
 LIB_NANOSLEEP = @LIB_NANOSLEEP@
 LIB_PTHREAD = @LIB_PTHREAD@
 LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SELINUX = @LIB_SELINUX@
 LIB_TIMER_TIME = @LIB_TIMER_TIME@
 LIB_WSOCK32 = @LIB_WSOCK32@
 LIB_XATTR = @LIB_XATTR@
@@ -1277,7 +1278,6 @@ REPLACE_READDIR = @REPLACE_READDIR@
 REPLACE_READLINK = @REPLACE_READLINK@
 REPLACE_READLINKAT = @REPLACE_READLINKAT@
 REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
-REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
 REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
 REPLACE_REALPATH = @REPLACE_REALPATH@
 REPLACE_REMOVE = @REPLACE_REMOVE@
@@ -1384,6 +1384,7 @@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
 UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
 UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_ACL = @USE_ACL@
+USE_SELINUX_SELINUX_H = @USE_SELINUX_SELINUX_H@
 USE_STARTUP_NOTIFICATION = @USE_STARTUP_NOTIFICATION@
 VMLIMIT_OBJ = @VMLIMIT_OBJ@
 W32_LIBS = @W32_LIBS@
@@ -1470,16 +1471,13 @@ gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b_CONDITION = @gl_GNULIB_ENABLE
 gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31_CONDITION = @gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31_CONDITION@
 gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c_CONDITION = @gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c_CONDITION@
 gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4_CONDITION = @gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4_CONDITION@
-gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec_CONDITION = @gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec_CONDITION@
 gl_GNULIB_ENABLED_8444034ea779b88768865bb60b4fb8c9_CONDITION = @gl_GNULIB_ENABLED_8444034ea779b88768865bb60b4fb8c9_CONDITION@
 gl_GNULIB_ENABLED_925677f0343de64b89a9f0c790b4104c_CONDITION = @gl_GNULIB_ENABLED_925677f0343de64b89a9f0c790b4104c_CONDITION@
 gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1_CONDITION = @gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1_CONDITION@
 gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36_CONDITION = @gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36_CONDITION@
 gl_GNULIB_ENABLED_cloexec_CONDITION = @gl_GNULIB_ENABLED_cloexec_CONDITION@
-gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b_CONDITION = @gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b_CONDITION@
 gl_GNULIB_ENABLED_dirfd_CONDITION = @gl_GNULIB_ENABLED_dirfd_CONDITION@
 gl_GNULIB_ENABLED_e80bf6f757095d2e5fc94dafb8f8fc8b_CONDITION = @gl_GNULIB_ENABLED_e80bf6f757095d2e5fc94dafb8f8fc8b_CONDITION@
-gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866_CONDITION = @gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866_CONDITION@
 gl_GNULIB_ENABLED_endian_CONDITION = @gl_GNULIB_ENABLED_endian_CONDITION@
 gl_GNULIB_ENABLED_euidaccess_CONDITION = @gl_GNULIB_ENABLED_euidaccess_CONDITION@
 gl_GNULIB_ENABLED_fd38c7e463b54744b77b98aeafb4fa7c_CONDITION = @gl_GNULIB_ENABLED_fd38c7e463b54744b77b98aeafb4fa7c_CONDITION@
@@ -2694,9 +2692,7 @@ endif
 ## begin gnulib module malloc-posix
 ifeq (,$(OMIT_GNULIB_MODULE_malloc-posix))
 
-ifneq (,$(gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866_CONDITION))
 
-endif
 EXTRA_DIST += malloc.c
 
 EXTRA_libgnu_a_SOURCES += malloc.c
@@ -2925,29 +2921,15 @@ EXTRA_libgnu_a_SOURCES += at-func.c
 endif
 ## end   gnulib module readlinkat
 
-## begin gnulib module realloc-gnu
-ifeq (,$(OMIT_GNULIB_MODULE_realloc-gnu))
-
-ifneq (,$(gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b_CONDITION))
-
-endif
-EXTRA_DIST += realloc.c
-
-EXTRA_libgnu_a_SOURCES += realloc.c
-
-endif
-## end   gnulib module realloc-gnu
-
 ## begin gnulib module realloc-posix
 ifeq (,$(OMIT_GNULIB_MODULE_realloc-posix))
 
 ifneq (,$(gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4_CONDITION))
-
+ifneq (,$(GL_COND_OBJ_REALLOC_POSIX_CONDITION))
+libgnu_a_SOURCES += realloc.c
 endif
-EXTRA_DIST += realloc.c
-
-EXTRA_libgnu_a_SOURCES += realloc.c
 
+endif
 endif
 ## end   gnulib module realloc-posix
 
@@ -3459,9 +3441,8 @@ endif
 ifeq (,$(OMIT_GNULIB_MODULE_stdlib))
 
 BUILT_SOURCES += stdlib.h
+libgnu_a_SOURCES += stdlib.c
 
-# We need the following in order to create <stdlib.h> when the system
-# doesn't have one that works with the given compiler.
 stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
   $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
        $(gl_V_at)$(SED_HEADER_STDOUT) \
@@ -3500,7 +3481,6 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
              -e 's/@''GNULIB_RAND''@/$(GL_GNULIB_RAND)/g' \
              -e 's/@''GNULIB_RANDOM''@/$(GL_GNULIB_RANDOM)/g' \
              -e 's/@''GNULIB_RANDOM_R''@/$(GL_GNULIB_RANDOM_R)/g' \
-             -e 's/@''GNULIB_REALLOC_GNU''@/$(GL_GNULIB_REALLOC_GNU)/g' \
              -e 's/@''GNULIB_REALLOC_POSIX''@/$(GL_GNULIB_REALLOC_POSIX)/g' \
              -e 's/@''GNULIB_REALLOCARRAY''@/$(GL_GNULIB_REALLOCARRAY)/g' \
              -e 's/@''GNULIB_REALPATH''@/$(GL_GNULIB_REALPATH)/g' \
@@ -3602,7 +3582,6 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
              -e 's|@''REPLACE_RAND''@|$(REPLACE_RAND)|g' \
              -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \
              -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \
-             -e 's|@''REPLACE_REALLOC_FOR_REALLOC_GNU''@|$(REPLACE_REALLOC_FOR_REALLOC_GNU)|g' \
              -e 's|@''REPLACE_REALLOC_FOR_REALLOC_POSIX''@|$(REPLACE_REALLOC_FOR_REALLOC_POSIX)|g' \
              -e 's|@''REPLACE_REALLOCARRAY''@|$(REPLACE_REALLOCARRAY)|g' \
              -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
@@ -4446,17 +4425,6 @@ EXTRA_DIST += vla.h
 endif
 ## end   gnulib module vla
 
-## begin gnulib module xalloc-oversized
-ifeq (,$(OMIT_GNULIB_MODULE_xalloc-oversized))
-
-ifneq (,$(gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec_CONDITION))
-
-endif
-EXTRA_DIST += xalloc-oversized.h
-
-endif
-## end   gnulib module xalloc-oversized
-
 
 mostlyclean-local: mostlyclean-generic
        @for dir in '' $(MOSTLYCLEANDIRS); do \
index 2a7867a1d1ffa286ab32aab1364d4c48ea04924a..045ff82c1a79ddd4f4629de939ca433a9db1b8b9 100644 (file)
 
 /* written by Jim Meyering and Bruno Haible */
 
+/* Ensure that we call the system's malloc() below.  */
 #define _GL_USE_STDLIB_ALLOC 1
 #include <config.h>
 
 #include <stdlib.h>
 
 #include <errno.h>
-
-#include "xalloc-oversized.h"
+#include <stdckdint.h>
 
 /* Allocate an N-byte block of memory from the heap, even if N is 0.  */
 
 void *
 rpl_malloc (size_t n)
 {
+#if !HAVE_MALLOC_0_NONNULL
   if (n == 0)
     n = 1;
+#endif
 
-  if (xalloc_oversized (n, 1))
+#if !HAVE_MALLOC_PTRDIFF
+  ptrdiff_t signed_n;
+  if (ckd_add (&signed_n, n, 0))
     {
       errno = ENOMEM;
       return NULL;
     }
+#endif
 
   void *result = malloc (n);
 
index fdd2bd8b4bf85a29d95ca220d84f95a2c3fcca93..2cbdda6b0faaf8ef4d3d6be129f126b1167ac55a 100644 (file)
@@ -22,9 +22,6 @@
 #include <config.h>
 
 /* Specification.  */
-#if HAVE_OPENSSL_MD5
-# define GL_OPENSSL_INLINE _GL_EXTERN_INLINE
-#endif
 #include "md5.h"
 
 #include <stdlib.h>
index 2f470703f5c0815d23b7070c46cf938227d8caa8..94cc6994cc1c8b8512716e802ee4607f46f26f9f 100644 (file)
--- a/lib/md5.h
+++ b/lib/md5.h
 #define MD5_DIGEST_SIZE 16
 #define MD5_BLOCK_SIZE 64
 
+#if defined __clang__
+  /* clang really only groks GNU C 4.2, regardless of its value of __GNUC__.  */
+# undef __GNUC_PREREQ
+# define __GNUC_PREREQ(maj, min) ((maj) < 4 + ((min) <= 2))
+#endif
 #ifndef __GNUC_PREREQ
 # if defined __GNUC__ && defined __GNUC_MINOR__
-#  define __GNUC_PREREQ(maj, min)                                       \
-  ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#  define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__))
 # else
 #  define __GNUC_PREREQ(maj, min) 0
 # endif
index 33c098734820e2d04a852768a12ae5edf839fabc..a5d2b00b7ea24db1d9033e816fc88f9336bfe4fe 100644 (file)
@@ -27,7 +27,10 @@ memset_explicit (void *s, int c, size_t len)
 #if HAVE_EXPLICIT_MEMSET
   return explicit_memset (s, c, len);
 #elif HAVE_MEMSET_S
-  (void) memset_s (s, len, c, len);
+# if !HAVE_MEMSET_S_SUPPORTS_ZERO
+  if (len > 0)
+# endif
+    (void) memset_s (s, len, c, len);
   return s;
 #elif defined __GNUC__ && !defined __clang__
   memset (s, c, len);
index c580a8fc0253605fc7cfeb569fa03a9ab92cfcf1..c97dc7e6cfaa7316b888d7a4124025d7056bdfc4 100644 (file)
@@ -2706,6 +2706,66 @@ mpn_gcd_11 (mp_limb_t u, mp_limb_t v)
   return u << shift;
 }
 
+mp_size_t
+mpn_gcd (mp_ptr rp, mp_ptr up, mp_size_t un, mp_ptr vp, mp_size_t vn)
+{
+  assert (un >= vn);
+  assert (vn > 0);
+  assert (!GMP_MPN_OVERLAP_P (up, un, vp, vn));
+  assert (vp[vn-1] > 0);
+  assert ((up[0] | vp[0]) & 1);
+
+  if (un > vn)
+    mpn_div_qr (NULL, up, un, vp, vn);
+
+  un = mpn_normalized_size (up, vn);
+  if (un == 0)
+    {
+      mpn_copyi (rp, vp, vn);
+      return vn;
+    }
+
+  if (!(vp[0] & 1))
+    MPN_PTR_SWAP (up, un, vp, vn);
+
+  while (un > 1 || vn > 1)
+    {
+      int shift;
+      assert (vp[0] & 1);
+
+      while (up[0] == 0)
+       {
+         up++;
+         un--;
+       }
+      gmp_ctz (shift, up[0]);
+      if (shift > 0)
+       {
+         gmp_assert_nocarry (mpn_rshift(up, up, un, shift));
+         un -= (up[un-1] == 0);
+       }
+
+      if (un < vn)
+       MPN_PTR_SWAP (up, un, vp, vn);
+      else if (un == vn)
+       {
+         int c = mpn_cmp (up, vp, un);
+         if (c == 0)
+           {
+             mpn_copyi (rp, up, un);
+             return un;
+           }
+         else if (c < 0)
+           MP_PTR_SWAP (up, vp);
+       }
+
+      gmp_assert_nocarry (mpn_sub (up, up, un, vp, vn));
+      un = mpn_normalized_size (up, un);
+    }
+  rp[0] = mpn_gcd_11 (up[0], vp[0]);
+  return 1;
+}
+
 unsigned long
 mpz_gcd_ui (mpz_t g, const mpz_t u, unsigned long v)
 {
@@ -2765,42 +2825,11 @@ mpz_gcd (mpz_t g, const mpz_t u, const mpz_t v)
   if (tu->_mp_size < tv->_mp_size)
     mpz_swap (tu, tv);
 
-  mpz_tdiv_r (tu, tu, tv);
-  if (tu->_mp_size == 0)
-    {
-      mpz_swap (g, tv);
-    }
-  else
-    for (;;)
-      {
-       int c;
-
-       mpz_make_odd (tu);
-       c = mpz_cmp (tu, tv);
-       if (c == 0)
-         {
-           mpz_swap (g, tu);
-           break;
-         }
-       if (c < 0)
-         mpz_swap (tu, tv);
+  tu->_mp_size = mpn_gcd (tu->_mp_d, tu->_mp_d, tu->_mp_size, tv->_mp_d, tv->_mp_size);
+  mpz_mul_2exp (g, tu, gz);
 
-       if (tv->_mp_size == 1)
-         {
-           mp_limb_t *gp;
-
-           mpz_tdiv_r (tu, tu, tv);
-           gp = MPZ_REALLOC (g, 1); /* gp = mpz_limbs_modify (g, 1); */
-           *gp = mpn_gcd_11 (tu->_mp_d[0], tv->_mp_d[0]);
-
-           g->_mp_size = *gp != 0; /* mpz_limbs_finish (g, 1); */
-           break;
-         }
-       mpz_sub (tu, tu, tv);
-      }
   mpz_clear (tu);
   mpz_clear (tv);
-  mpz_mul_2exp (g, g, gz);
 }
 
 void
index 59c24cf5111644d17770ed6ee08dccce7c0e4338..f28cb360ce1d8f61217a6e7b976eb645d47ac700 100644 (file)
@@ -105,6 +105,7 @@ void mpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
 void mpn_sqr (mp_ptr, mp_srcptr, mp_size_t);
 int mpn_perfect_square_p (mp_srcptr, mp_size_t);
 mp_size_t mpn_sqrtrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t);
+mp_size_t mpn_gcd (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t);
 
 mp_limb_t mpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int);
 mp_limb_t mpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int);
index 0693aaf14028c24ef6c31740f2b033cc9806e13f..3e2848c121042470a9c17e2426496b99231be659 100644 (file)
@@ -71,9 +71,8 @@ typedef int mktime_offset_t;
 #endif
 
 /* Subroutine of mktime.  Return the time_t representation of TP and
-   normalize TP, given that a struct tm * maps to a time_t as performed
-   by FUNC.  Record next guess for localtime-gmtime offset in *OFFSET.  */
-extern __time64_t __mktime_internal (struct tm *tp,
-                                     struct tm *(*func) (__time64_t const *,
-                                                         struct tm *),
+   normalize TP, given that a struct tm * maps to a time_t.  If
+   LOCAL, the mapping is performed by localtime_r, otherwise by gmtime_r.
+   Record next guess for localtime-gmtime offset in *OFFSET.  */
+extern __time64_t __mktime_internal (struct tm *tp, bool local,
                                      mktime_offset_t *offset) attribute_hidden;
index c704f41574003dbd80a7a6a9f39409496fb96174..81d58fd01a3a18a9527a94edaa6b7792d86127a5 100644 (file)
@@ -51,7 +51,6 @@
 #include <string.h>
 
 #include <intprops.h>
-#include <verify.h>
 
 #ifndef NEED_MKTIME_INTERNAL
 # define NEED_MKTIME_INTERNAL 0
@@ -119,12 +118,12 @@ my_tzset (void)
    __time64_t values that mktime can generate even on platforms where
    __time64_t is wider than the int components of struct tm.  */
 
-#if INT_MAX <= LONG_MAX / 4 / 366 / 24 / 60 / 60
+# if INT_MAX <= LONG_MAX / 4 / 366 / 24 / 60 / 60
 typedef long int long_int;
-#else
+# else
 typedef long long int long_int;
-#endif
-verify (INT_MAX <= TYPE_MAXIMUM (long_int) / 4 / 366 / 24 / 60 / 60);
+# endif
+static_assert (INT_MAX <= TYPE_MAXIMUM (long_int) / 4 / 366 / 24 / 60 / 60);
 
 /* Shift A right by B bits portably, by dividing A by 2**B and
    truncating towards minus infinity.  B should be in the range 0 <= B
@@ -155,9 +154,9 @@ static long_int const mktime_max
   = (TYPE_MAXIMUM (long_int) < TYPE_MAXIMUM (__time64_t)
      ? TYPE_MAXIMUM (long_int) : TYPE_MAXIMUM (__time64_t));
 
-#define EPOCH_YEAR 1970
-#define TM_YEAR_BASE 1900
-verify (TM_YEAR_BASE % 100 == 0);
+# define EPOCH_YEAR 1970
+# define TM_YEAR_BASE 1900
+static_assert (TM_YEAR_BASE % 100 == 0);
 
 /* Is YEAR + TM_YEAR_BASE a leap year?  */
 static bool
@@ -172,9 +171,9 @@ leapyear (long_int year)
 }
 
 /* How many days come before each month (0-12).  */
-#ifndef _LIBC
+# ifndef _LIBC
 static
-#endif
+# endif
 const unsigned short int __mon_yday[2][13] =
   {
     /* Normal years.  */
@@ -206,7 +205,7 @@ static long_int
 ydhms_diff (long_int year1, long_int yday1, int hour1, int min1, int sec1,
            int year0, int yday0, int hour0, int min0, int sec0)
 {
-  verify (-1 / 2 == 0);
+  static_assert (-1 / 2 == 0);
 
   /* Compute intervening leap days correctly even if year is negative.
      Take care to avoid integer overflow here.  */
@@ -251,29 +250,33 @@ tm_diff (long_int year, long_int yday, int hour, int min, int sec,
                     tp->tm_hour, tp->tm_min, tp->tm_sec);
 }
 
-/* Use CONVERT to convert T to a struct tm value in *TM.  T must be in
-   range for __time64_t.  Return TM if successful, NULL (setting errno) on
-   failure.  */
+/* Convert T to a struct tm value in *TM.  Use localtime64_r if LOCAL,
+   otherwise gmtime64_r.  T must be in range for __time64_t.  Return
+   TM if successful, NULL (setting errno) on failure.  */
 static struct tm *
-convert_time (struct tm *(*convert) (const __time64_t *, struct tm *),
-             long_int t, struct tm *tm)
+convert_time (long_int t, bool local, struct tm *tm)
 {
   __time64_t x = t;
-  return convert (&x, tm);
+  if (local)
+    return __localtime64_r (&x, tm);
+  else
+    return __gmtime64_r (&x, tm);
 }
-
-/* Use CONVERT to convert *T to a broken down time in *TP.
-   If *T is out of range for conversion, adjust it so that
-   it is the nearest in-range value and then convert that.
-   A value is in range if it fits in both __time64_t and long_int.
-   Return TP on success, NULL (setting errno) on failure.  */
+/* Call it __tzconvert to sync with other parts of glibc.  */
+#define __tz_convert convert_time
+
+/* Convert *T to a broken down time in *TP (as if by localtime if
+   LOCAL, otherwise as if by gmtime).  If *T is out of range for
+   conversion, adjust it so that it is the nearest in-range value and
+   then convert that.  A value is in range if it fits in both
+   __time64_t and long_int.  Return TP on success, NULL (setting
+   errno) on failure.  */
 static struct tm *
-ranged_convert (struct tm *(*convert) (const __time64_t *, struct tm *),
-               long_int *t, struct tm *tp)
+ranged_convert (bool local, long_int *t, struct tm *tp)
 {
   long_int t1 = (*t < mktime_min ? mktime_min
                 : *t <= mktime_max ? *t : mktime_max);
-  struct tm *r = convert_time (convert, t1, tp);
+  struct tm *r = __tz_convert (t1, local, tp);
   if (r)
     {
       *t = t1;
@@ -294,7 +297,7 @@ ranged_convert (struct tm *(*convert) (const __time64_t *, struct tm *),
       long_int mid = long_int_avg (ok, bad);
       if (mid == ok || mid == bad)
        break;
-      if (convert_time (convert, mid, tp))
+      if (__tz_convert (mid, local, tp))
        ok = mid, oktm = *tp;
       else if (errno != EOVERFLOW)
        return NULL;
@@ -310,36 +313,45 @@ ranged_convert (struct tm *(*convert) (const __time64_t *, struct tm *),
 }
 
 
-/* Convert *TP to a __time64_t value, inverting
-   the monotonic and mostly-unit-linear conversion function CONVERT.
-   Use *OFFSET to keep track of a guess at the offset of the result,
+/* Convert *TP to a __time64_t value.  If LOCAL, the reverse mapping
+   is performed as if localtime, otherwise as if by gmtime.  Use
+   *OFFSET to keep track of a guess at the offset of the result,
    compared to what the result would be for UTC without leap seconds.
-   If *OFFSET's guess is correct, only one CONVERT call is needed.
-   If successful, set *TP to the canonicalized struct tm;
+   If *OFFSET's guess is correct, only one reverse mapping call is
+   needed.  If successful, set *TP to the canonicalized struct tm;
    otherwise leave *TP alone, return ((time_t) -1) and set errno.
    This function is external because it is used also by timegm.c.  */
 __time64_t
-__mktime_internal (struct tm *tp,
-                  struct tm *(*convert) (const __time64_t *, struct tm *),
-                  mktime_offset_t *offset)
+__mktime_internal (struct tm *tp, bool local, mktime_offset_t *offset)
 {
   struct tm tm;
 
-  /* The maximum number of probes (calls to CONVERT) should be enough
-     to handle any combinations of time zone rule changes, solar time,
-     leap seconds, and oscillations around a spring-forward gap.
-     POSIX.1 prohibits leap seconds, but some hosts have them anyway.  */
+  /* The maximum number of probes should be enough to handle any
+     combinations of time zone rule changes, solar time, leap seconds,
+     and oscillations around a spring-forward gap.  POSIX.1 prohibits
+     leap seconds, but some hosts have them anyway.  */
   int remaining_probes = 6;
 
-  /* Time requested.  Copy it in case CONVERT modifies *TP; this can
-     occur if TP is localtime's returned value and CONVERT is localtime.  */
+#ifndef _LIBC
+  /* Gnulib mktime doesn't lock the tz state, so it may need to probe
+     more often if some other thread changes local time while
+     __mktime_internal is probing.  Double the number of probes; this
+     should suffice for practical cases that are at all likely.  */
+  remaining_probes *= 2;
+#endif
+
+  /* Time requested.  Copy it in case gmtime/localtime modify *TP;
+     this can occur if TP is localtime's returned value and CONVERT is
+     localtime.  */
   int sec = tp->tm_sec;
   int min = tp->tm_min;
   int hour = tp->tm_hour;
   int mday = tp->tm_mday;
   int mon = tp->tm_mon;
   int year_requested = tp->tm_year;
-  int isdst = tp->tm_isdst;
+
+  /* Ignore any tm_isdst request for timegm.  */
+  int isdst = local ? tp->tm_isdst : 0;
 
   /* 1 if the previous probe was DST.  */
   int dst2 = 0;
@@ -390,7 +402,7 @@ __mktime_internal (struct tm *tp,
 
   while (true)
     {
-      if (! ranged_convert (convert, &t, &tm))
+      if (! ranged_convert (local, &t, &tm))
        return -1;
       long_int dt = tm_diff (year, yday, hour, min, sec, &tm);
       if (dt == 0)
@@ -469,7 +481,7 @@ __mktime_internal (struct tm *tp,
            if (! ckd_add (&ot, t, delta * direction))
              {
                struct tm otm;
-               if (! ranged_convert (convert, &ot, &otm))
+               if (! ranged_convert (local, &ot, &otm))
                  return -1;
                if (! isdst_differ (isdst, otm.tm_isdst))
                  {
@@ -479,7 +491,7 @@ __mktime_internal (struct tm *tp,
                                                &otm);
                    if (mktime_min <= gt && gt <= mktime_max)
                      {
-                       if (convert_time (convert, gt, &tm))
+                       if (__tz_convert (gt, local, &tm))
                          {
                            t = gt;
                            goto offset_found;
@@ -493,7 +505,7 @@ __mktime_internal (struct tm *tp,
 
       /* No unusual DST offset was found nearby.  Assume one-hour DST.  */
       t += 60 * 60 * dst_difference;
-      if (mktime_min <= t && t <= mktime_max && convert_time (convert, t, &tm))
+      if (mktime_min <= t && t <= mktime_max && __tz_convert (t, local, &tm))
        goto offset_found;
 
       __set_errno (EOVERFLOW);
@@ -520,7 +532,7 @@ __mktime_internal (struct tm *tp,
          __set_errno (EOVERFLOW);
          return -1;
        }
-      if (! convert_time (convert, t, &tm))
+      if (! __tz_convert (t, local, &tm))
        return -1;
     }
 
@@ -536,14 +548,13 @@ __mktime_internal (struct tm *tp,
 __time64_t
 __mktime64 (struct tm *tp)
 {
-  /* POSIX.1 8.1.1 requires that whenever mktime() is called, the
-     time zone names contained in the external variable 'tzname' shall
-     be set as if the tzset() function had been called.  */
+  /* POSIX.1 requires mktime to set external variables like 'tzname'
+     as though tzset had been called.  */
   __tzset ();
 
 # if defined _LIBC || NEED_MKTIME_WORKING
   static mktime_offset_t localtime_offset;
-  return __mktime_internal (tp, __localtime64_r, &localtime_offset);
+  return __mktime_internal (tp, true, &localtime_offset);
 # else
 #  undef mktime
   return mktime (tp);
index 92a07e8289007937420208f4038e1dbde40a2801..0b5898d88ffb6d07a6c4c6f178be8c675f791a9b 100644 (file)
@@ -20,6 +20,7 @@
 #include <config.h>
 #include "nproc.h"
 
+#include <errno.h>
 #include <limits.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -125,6 +126,46 @@ num_processors_via_affinity_mask (void)
       }
   }
 #elif HAVE_SCHED_GETAFFINITY_LIKE_GLIBC /* glibc >= 2.3.4 */
+  /* There are two ways to use the sched_getaffinity() function:
+       - With a statically-sized cpu_set_t.
+       - With a dynamically-sized cpu_set_t.
+     Documentation:
+     <https://www.kernel.org/doc/man-pages/online/pages/man2/sched_getaffinity.2.html>
+     <https://www.kernel.org/doc/man-pages/online/pages/man3/CPU_SET.3.html>
+     The second way has the advantage that it works on systems with more than
+     1024 CPUs.  The first way has the advantage that it works also when memory
+     is tight.  */
+# if defined CPU_ALLOC_SIZE /* glibc >= 2.6 */
+  {
+    unsigned int alloc_count = 1024;
+    for (;;)
+      {
+        cpu_set_t *set = CPU_ALLOC (alloc_count);
+        if (set == NULL)
+          /* Out of memory.  */
+          break;
+        unsigned int size = CPU_ALLOC_SIZE (alloc_count);
+        if (sched_getaffinity (0, size, set) == 0)
+          {
+            unsigned int count = CPU_COUNT_S (size, set);
+            CPU_FREE (set);
+            return count;
+          }
+        if (errno != EINVAL)
+          {
+            /* Some other error.  */
+            CPU_FREE (set);
+            return 0;
+          }
+        CPU_FREE (set);
+        /* Retry with some larger cpu_set_t.  */
+        alloc_count *= 2;
+        if (alloc_count == 0)
+          /* Integer overflow.  Avoid an endless loop.  */
+          return 0;
+      }
+  }
+# endif
   {
     cpu_set_t set;
 
index 7b476df345718e9a3f2658eadd42266d72d0b676..e290f94a94aaeb00d87e6d84145787ff6487d14e 100644 (file)
@@ -40,7 +40,7 @@ pipe2 (int fd[2], int flags)
 {
   /* Mingw _pipe() corrupts fd on failure; also, if we succeed at
      creating the pipe but later fail at changing fcntl, we want
-     to leave fd unchanged: http://austingroupbugs.net/view.php?id=467  */
+     to leave fd unchanged: https://austingroupbugs.net/view.php?id=467  */
   int tmp[2];
   tmp[0] = fd[0];
   tmp[1] = fd[1];
index 0573139625e750c314b23a3b91cec63f658d6113..58044745f458678753c30a4194a8232a6c205720 100644 (file)
 
 /* written by Jim Meyering and Bruno Haible */
 
+/* Ensure that we call the system's realloc() below.  */
+#define _GL_USE_STDLIB_ALLOC 1
 #include <config.h>
 
+#define _GL_REALLOC_INLINE _GL_EXTERN_INLINE
 #include <stdlib.h>
 
 #include <errno.h>
+#include <stdckdint.h>
 
-#include "xalloc-oversized.h"
+#ifdef __CHERI_PURE_CAPABILITY__
+# include <cheri.h>
+#endif
 
-/* Call the system's realloc below.  This file does not define
-   _GL_USE_STDLIB_ALLOC because it needs Gnulib's malloc if present.  */
-#undef realloc
+#ifndef _GL_INLINE_RPL_REALLOC
 
 /* Change the size of an allocated block of memory P to N bytes,
    with error checking.  If P is NULL, use malloc.  Otherwise if N is zero,
 void *
 rpl_realloc (void *p, size_t n)
 {
-  if (p == NULL)
-    return malloc (n);
+  size_t n1 = n;
 
   if (n == 0)
     {
-      free (p);
-      return NULL;
+# if NEED_SANITIZED_REALLOC
+      /* When P is non-null, ISO C23 Â§7.24.3.7.(3) says realloc (P, 0) has
+         undefined behavior even though C17 and earlier partially defined
+         the behavior.  Let the programmer know.
+         When the undefined-behaviour sanitizers report this case, i.e. when
+         <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117233> and
+         <https://github.com/llvm/llvm-project/issues/113065>
+         have been closed and new releases of GCC and clang have been made,
+         we can revisit this code.  */
+      if (p != NULL)
+        abort ();
+# endif
+
+      /* realloc (NULL, 0) acts like glibc malloc (0), i.e., like malloc (1)
+         except the caller cannot dereference any non-null return.
+
+         realloc (P, 0) with non-null P is a messier situation.
+         As mentioned above, C23 says behavior is undefined.
+         POSIX.1-2024 extends C17 to say realloc (P, 0)
+         either fails by setting errno and returning a null pointer,
+         or succeeds by freeing P and then either:
+           (a) setting errno=EINVAL and returning a null pointer; or
+           (b) acting like a successful malloc (0).
+         glibc 1 through 2.1 realloc acted like (b),
+         which conforms to C17, to C23 and to POSIX.1-2024.
+         glibc 2.1.1+ realloc acts like (a) except it does not set errno;
+         this conforms to C17 and to C23 but not to POSIX.1-2024.
+         Quite possibly future versions of POSIX will change,
+         due either to C23 or to (a)'s semantics being messy.
+         Act like (b), as that's easy, matches GNU, BSD and V7 malloc,
+         matches BSD and V7 realloc, and requires no extra code at
+         caller sites.  */
+
+# if !HAVE_REALLOC_0_NONNULL
+      n1 = 1;
+# endif
     }
 
-  if (xalloc_oversized (n, 1))
+# if !HAVE_MALLOC_PTRDIFF
+  ptrdiff_t signed_n;
+  if (ckd_add (&signed_n, n, 0))
     {
       errno = ENOMEM;
       return NULL;
     }
+# endif
 
-  void *result = realloc (p, n);
+  void *result = realloc (p, n1);
 
-#if !HAVE_MALLOC_POSIX
+# if !HAVE_MALLOC_POSIX
   if (result == NULL)
     errno = ENOMEM;
-#endif
+# endif
+
+# ifdef __CHERI_PURE_CAPABILITY__
+  if (result != NULL)
+    result = cheri_bounds_set (result, n);
+# endif
 
   return result;
 }
+
+#endif
index ccf40cebc0efdab0f183aba4c60d7d660ebe36d3..004dc6240508d453af3cb58cebf7478b14236f05 100644 (file)
@@ -647,10 +647,12 @@ extern int re_exec (const char *);
      || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \
      || __clang_major__ >= 3
 #  define _Restrict_ __restrict
-# elif 199901L <= __STDC_VERSION__ || defined restrict
-#  define _Restrict_ restrict
 # else
-#  define _Restrict_
+#  if 199901L <= __STDC_VERSION__ || defined restrict
+#   define _Restrict_ restrict
+#  else
+#   define _Restrict_
+#  endif
 # endif
 #endif
 /* For the ISO C99 syntax
@@ -661,13 +663,15 @@ extern int re_exec (const char *);
 #ifndef _Restrict_arr_
 # ifdef __restrict_arr
 #  define _Restrict_arr_ __restrict_arr
-# elif ((199901L <= __STDC_VERSION__ \
+# else
+#  if ((199901L <= __STDC_VERSION__ \
          || 3 < __GNUC__ + (1 <= __GNUC_MINOR__) \
          || __clang_major__ >= 3) \
         && !defined __cplusplus)
-#  define _Restrict_arr_ _Restrict_
-# else
-#  define _Restrict_arr_
+#   define _Restrict_arr_ _Restrict_
+#  else
+#   define _Restrict_arr_
+#  endif
 # endif
 #endif
 
index 8cd096ebcfb054aebdb61d2fc2105de4aa042e60..6ccf701f26613eca1523b34fcca6d5f9a3fdde79 100644 (file)
@@ -937,8 +937,7 @@ re_node_set_alloc (re_node_set *set, Idx size)
   set->alloc = size;
   set->nelem = 0;
   set->elems = re_malloc (Idx, size);
-  if (__glibc_unlikely (set->elems == NULL)
-      && (MALLOC_0_IS_NONNULL || size != 0))
+  if (__glibc_unlikely (set->elems == NULL))
     return REG_ESPACE;
   return REG_NOERROR;
 }
index 6165cb17c7079685160a03fed46878f4b459b622..02c2ca68960634ae4b8d3becced924a0ac3cc564 100644 (file)
 /* This is for other GNU distributions with internationalized messages.  */
 #if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
 # include <libintl.h>
+# undef gettext
 # ifdef _LIBC
-#  undef gettext
 #  define gettext(msgid) \
   __dcgettext (_libc_intl_domainname, msgid, LC_MESSAGES)
+# else
+#  define gettext(msgid) dgettext ("gnulib", msgid)
 # endif
 #else
 # undef gettext
@@ -436,12 +438,6 @@ typedef struct re_dfa_t re_dfa_t;
 #define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx))
 #define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx))
 
-#ifdef _LIBC
-# define MALLOC_0_IS_NONNULL 1
-#elif !defined MALLOC_0_IS_NONNULL
-# define MALLOC_0_IS_NONNULL 0
-#endif
-
 #ifndef MAX
 # define MAX(a,b) ((a) < (b) ? (b) : (a))
 #endif
index 63ebf7c64b74dd05f461a71fb96e6921dbf2f161..dfb5166171a3bcdffe9640b7e0074e96cb4ffa2d 100644 (file)
 # endif
 
 # if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __minix /* NetBSD >= 1.5ZA, OpenBSD, Minix 3 */
-  /* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
+  /* See <https://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
      and <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
      and <https://github.com/Stichting-MINIX-Research-Foundation/minix/blob/master/lib/libc/stdio/fileext.h> */
   struct __sfileext
diff --git a/lib/stdlib.c b/lib/stdlib.c
new file mode 100644 (file)
index 0000000..521d646
--- /dev/null
@@ -0,0 +1,21 @@
+/* Inline functions for <stdlib.h>.
+
+   Copyright (C) 2024 Free Software Foundation, Inc.
+
+   This file is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   This file is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#define _GL_STDLIB_INLINE _GL_EXTERN_INLINE
+#include <stdlib.h>
index 6667f426ad99460240543a92933ac3ee5f42b039..adbef69131bde20a22dc307684d901db73f844d0 100644 (file)
@@ -54,7 +54,7 @@
 
 /* This file uses _Noreturn, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
    _GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PURE,
-   GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */
+   _GL_INLINE_HEADER_BEGIN, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
@@ -130,6 +130,14 @@ struct random_data
 # include <string>
 #endif
 
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_STDLIB_INLINE
+# define _GL_STDLIB_INLINE _GL_INLINE
+#endif
+#ifndef _GL_REALLOC_INLINE
+# define _GL_REALLOC_INLINE _GL_INLINE
+#endif
+
 /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
    that can be freed by passing them as the Ith argument to the
    function F.  */
@@ -283,8 +291,8 @@ _GL_CXXALIASWARN (free);
 #elif defined GNULIB_POSIXCHECK
 # undef free
 /* Assume free is always declared.  */
-_GL_WARN_ON_USE (free, "free is not future POSIX compliant everywhere - "
-                 "use gnulib module free for portability");
+_GL_WARN_ON_USE (free, "free is not POSIX:2024 compliant everywhere - "
+                 "use gnulib module free-posix for portability");
 #endif
 
 
@@ -367,9 +375,10 @@ _GL_WARN_ON_USE (atoll, "atoll is unportable - "
 #endif
 
 #if @GNULIB_CALLOC_POSIX@
-# if (@GNULIB_CALLOC_POSIX@ && @REPLACE_CALLOC_FOR_CALLOC_POSIX@) \
+# if @REPLACE_CALLOC_FOR_CALLOC_POSIX@ \
      || (@GNULIB_CALLOC_GNU@ && @REPLACE_CALLOC_FOR_CALLOC_GNU@)
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
+        || _GL_USE_STDLIB_ALLOC)
 #   undef calloc
 #   define calloc rpl_calloc
 #  endif
@@ -681,7 +690,7 @@ _GL_WARN_ON_USE (grantpt, "grantpt is not portable - "
    by never specifying a zero size), so it does not need malloc or
    realloc to be redefined.  */
 #if @GNULIB_MALLOC_POSIX@
-# if (@GNULIB_MALLOC_POSIX@ && @REPLACE_MALLOC_FOR_MALLOC_POSIX@) \
+# if @REPLACE_MALLOC_FOR_MALLOC_POSIX@ \
      || (@GNULIB_MALLOC_GNU@ && @REPLACE_MALLOC_FOR_MALLOC_GNU@)
 #  if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
         || _GL_USE_STDLIB_ALLOC)
@@ -740,11 +749,12 @@ _GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - "
 /* Return maximum number of bytes of a multibyte character.  */
 #if @REPLACE_MB_CUR_MAX@
 # if !GNULIB_defined_MB_CUR_MAX
-static inline
-int gl_MB_CUR_MAX (void)
+_GL_STDLIB_INLINE int
+gl_MB_CUR_MAX (void)
 {
   /* Turn the value 3 to the value 4, as needed for the UTF-8 encoding.  */
-  return MB_CUR_MAX + (MB_CUR_MAX == 3);
+  int gl_mb_cur_max = MB_CUR_MAX;
+  return gl_mb_cur_max == 3 ? 4 : gl_mb_cur_max;
 }
 #  undef MB_CUR_MAX
 #  define MB_CUR_MAX gl_MB_CUR_MAX ()
@@ -1454,16 +1464,25 @@ _GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - "
 
 
 #if @GNULIB_REALLOC_POSIX@
-# if (@GNULIB_REALLOC_POSIX@ && @REPLACE_REALLOC_FOR_REALLOC_POSIX@) \
-     || (@GNULIB_REALLOC_GNU@ && @REPLACE_REALLOC_FOR_REALLOC_GNU@)
+# if @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+#  if @REPLACE_REALLOC_FOR_REALLOC_POSIX@ == 2
+#   define _GL_INLINE_RPL_REALLOC 1
+_GL_REALLOC_INLINE void *
+rpl_realloc (void *ptr, size_t size)
+{
+  return realloc (ptr, size ? size : 1);
+}
+#  endif
 #  if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
         || _GL_USE_STDLIB_ALLOC)
 #   undef realloc
 #   define realloc rpl_realloc
 #  endif
+#  if !defined _GL_INLINE_RPL_REALLOC
 _GL_FUNCDECL_RPL (realloc, void *,
                   (void *ptr, size_t size),
                   _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_NODISCARD);
+#  endif
 _GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size));
 # else
 #  if __GNUC__ >= 11 && !defined __clang__
@@ -1968,6 +1987,8 @@ _GL_CXXALIASWARN (wctomb);
 #endif
 
 
+_GL_INLINE_HEADER_END
+
 #endif /* _@GUARD_PREFIX@_STDLIB_H */
 #endif /* _@GUARD_PREFIX@_STDLIB_H */
 #endif
index e5cf30c0198520caf5e6ca31df0f45f310122d90..ba28b3ecd96316a264c6ce58dc6b3d5b784c8a3f 100644 (file)
@@ -30,8 +30,7 @@ __time64_t
 __timegm64 (struct tm *tmp)
 {
   static mktime_offset_t gmtime_offset;
-  tmp->tm_isdst = 0;
-  return __mktime_internal (tmp, __gmtime64_r, &gmtime_offset);
+  return __mktime_internal (tmp, false, &gmtime_offset);
 }
 
 #if defined _LIBC && __TIMESIZE != 64
index 20b1356fd382d55250dd8c0686156dd3d090b606..ceb3cb48f15f59d152bd50712302c133a4f57002 100644 (file)
@@ -181,6 +181,9 @@ _GL_INLINE_HEADER_BEGIN
 #ifndef _GL_UNISTD_INLINE
 # define _GL_UNISTD_INLINE _GL_INLINE
 #endif
+#ifndef _GL_GETPAGESIZE_INLINE
+# define _GL_GETPAGESIZE_INLINE _GL_INLINE
+#endif
 
 /* Hide some function declarations from <winsock2.h>.  */
 
@@ -1478,7 +1481,7 @@ _GL_FUNCDECL_SYS (getpagesize, int, (void), );
 #     define getpagesize() _gl_getpagesize ()
 #    else
 #     if !GNULIB_defined_getpagesize_function
-_GL_UNISTD_INLINE int
+_GL_GETPAGESIZE_INLINE int
 getpagesize ()
 {
   return _gl_getpagesize ();
index cd86a44ea7653506777d71dc8e7e43bea9e0af9a..3c81b5c34926e6bc20f2c01dbec8987a360a6f7a 100644 (file)
@@ -78,6 +78,21 @@ static int utimensat_works_really;
 static int lutimensat_works_really;
 #endif /* HAVE_UTIMENSAT || HAVE_FUTIMENS */
 
+static bool
+is_valid_timespec (struct timespec const *timespec)
+{
+  return (timespec->tv_nsec == UTIME_NOW
+          || timespec->tv_nsec == UTIME_OMIT
+          || (0 <= timespec->tv_nsec && timespec->tv_nsec < TIMESPEC_HZ));
+}
+
+static bool
+is_valid_timespecs (struct timespec const timespec[2])
+{
+  return (is_valid_timespec (&timespec[0])
+          && is_valid_timespec (&timespec[1]));
+}
+
 /* Validate the requested timestamps.  Return 0 if the resulting
    timespec can be used for utimensat (after possibly modifying it to
    work around bugs in utimensat).  Return a positive value if the
@@ -90,14 +105,7 @@ validate_timespec (struct timespec timespec[2])
 {
   int result = 0;
   int utime_omit_count = 0;
-  if ((timespec[0].tv_nsec != UTIME_NOW
-       && timespec[0].tv_nsec != UTIME_OMIT
-       && ! (0 <= timespec[0].tv_nsec
-             && timespec[0].tv_nsec < TIMESPEC_HZ))
-      || (timespec[1].tv_nsec != UTIME_NOW
-          && timespec[1].tv_nsec != UTIME_OMIT
-          && ! (0 <= timespec[1].tv_nsec
-                && timespec[1].tv_nsec < TIMESPEC_HZ)))
+  if (!is_valid_timespecs (timespec))
     {
       errno = EINVAL;
       return -1;
@@ -516,24 +524,44 @@ fdutimens (int fd, char const *file, struct timespec const timespec[2])
   }
 }
 
-#if !HAVE_UTIMENS
 /* Set the access and modification timestamps of FILE to be
    TIMESPEC[0] and TIMESPEC[1], respectively.  */
 int
 utimens (char const *file, struct timespec const timespec[2])
+#undef utimens
 {
+#if HAVE_UTIMENS
+  /* NetBSD's native utimens() does not fulfil the Gnulib expectations:
+     At least in NetBSD 10.0, it does not validate the timespec argument.  */
+  if (timespec != NULL && !is_valid_timespecs (timespec))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  return utimens (file, timespec);
+#else
   return fdutimens (-1, file, timespec);
-}
 #endif
+}
 
-#if !HAVE_LUTIMENS
 /* Set the access and modification timestamps of FILE to be
    TIMESPEC[0] and TIMESPEC[1], respectively, without dereferencing
    symlinks.  Fail with ENOSYS if the platform does not support
    changing symlink timestamps, but FILE was a symlink.  */
 int
 lutimens (char const *file, struct timespec const timespec[2])
+#undef lutimens
 {
+#if HAVE_LUTIMENS
+  /* NetBSD's native lutimens() does not fulfil the Gnulib expectations:
+     At least in NetBSD 10.0, it does not validate the timespec argument.  */
+  if (timespec != NULL && !is_valid_timespecs (timespec))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  return lutimens (file, timespec);
+#else
   struct timespec adjusted_timespec[2];
   struct timespec *ts = timespec ? adjusted_timespec : NULL;
   int adjustment_needed = 0;
@@ -553,11 +581,11 @@ lutimens (char const *file, struct timespec const timespec[2])
      fdutimens' worry about buggy NFS clients.  But we do have to
      worry about bogus return values.  */
 
-#if HAVE_UTIMENSAT
+# if HAVE_UTIMENSAT
   if (0 <= lutimensat_works_really)
     {
       int result;
-# if defined __linux__ || defined __sun || defined __NetBSD__
+#  if defined __linux__ || defined __sun || defined __NetBSD__
       /* As recently as Linux kernel 2.6.32 (Dec 2009), several file
          systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT,
          but work if both times are either explicitly specified or
@@ -582,9 +610,9 @@ lutimens (char const *file, struct timespec const timespec[2])
           /* Note that st is good, in case utimensat gives ENOSYS.  */
           adjustment_needed++;
         }
-# endif
+#  endif
       result = utimensat (AT_FDCWD, file, ts, AT_SYMLINK_NOFOLLOW);
-# ifdef __linux__
+#  ifdef __linux__
       /* Work around a kernel bug:
          https://bugzilla.redhat.com/show_bug.cgi?id=442352
          https://bugzilla.redhat.com/show_bug.cgi?id=449910
@@ -594,7 +622,7 @@ lutimens (char const *file, struct timespec const timespec[2])
          are no longer in common use.  */
       if (0 < result)
         errno = ENOSYS;
-# endif
+#  endif
       if (result == 0 || errno != ENOSYS)
         {
           utimensat_works_really = 1;
@@ -603,7 +631,7 @@ lutimens (char const *file, struct timespec const timespec[2])
         }
     }
   lutimensat_works_really = -1;
-#endif /* HAVE_UTIMENSAT */
+# endif /* HAVE_UTIMENSAT */
 
   /* The platform lacks an interface to set file timestamps with
      nanosecond resolution, so do the best we can, discarding any
@@ -619,7 +647,7 @@ lutimens (char const *file, struct timespec const timespec[2])
 
   /* On Linux, lutimes is a thin wrapper around utimensat, so there is
      no point trying lutimes if utimensat failed with ENOSYS.  */
-#if HAVE_LUTIMES && !HAVE_UTIMENSAT
+# if HAVE_LUTIMES && !HAVE_UTIMENSAT
   {
     struct timeval timeval[2];
     struct timeval *t;
@@ -639,7 +667,7 @@ lutimens (char const *file, struct timespec const timespec[2])
     if (result == 0 || errno != ENOSYS)
       return result;
   }
-#endif /* HAVE_LUTIMES && !HAVE_UTIMENSAT */
+# endif /* HAVE_LUTIMES && !HAVE_UTIMENSAT */
 
   /* Out of luck for symlinks, but we still handle regular files.  */
   if (!(adjustment_needed || REPLACE_FUNC_STAT_FILE) && lstat (file, &st))
@@ -648,5 +676,5 @@ lutimens (char const *file, struct timespec const timespec[2])
     return fdutimens (-1, file, ts);
   errno = ENOSYS;
   return -1;
-}
 #endif
+}
index e85477b84936844b25454b32efb9beb2f770a056..762c3f9a858b66cf0176f7e877aa4b53f77efc7b 100644 (file)
@@ -33,12 +33,16 @@ extern "C" {
 #endif
 
 int fdutimens (int, char const *, struct timespec const [2]);
-#if !HAVE_UTIMENS
+
+#if HAVE_UTIMENS
+# define utimens rpl_utimens
+#endif
 int utimens (char const *, struct timespec const [2]);
+
+#if HAVE_LUTIMENS
+# define lutimens rpl_lutimens
 #endif
-#if !HAVE_LUTIMENS
 int lutimens (char const *, struct timespec const [2]);
-#endif
 
 #ifdef __cplusplus
 }
index cd16771848cf2dd8467eebe6352daf7cbb593ae4..aac283b32879ba12b10fa19d1d5e8f88e352e6df 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl This file must be named something that sorts before all other
 dnl gnulib-provided .m4 files.  It is needed until the clang fix has
index 20baf16437f8c9fbcc1cfda2ab5bc0bf6c937351..d4887e31102bf8ff48764ccacdb9cf260c7ce5fd 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 2017-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Test for __inline keyword
 
index 0abd6d9002c5972cb2e4477991ef9593de8634b9..5314bcc0e805c5f058298f4c961645b872df892d 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2006-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Derek Price.
 
index be88f1b8313a02cfa16b9ff1486b3ab45407d5d1..68d7799b66815a1c6adabf449f6d8fedff64440e 100644 (file)
--- a/m4/acl.m4
+++ b/m4/acl.m4
@@ -1,9 +1,10 @@
 # acl.m4
-# serial 31
+# serial 34
 dnl Copyright (C) 2002, 2004-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Check for access control list (ACL) primitives
 
@@ -15,9 +16,12 @@ AC_DEFUN([gl_FUNC_ACL_ARG],
   AC_ARG_ENABLE([acl],
     AS_HELP_STRING([[--disable-acl]], [do not support ACLs]),
     , [enable_acl=auto])
+  AC_ARG_WITH([libsmack],
+    [AS_HELP_STRING([--without-libsmack],
+       [do not use libsmack, even on systems that have it])]
+    [], [with_libsmack=maybe])
 ])
 
-
 AC_DEFUN_ONCE([gl_FUNC_ACL],
 [
   AC_REQUIRE([gl_FUNC_ACL_ARG])
@@ -30,8 +34,8 @@ AC_DEFUN_ONCE([gl_FUNC_ACL],
     if test $ac_cv_header_sys_acl_h = yes; then
       gl_saved_LIBS=$LIBS
 
-      dnl Test for POSIX-draft-like API (GNU/Linux, FreeBSD, Mac OS X,
-      dnl IRIX, Tru64, Cygwin >= 2.5).
+      dnl Test for POSIX-draft-like API (GNU/Linux, FreeBSD, NetBSD >= 10,
+      dnl Mac OS X, IRIX, Tru64, Cygwin >= 2.5).
       dnl -lacl is needed on GNU/Linux, -lpacl on OSF/1.
       if test $use_acl = 0; then
         AC_SEARCH_LIBS([acl_get_file], [acl pacl],
@@ -40,6 +44,7 @@ AC_DEFUN_ONCE([gl_FUNC_ACL],
            fi
            AC_CHECK_FUNCS(
              [acl_get_file acl_get_fd acl_set_file acl_set_fd \
+              acl_get_link_np \
               acl_free acl_from_mode acl_from_text \
               acl_delete_def_file acl_extended_file \
               acl_delete_fd_np acl_delete_file_np \
@@ -189,9 +194,35 @@ AC_DEFUN([gl_FILE_HAS_ACL],
   AC_CHECK_HEADERS_ONCE([linux/xattr.h])
   AC_CHECK_FUNCS_ONCE([listxattr])
   FILE_HAS_ACL_LIB=
-  AS_CASE([$enable_acl,$ac_cv_header_linux_xattr_h,$ac_cv_func_listxattr],
-    [no,*,*], [],
-    [*,yes,yes], [],
+
+  gl_file_has_acl_uses_smack=no
+  AS_CASE([$enable_acl,$with_libsmack,$ac_cv_header_linux_xattr_h,$ac_cv_func_listxattr],
+    [no,* | *,no,*], [],
+    [*,*,yes,yes],
+      [AC_CHECK_HEADER([sys/smack.h],
+         [gl_saved_LIBS=$LIBS
+          AC_SEARCH_LIBS([smack_new_label_from_path], [smack],
+            [AC_DEFINE([HAVE_SMACK], [1],
+               [Define to 1 if libsmack is usable.])
+             AS_CASE([$ac_cv_search_smack_new_label_from_path],
+               ["none required"], [],
+               [FILE_HAS_ACL_LIB=$ac_cv_search_new_label_from_path])
+             gl_file_has_acl_uses_smack=yes],
+            [AS_CASE([$with_libsmack],
+               [yes], [AC_MSG_ERROR([libsmack not found or unusable])])])
+          LIBS=$gl_saved_LIBS])])
+
+  gl_file_has_acl_uses_selinux=no
+  AS_CASE([$enable_acl,$with_selinux,$ac_cv_header_linux_xattr_h,$ac_cv_func_listxattr],
+    [no,* | *,no,*], [],
+    [*,*,yes,yes],
+      [AC_REQUIRE([gl_CHECK_HEADER_SELINUX_SELINUX_H])
+       AS_IF([test $USE_SELINUX_SELINUX_H = 1],
+         [FILE_HAS_ACL_LIB="$FILE_HAS_ACL_LIB $LIB_SELINUX"
+          gl_file_has_acl_uses_selinux=yes])])
+
+  AS_CASE([$enable_acl,$gl_file_has_acl_uses_selinux,$gl_file_has_acl_uses_smack],
+    [no,* | *,yes,* | *,yes], [],
     [*],
       [dnl Set gl_need_lib_has_acl to a nonempty value, so that any
        dnl later gl_FUNC_ACL call will set FILE_HAS_ACL_LIB=$LIB_ACL.
index dc78dc19a8791aa73a1ea992e568281548d96467..d746131352e99d49075ef12211df8dfb4caa58e9 100644 (file)
@@ -5,6 +5,7 @@ dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_ALLOCA],
 [
index b90d0f193904da1f25b0cf2ea36ad060e5ccf1b0..02f24db53500ac5317dfe6d1eb0560c7d94cbbaa 100644 (file)
@@ -1,9 +1,10 @@
 # assert_h.m4
-# serial 1
+# serial 4
 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Paul Eggert.
 
@@ -12,30 +13,31 @@ AC_DEFUN([gl_ASSERT_H],
   AC_CACHE_CHECK([for static_assert], [gl_cv_static_assert],
     [gl_saved_CFLAGS=$CFLAGS
      for gl_working in "yes, a keyword" "yes, an <assert.h> macro"; do
-      AS_CASE([$gl_working],
-        [*assert.h*], [CFLAGS="$gl_saved_CFLAGS -DINCLUDE_ASSERT_H"])
-
-      AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#if defined __clang__ && __STDC_VERSION__ < 202311
-             #pragma clang diagnostic error "-Wc2x-extensions"
-             #pragma clang diagnostic error "-Wc++1z-extensions"
-            #endif
-            #ifdef INCLUDE_ASSERT_H
-             #include <assert.h>
-            #endif
-            static_assert (2 + 2 == 4, "arithmetic does not work");
-            static_assert (2 + 2 == 4);
-          ]],
-          [[
-            static_assert (sizeof (char) == 1, "sizeof does not work");
-            static_assert (sizeof (char) == 1);
-          ]])],
-       [gl_cv_static_assert=$gl_working],
-       [gl_cv_static_assert=no])
-      CFLAGS=$gl_saved_CFLAGS
-      test "$gl_cv_static_assert" != no && break
-     done])
+       AS_CASE([$gl_working],
+         [*assert.h*], [CFLAGS="$gl_saved_CFLAGS -DINCLUDE_ASSERT_H"])
+       AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[#if defined __clang__ && __STDC_VERSION__ < 202311
+               #pragma clang diagnostic error "-Wc2x-extensions"
+               #pragma clang diagnostic error "-Wc++1z-extensions"
+              #endif
+              #ifdef INCLUDE_ASSERT_H
+               #include <assert.h>
+              #endif
+              static_assert (2 + 2 == 4, "arithmetic does not work");
+              static_assert (2 + 2 == 4);
+            ]],
+            [[
+              static_assert (sizeof (char) == 1, "sizeof does not work");
+              static_assert (sizeof (char) == 1);
+            ]])
+         ],
+         [gl_cv_static_assert=$gl_working],
+         [gl_cv_static_assert=no])
+       CFLAGS=$gl_saved_CFLAGS
+       test "$gl_cv_static_assert" != no && break
+     done
+    ])
 
   GL_GENERATE_ASSERT_H=false
   AS_CASE([$gl_cv_static_assert],
@@ -48,6 +50,10 @@ AC_DEFUN([gl_ASSERT_H],
 
   dnl The "zz" puts this toward config.h's end, to avoid potential
   dnl collisions with other definitions.
+  dnl Hardcode the known configuration results for GCC and clang, so that
+  dnl a configuration made with the C compiler works also with the C++ compiler
+  dnl and vice versa.
+  dnl The seemingly redundant parentheses are necessary for MSVC 14.
   dnl #undef assert so that programs are not tempted to use it without
   dnl specifically including assert.h.
   dnl #undef __ASSERT_H__ so that on IRIX, when programs later include
@@ -55,7 +61,16 @@ AC_DEFUN([gl_ASSERT_H],
   dnl Break the #undef_s apart with a comment so that 'configure' does
   dnl not comment them out.
   AH_VERBATIM([zzstatic_assert],
-[#if (!defined HAVE_C_STATIC_ASSERT && !defined assert \
+[#if (!(defined __clang__ \
+       ? (defined __cplusplus \
+          ? __cplusplus >= 201703L \
+          : __STDC_VERSION__ >= 202000L && __clang_major__ >= 16) \
+       : (defined __GNUC__ \
+          ? (defined __cplusplus \
+             ? __cplusplus >= 201103L && __GNUG__ >= 6 \
+             : __STDC_VERSION__ >= 202000L && __GNUC__ >= 13) \
+          : defined HAVE_C_STATIC_ASSERT)) \
+     && !defined assert \
      && (!defined __cplusplus \
          || (__cpp_static_assert < 201411 \
              && __GNUG__ < 6 && __clang_major__ < 6)))
@@ -65,8 +80,9 @@ AC_DEFUN([gl_ASSERT_H],
   #undef/**/__ASSERT_H__
  #endif
  /* Solaris 11.4 <assert.h> defines static_assert as a macro with 2 arguments.
-    We need it also to be invocable with a single argument.  */
- #if defined __sun && (__STDC_VERSION__ - 0 >= 201112L) && !defined __cplusplus
+    We need it also to be invocable with a single argument.
+    Haiku 2022 <assert.h> does not define static_assert at all.  */
+ #if (__STDC_VERSION__ - 0 >= 201112L) && !defined __cplusplus
   #undef/**/static_assert
   #define static_assert _Static_assert
  #endif
index 33f255e9f56d5bf28a28417568c6c3d0a90e150a..917a98d326195a7998d4aa66fb945831ddf76c1e 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 2016-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Provide a GCC-compatible __builtin_expect macro in <config.h>.
 
index e91da97b958a25063314600a2d0ae727ac390a31..825b5a08b71f875669941bc4bc8a585459b720d9 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Written by Oskar Liljeblad.
 
index 0fb0de3b59ede38ea9886df5560b9d81568f62d7..fa792b12a1400b1211b17d41ea1c70d7f8515b24 100644 (file)
@@ -1,9 +1,10 @@
 # c-bool.m4
-# serial 1
+# serial 3
 dnl Copyright 2022-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Check for bool that conforms to C2023.
 
@@ -29,12 +30,23 @@ AC_DEFUN([gl_C_BOOL],
   dnl The "zz" puts this toward config.h's end, to avoid potential
   dnl collisions with other definitions.
   dnl If 'bool', 'true' and 'false' do not work, arrange for them to work.
-  dnl In C, this means including <stdbool.h> if it is not already included.
+  dnl Hardcode the known configuration results for GCC and clang, so that
+  dnl a configuration made with the C compiler works also with the C++ compiler
+  dnl and vice versa.
+  dnl The seemingly redundant parentheses are necessary for MSVC 14.
+  dnl "Arrange for them to work", in C, means including <stdbool.h> if it is
+  dnl not already included.
   dnl However, if the preprocessor mistakenly treats 'true' as 0,
   dnl define it to a bool expression equal to 1; this is needed in
   dnl Sun C++ 5.11 (Oracle Solaris Studio 12.2, 2010) and older.
   AH_VERBATIM([zzbool],
-[#ifndef HAVE_C_BOOL
+[#if !(defined __cplusplus \
+      ? 1 \
+      : (defined __clang__ \
+         ? __STDC_VERSION__ >= 202000L && __clang_major__ >= 15 \
+         : (defined __GNUC__ \
+            ? __STDC_VERSION__ >= 202000L && __GNUC__ >= 13 \
+            : defined HAVE_C_BOOL)))
 # if !defined __cplusplus && !defined __bool_true_false_are_defined
 #  if HAVE_STDBOOL_H
 #   include <stdbool.h>
index ec7aac470893d35f56b83fc3c9648da5cec5a38b..74a5f95df5d1400644807b82460f864f2f3f2cbe 100644 (file)
@@ -6,6 +6,7 @@ dnl Copyright (C) 2003-2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Provides canonicalize_file_name and canonicalize_filename_mode, but does
 # not provide or fix realpath.
index 27f6fd153a3051f235e382ed0b61599ae1d5a357..330883f7b869f21c8343567ccd7f6bd1aa8ddc34 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002-2006, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Check for clock_getres, clock_gettime and clock_settime,
 # and set CLOCK_TIME_LIB.
index e69b7402fc215039897bca035a80332eb82cdd6c..69c7046f94d4ff67ee802f83b8c8a8bd7360da0a 100644 (file)
@@ -5,6 +5,7 @@ dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Bruno Haible.
 
index 4ef75f62d40ae5e3111d01ac968f3cf24f567632..dc13ff422fef43cdeb6c06d87d3b188572f61978 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 2019-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_COPY_FILE_RANGE],
 [
index 0ef89b86b15629ec40afd68ba73c3715ccb71a06..d6de386363d680345ba5d687d77322ddfecb845a 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 1997, 1999-2004, 2006, 2009-2024 Free Software Foundation, Inc
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Jim Meyering.
 dnl
index 037ae369a2d4918c4842acfd7f0d850d20c5b157..20fa69f78e8b0fe0d9d9b4babf38d0eb8ae5fe80 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Written by Bruno Haible.
 
index 605cb706c0a6202d76d849a0dccc2ba27169b180..f7ff53a928301a290925da776102aaf283a1f1a5 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2001-2006, 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Find out how to get the file descriptor associated with an open DIR*.
 
index 3437c699adaa5a118db7050b7639f72f25382667..93572ac99a5ceca9cdb47a7fe0b25381fd27b998 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2006, 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_DOUBLE_SLASH_ROOT],
 [
index 786121fd8f3a12ba473c14c3773a4bb9a710bbf0..ed08cc526edf9665968d1a8c24b7b4e46f9d1d59 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002, 2005, 2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_DUP2],
 [
index 3149b4922708a986e906211f59a5eb6b435ab95f..c205a44464b3f179b7042d86b74c31de7ad6772a 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl A placeholder for <endian.h>, for platforms that have issues.
 
index 107960b2e77f6c3f111f8dda512ee8655e0ef7fd..6823dd405bac2047ee96ccc61b57de4fea3af2bb 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2001-2004, 2006-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN_ONCE([gl_ENVIRON],
 [
index 920ea6cc65374a4926026cf2ddd21a125c948cbd..9f8e8341c86ef2571a7ad0d4d053e6a293b89d2e 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2004, 2006, 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_PREREQ([2.61])
 
index 3ade282f4ecae30b41fe995624f86b6f9c017b09..9052b9fa60a779cdb85e94ab3537554070a64401 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_NONREENTRANT_EUIDACCESS],
 [
index 9dc8d6d489d2fef9787a310787248f17cf6b6bff..dcec42f9d203f02de401885ae1013c750517bf78 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 2012-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Check for GNU-style execinfo.h.
 
index 990a7ac3ef001482b8b044772acda0f9715be0df..e2b85224a252ef82c9bd0f67b2e82fd670553f89 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # On AIX, most extensions are already enabled through the _ALL_SOURCE macro,
 # defined by gl_USE_SYSTEM_EXTENSIONS.  gl_USE_AIX_EXTENSIONS additionally
index 1fb68956b3311dd5d5ca6f6c877768795e87b241..7c35419da2c10a58a79a6851f15a69f68ab398d0 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2003, 2006-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Enable extensions on systems that normally disable them.
 
index 547da82afa5cb17258a0ebe5c3974406117ed7dd..5e13812a97c0762df1fba762d6837f98499069d7 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 2012-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl 'extern inline' a la ISO C99.
 
index c5f40e52900c4a06bd25fb3582470d779842ff1f..a47129353d0ae91faa01d11dbca76f1018820e03 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # See if we need to provide faccessat replacement.
 
index 99dcf58aa7a2b338227ed50e22242ca5e4cc748c..51505ebec5b1d2e924b493ab34a472f3f3ee5e12 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2004-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Written by Jim Meyering.
 
index f6d0f37731950af54a96c0e8c3eef73521aac6ea..130403b65672af911ccc6398adbab248e99e419d 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # For now, this module ensures that fcntl()
 # - supports F_DUPFD correctly
index b69f7a0ca81a0bad63a8db5d11cf7188d87c0a30..a9af001a95c3aa94b81332ed4ade7826432b0695 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Configure fcntl.h.
 
index e9268378d6e7ffd772249c4d0acb4b81a83f5e3d..c4c5628fee8143cdb2ca4a789b0ccc4103fab69d 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # See if we need to provide fdopendir.
 
index cb87a564cfdffe96a67712c6b1f618f9c58c4c50..66bb70d8eaf84b736b03adcbfe495ec8545c938f 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002, 2005-2006, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FILEMODE],
 [
index 73fb6142fafdf749a65827c7bad4ff2bd99917c9..605c42cb8ee476da14463adb9cb8d2e0be8373aa 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Check for flexible array member support.
 
index 9f2d83fb1174908df9cecb2a92a774210e0eb147..b8d544f7552186eaa10c27ad92028bc3005986bd 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2000-2001, 2004-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Jim Meyering
 dnl Using code from emacs, based on suggestions from Paul Eggert
index 086d51ddf5bb50205113e78759922e0e3a6b9cb5..3f6a3aad1f701bc3f9e4cdfef88c60cbd2a20d58 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl IEEE 754 standardized three items:
 dnl - The formats of single-float and double-float - nowadays commonly
index a2b596d67f72df417c298901f3efad430a83287c..ed2f606c81423f300a6632234dc763f4a8252300 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2003-2005, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Written by Paul Eggert and Bruno Haible.
 
index c5ef7dfb197e4bfa5cf80816e0344b11fc0def04..be635c5268cefce57680a8627e93c3a1ab6b3c7e 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2004-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Written by Jim Meyering.
 
index 1ce90660858fb523488785bd7b0776e68238fcd7..69d2a65494e35537c1dacaae49e08c0a1cba387d 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 1997-1998, 2000-2001, 2003-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Obtaining file system usage information.
 
index 6f49321c2db6a1f138712309dda9e8be9e6d90aa..288d93fd7135c80740830afeb1bc67ec204249f2 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_FSYNC],
 [
index b5f22605f49048a13905f90d24f92e65083d5cc1..d9910a61ce87741e66c836a4472d745835c6f53a 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # See if we need to provide futimens replacement.
 
index 61139039554a7d833fd639e8c7aaa7668776d1d4..7587db7f9410e9cf21c2ee94f6990197d83c42d0 100644 (file)
@@ -6,6 +6,7 @@ dnl
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_PREREQ([2.59])
 
index aaefe9b298331aa0f50b118e3d95c62660cdda52..b16e486c02813726d9522637bce86f75dfa3fd91 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_GETDTABLESIZE],
 [
index 5457275e9e154c478877c916cc8a7fc8965d7740..e91916edb45b8d42e5be31c17baf7d269e32dcfc 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 1996-1997, 1999-2004, 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Jim Meyering.
 dnl A wrapper around AC_FUNC_GETGROUPS.
index 36513cd4171f3bc612896e97ddaa3078065de056..a7d0a9308b034ffd0118432a13c1808774aea76b 100644 (file)
@@ -7,6 +7,7 @@ dnl
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_PREREQ([2.59])
 
index 0918bcd21eca25a703918ac6df8d3d517ff99c16..e1a4d9be6593fe8de7196589be6e6ece140d1203 100644 (file)
@@ -5,6 +5,7 @@ dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Check for getloadavg.
 
index 53cab8bef93126239bff3427aeb86bbf961a5e75..a5451c7e7c35acc536869655eccdac7dee5b115a 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002-2006, 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Request a POSIX compliant getopt function.
 AC_DEFUN([gl_FUNC_GETOPT_POSIX],
@@ -77,7 +78,7 @@ AC_DEFUN([gl_GETOPT_CHECK_HEADERS],
   fi
 
   dnl POSIX 2008 does not specify leading '+' behavior, but see
-  dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on
+  dnl https://austingroupbugs.net/view.php?id=191 for a recommendation on
   dnl the next version of POSIX.  For now, we only guarantee leading '+'
   dnl behavior with getopt-gnu.
   if test -z "$gl_replace_getopt"; then
index 0051c9c4218a8546ab834341f9b97604b829d9ff..312d2c92e755c99f5cb2bdcd4ac706cbc9c46928 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 2020-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Written by Paul Eggert.
 
index 299f3d1b788ee473a48ab52ead8c7b2e989c00df..1e964ab6d4accbca0950567352f01396a1674376 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002, 2004-2006, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_GETTIME],
 [
index 8135f89e584c792708335d5e094500a78ed69c41..65963fbafa783c05ac8cc3f0464ddd40c1db7f43 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2001-2003, 2005, 2007, 2009-2024 Free Software Foundation, Inc
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Jim Meyering.
 
index d985522893f38f479801c035e0ff0f2ee35a30ad..0a5cbd55ecfdfa6f48bab6d30f41b20c2478be72 100644 (file)
@@ -1,9 +1,10 @@
 # gnulib-common.m4
-# serial 103
+# serial 106
 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_PREREQ([2.62])
 
@@ -842,6 +843,35 @@ AC_DEFUN([gl_COMMON_BODY], [
 #  define _GL_UNUSED_LABEL
 # endif
 #endif
+
+/* The following attributes enable detection of multithread-safety problems
+   and resource leaks at compile-time, by clang â‰¥ 15, when the warning option
+   -Wthread-safety is enabled.  For usage, see
+   <https://clang.llvm.org/docs/ThreadSafetyAnalysis.html>.  */
+#ifndef _GL_ATTRIBUTE_CAPABILITY_TYPE
+# if __clang_major__ >= 15
+#  define _GL_ATTRIBUTE_CAPABILITY_TYPE(concept) \
+     __attribute__ ((__capability__ (concept)))
+# else
+#  define _GL_ATTRIBUTE_CAPABILITY_TYPE(concept)
+# endif
+#endif
+#ifndef _GL_ATTRIBUTE_ACQUIRE_CAPABILITY
+# if __clang_major__ >= 15
+#  define _GL_ATTRIBUTE_ACQUIRE_CAPABILITY(resource) \
+     __attribute__ ((__acquire_capability__ (resource)))
+# else
+#  define _GL_ATTRIBUTE_ACQUIRE_CAPABILITY(resource)
+# endif
+#endif
+#ifndef _GL_ATTRIBUTE_RELEASE_CAPABILITY
+# if __clang_major__ >= 15
+#  define _GL_ATTRIBUTE_RELEASE_CAPABILITY(resource) \
+     __attribute__ ((__release_capability__ (resource)))
+# else
+#  define _GL_ATTRIBUTE_RELEASE_CAPABILITY(resource)
+# endif
+#endif
 ])
   AH_VERBATIM([c_linkage],
 [/* In C++, there is the concept of "language linkage", that encompasses
@@ -1351,6 +1381,7 @@ AC_DEFUN([gl_CC_GNULIB_WARNINGS],
     dnl -Wno-type-limits                      >= 4.3          >= 3.9
     dnl -Wno-undef                            >= 3            >= 3.9
     dnl -Wno-unsuffixed-float-constants       >= 4.5
+    dnl -Wno-unused-const-variable            >= 4.4          >= 3.9
     dnl -Wno-unused-function                  >= 3            >= 3.9
     dnl -Wno-unused-parameter                 >= 3            >= 3.9
     dnl
@@ -1380,6 +1411,9 @@ AC_DEFUN([gl_CC_GNULIB_WARNINGS],
       -Wno-sign-conversion
       -Wno-type-limits
       #endif
+      #if (__GNUC__ + (__GNUC_MINOR__ >= 4) > 4 && !defined __clang__) || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+      -Wno-unused-const-variable
+      #endif
       #if (__GNUC__ + (__GNUC_MINOR__ >= 5) > 4 && !defined __clang__)
       -Wno-unsuffixed-float-constants
       #endif
index 31784600d445b869216139687f20ec75c71bb840..5c28ea8b3b20e2e42a529b608c2887f75e58b6db 100644 (file)
@@ -162,7 +162,6 @@ AC_DEFUN([gl_EARLY],
   # Code from module rawmemchr:
   # Code from module readlink:
   # Code from module readlinkat:
-  # Code from module realloc-gnu:
   # Code from module realloc-posix:
   # Code from module regex:
   # Code from module root-uid:
@@ -221,7 +220,6 @@ AC_DEFUN([gl_EARLY],
   # Code from module verify:
   # Code from module vla:
   # Code from module warnings:
-  # Code from module xalloc-oversized:
   # Code from module year2038:
   AC_REQUIRE([AC_SYS_YEAR2038])
 ])
@@ -424,6 +422,11 @@ AC_DEFUN([gl_INIT],
   ])
   gl_SYS_STAT_MODULE_INDICATOR([lstat])
   gl_MODULE_INDICATOR([lstat])
+  AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
+  if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
+    AC_LIBOBJ([malloc])
+  fi
+  gl_STDLIB_MODULE_INDICATOR([malloc-posix])
   gl_FUNC_MEMMEM_SIMPLE
   if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then
     AC_LIBOBJ([memmem])
@@ -681,18 +684,15 @@ AC_DEFUN([gl_INIT],
   gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1=false
   gl_gnulib_enabled_lchmod=false
   gl_gnulib_enabled_e80bf6f757095d2e5fc94dafb8f8fc8b=false
-  gl_gnulib_enabled_ef455225c00f5049c808c2eda3e76866=false
   gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31=false
   gl_gnulib_enabled_open=false
   gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7=false
   gl_gnulib_enabled_rawmemchr=false
-  gl_gnulib_enabled_d3b2383720ee0e541357aa2aac598e2b=false
   gl_gnulib_enabled_61bcaca76b3e6f9ae55d57a1c3193bc4=false
   gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c=false
   gl_gnulib_enabled_strtoll=false
   gl_gnulib_enabled_utimens=false
   gl_gnulib_enabled_verify=false
-  gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec=false
   func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b ()
   {
     if $gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b; then :; else
@@ -788,9 +788,6 @@ AC_DEFUN([gl_INIT],
                      [test $HAVE_GETGROUPS = 0 || test $REPLACE_GETGROUPS = 1])
       gl_UNISTD_MODULE_INDICATOR([getgroups])
       gl_gnulib_enabled_getgroups=true
-      if test $HAVE_GETGROUPS = 0 || test $REPLACE_GETGROUPS = 1; then
-        func_gl_gnulib_m4code_ef455225c00f5049c808c2eda3e76866
-      fi
     fi
   }
   func_gl_gnulib_m4code_be453cec5eecf5731a274f2de7f2db36 ()
@@ -813,7 +810,6 @@ AC_DEFUN([gl_INIT],
     if $gl_gnulib_enabled_8444034ea779b88768865bb60b4fb8c9; then :; else
       AC_PROG_MKDIR_P
       gl_gnulib_enabled_8444034ea779b88768865bb60b4fb8c9=true
-      func_gl_gnulib_m4code_ef455225c00f5049c808c2eda3e76866
       func_gl_gnulib_m4code_61bcaca76b3e6f9ae55d57a1c3193bc4
     fi
   }
@@ -831,7 +827,7 @@ AC_DEFUN([gl_INIT],
         func_gl_gnulib_m4code_getgroups
       fi
       if test $HAVE_GROUP_MEMBER = 0; then
-        func_gl_gnulib_m4code_d3b2383720ee0e541357aa2aac598e2b
+        func_gl_gnulib_m4code_e80bf6f757095d2e5fc94dafb8f8fc8b
       fi
     fi
   }
@@ -856,24 +852,6 @@ AC_DEFUN([gl_INIT],
       fi
       gl_STDLIB_MODULE_INDICATOR([malloc-gnu])
       gl_gnulib_enabled_e80bf6f757095d2e5fc94dafb8f8fc8b=true
-      func_gl_gnulib_m4code_ef455225c00f5049c808c2eda3e76866
-      if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 1; then
-        func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec
-      fi
-    fi
-  }
-  func_gl_gnulib_m4code_ef455225c00f5049c808c2eda3e76866 ()
-  {
-    if $gl_gnulib_enabled_ef455225c00f5049c808c2eda3e76866; then :; else
-      AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
-      if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
-        AC_LIBOBJ([malloc])
-      fi
-      gl_STDLIB_MODULE_INDICATOR([malloc-posix])
-      gl_gnulib_enabled_ef455225c00f5049c808c2eda3e76866=true
-      if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
-        func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec
-      fi
     fi
   }
   func_gl_gnulib_m4code_5264294aa0a5557541b53c8c741f7f31 ()
@@ -920,39 +898,15 @@ AC_DEFUN([gl_INIT],
       gl_gnulib_enabled_rawmemchr=true
     fi
   }
-  func_gl_gnulib_m4code_d3b2383720ee0e541357aa2aac598e2b ()
-  {
-    if $gl_gnulib_enabled_d3b2383720ee0e541357aa2aac598e2b; then :; else
-      gl_FUNC_REALLOC_GNU
-      if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then
-        AC_LIBOBJ([realloc])
-      fi
-      gl_STDLIB_MODULE_INDICATOR([realloc-gnu])
-      gl_gnulib_enabled_d3b2383720ee0e541357aa2aac598e2b=true
-      if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then
-        func_gl_gnulib_m4code_e80bf6f757095d2e5fc94dafb8f8fc8b
-      fi
-      func_gl_gnulib_m4code_61bcaca76b3e6f9ae55d57a1c3193bc4
-      if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then
-        func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec
-      fi
-    fi
-  }
   func_gl_gnulib_m4code_61bcaca76b3e6f9ae55d57a1c3193bc4 ()
   {
     if $gl_gnulib_enabled_61bcaca76b3e6f9ae55d57a1c3193bc4; then :; else
       gl_FUNC_REALLOC_POSIX
-      if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then
-        AC_LIBOBJ([realloc])
-      fi
+      gl_FUNC_REALLOC_0_NONNULL
+      gl_CONDITIONAL([GL_COND_OBJ_REALLOC_POSIX],
+                     [test $REPLACE_REALLOC_FOR_REALLOC_POSIX != 0])
       gl_STDLIB_MODULE_INDICATOR([realloc-posix])
       gl_gnulib_enabled_61bcaca76b3e6f9ae55d57a1c3193bc4=true
-      if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then
-        func_gl_gnulib_m4code_ef455225c00f5049c808c2eda3e76866
-      fi
-      if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then
-        func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec
-      fi
     fi
   }
   func_gl_gnulib_m4code_6099e9737f757db36c47fa9d9f02e88c ()
@@ -987,12 +941,6 @@ AC_DEFUN([gl_INIT],
       gl_gnulib_enabled_verify=true
     fi
   }
-  func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec ()
-  {
-    if $gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec; then :; else
-      gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec=true
-    fi
-  }
   if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
     func_gl_gnulib_m4code_925677f0343de64b89a9f0c790b4104c
   fi
@@ -1053,9 +1001,6 @@ AC_DEFUN([gl_INIT],
   if $GL_GENERATE_IEEE754_H; then
     func_gl_gnulib_m4code_endian
   fi
-  if test $REPLACE_MKTIME = 1; then
-    func_gl_gnulib_m4code_verify
-  fi
   if test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1; then
     func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b
   fi
@@ -1065,6 +1010,9 @@ AC_DEFUN([gl_INIT],
   if test $ac_use_included_regex = yes; then
     func_gl_gnulib_m4code_fd38c7e463b54744b77b98aeafb4fa7c
   fi
+  if test $ac_use_included_regex = yes; then
+    func_gl_gnulib_m4code_e80bf6f757095d2e5fc94dafb8f8fc8b
+  fi
   if test $ac_use_included_regex = yes; then
     func_gl_gnulib_m4code_verify
   fi
@@ -1099,18 +1047,15 @@ AC_DEFUN([gl_INIT],
   AM_CONDITIONAL([gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1], [$gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_lchmod], [$gl_gnulib_enabled_lchmod])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_e80bf6f757095d2e5fc94dafb8f8fc8b], [$gl_gnulib_enabled_e80bf6f757095d2e5fc94dafb8f8fc8b])
-  AM_CONDITIONAL([gl_GNULIB_ENABLED_ef455225c00f5049c808c2eda3e76866], [$gl_gnulib_enabled_ef455225c00f5049c808c2eda3e76866])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31], [$gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_open], [$gl_gnulib_enabled_open])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7], [$gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_rawmemchr], [$gl_gnulib_enabled_rawmemchr])
-  AM_CONDITIONAL([gl_GNULIB_ENABLED_d3b2383720ee0e541357aa2aac598e2b], [$gl_gnulib_enabled_d3b2383720ee0e541357aa2aac598e2b])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_61bcaca76b3e6f9ae55d57a1c3193bc4], [$gl_gnulib_enabled_61bcaca76b3e6f9ae55d57a1c3193bc4])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c], [$gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoll], [$gl_gnulib_enabled_strtoll])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_utimens], [$gl_gnulib_enabled_utimens])
   AM_CONDITIONAL([gl_GNULIB_ENABLED_verify], [$gl_gnulib_enabled_verify])
-  AM_CONDITIONAL([gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec], [$gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec])
   # End of code from modules
   m4_ifval(gl_LIBSOURCES_LIST, [
     m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
@@ -1468,6 +1413,7 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/stdio-read.c
   lib/stdio-write.c
   lib/stdio.in.h
+  lib/stdlib.c
   lib/stdlib.in.h
   lib/stpcpy.c
   lib/str-two-way.h
@@ -1506,7 +1452,6 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/verify.h
   lib/vla.h
   lib/warn-on-use.h
-  lib/xalloc-oversized.h
   m4/00gnulib.m4
   m4/__inline.m4
   m4/absolute-header.m4
@@ -1525,7 +1470,6 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/dirfd.m4
   m4/double-slash-root.m4
   m4/dup2.m4
-  m4/eealloc.m4
   m4/endian_h.m4
   m4/environ.m4
   m4/errno_h.m4
@@ -1605,6 +1549,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/readutmp.m4
   m4/realloc.m4
   m4/regex.m4
+  m4/selinux-selinux-h.m4
   m4/sha1.m4
   m4/sha256.m4
   m4/sha512.m4
index f8ceb1d8186438e2a4b684863e4918846bfd7b72..7e0230dcecb9280aa83aa6210f1c7b0130465857 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 1999-2001, 2003-2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Written by Jim Meyering
 
index fa41db5c94565dc8d7152fcc726b14c2ce36bdd5..227a90dbdf4f4def00be84f4c1229989773d9a6f 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 2018-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Configure ieee754-h module
 
index 03e852518e45e37825ac79ba3cfd29ec5037c5fd..0043d560af9319a99baf19f7c3813343f516fc28 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2006-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Paul Eggert and Derek Price.
 
index c43cd16207b03586f5eb7d72da478b412731fedd..2173995ea6f1341a7bbbfe5537f03341203dd949 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2006-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Derek Price, Bruno Haible.
 dnl Test whether <inttypes.h> is supported or must be substituted.
index 28813483594d1cacd22361037afab7c13e6e027e..2d30b8471b7f9727a46ec26bf7f5f4fa564e1298 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 1992-1996, 1998-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Enable large files on systems where this is not the default.
 # Enable support for files on Linux file systems with 64-bit inode numbers.
@@ -294,7 +295,7 @@ AC_CONFIG_COMMANDS_PRE([_AC_SYS_YEAR2038_ENABLE])])
 # By default, many hosts won't let programs access large files;
 # one must use special compiler options to get large-file access to work.
 # For more details about this brain damage please see:
-# http://www.unix.org/version2/whatsnew/lfs20mar.html
+# https://www.unix.org/version2/whatsnew/lfs20mar.html
 # Additionally, on Linux file systems with 64-bit inodes a file that happens
 # to have a 64-bit inode number cannot be accessed by 32-bit applications on
 # Linux x86/x86_64.  This can occur with file systems such as XFS and NFS.
index 797cb446938b748a1698dbf6bf37de3005af7042..29f06a22847c6ecbc6778b60422f00ce305f44f9 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2005-2006, 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Paul Eggert.
 dnl Provide a replacement for lchmod on hosts that lack a working version.
index a82a6fa1b71a2cbda5f2b98486f65e0d2d0f9430..e6dad10051f64e42d2920bb804a48dc0e0cda151 100644 (file)
@@ -5,6 +5,7 @@ dnl Copyright 2020-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl gl_LIBGMP
 dnl Search for an installed libgmp.
index 1b619e1eb2ee372500c0bdfbd52b0464e6a4653b..55dea94c9bf9cf841a6a5de4de737b6dc093addd 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 2016-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Check whether limits.h has needed features.
 
index 39d08a23b0b18e9ad8177ecda468220380ea2768..a194894a43d2d373cf3242683e175636756371fa 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2003-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Bruno Haible.
 
index f838e2cc1e8751ad2072820deb345ed55e9ae52d..530d99b3a1500c37a1128d45a99e56f8c8304d03 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 1997-2001, 2003-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Jim Meyering.
 
index ee6df5c3fb686096963d481ad5f6936fa84d9d61..a854ade93b37dcef1862d172d626e68c3ebbd64e 100644 (file)
@@ -1,12 +1,24 @@
 # malloc.m4
-# serial 34
+# serial 43
 dnl Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
-
-# This is adapted with modifications from upstream Autoconf here:
-# https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n949
+dnl This file is offered as-is, without any warranty.
+
+m4_version_prereq([2.73], [], [
+# Modules that use this macro directly or indirectly should depend
+# on extensions-aix, so that _LINUX_SOURCE_COMPAT gets defined
+# before this macro gets invoked.  This helps on AIX 7.2 and earlier
+# if !(__VEC__ || __AIXVEC), and doesn't hurt otherwise.
+#
+# This is copied from upstream Autoconf here:
+# https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=1f38316f6af7bf63e5e7dd187ff6456e07ad743e#n971
+# _AC_FUNC_MALLOC_IF(IF-WORKS, IF-NOT[, UNKNOWN-ASSUME])
+# ------------------------------------------------------
+# If 'malloc (0)' returns nonnull, run IF-WORKS, otherwise, IF-NOT.
+# If it is not known whether it works, assume the shell word UNKNOWN-ASSUME,
+# which should end in "yes" or in something else (the latter is the default).
 AC_DEFUN([_AC_FUNC_MALLOC_IF],
 [
   AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
@@ -15,61 +27,81 @@ AC_DEFUN([_AC_FUNC_MALLOC_IF],
     [AC_RUN_IFELSE(
        [AC_LANG_PROGRAM(
           [[#include <stdlib.h>
-          ]],
-          [[void *p = malloc (0);
-            void * volatile vp = p;
-            int result = !vp;
+            /* Use pmalloc to test; 'volatile' prevents the compiler
+               from optimizing the malloc call away.  */
+            void *(*volatile pmalloc) (size_t) = malloc;]],
+          [[void *p = pmalloc (0);
+            int result = !p;
             free (p);
-            return result;]])
-       ],
+            return result;]])],
        [ac_cv_func_malloc_0_nonnull=yes],
        [ac_cv_func_malloc_0_nonnull=no],
-       [case "$host_os" in
-          # Guess yes on platforms where we know the result.
-          *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
-          | gnu* | *-musl* | midipix* | midnightbsd* \
-          | hpux* | solaris* | cygwin* | mingw* | windows* | msys* )
-            ac_cv_func_malloc_0_nonnull="guessing yes" ;;
-          # If we don't know, obey --enable-cross-guesses.
-          *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;;
-        esac
-       ])
-    ])
+       [AS_CASE([$host_os],
+          [# Guess yes on platforms where we know the result.
+           *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
+           | gnu* | *-musl* | midipix* | midnightbsd* \
+           | hpux* | solaris* | cygwin* | mingw* | windows* | msys*],
+            [ac_cv_func_malloc_0_nonnull="guessing yes"],
+          [# Guess as follows if we don't know.
+           ac_cv_func_malloc_0_nonnull=m4_default([$3], ["guessing no"])])])])
   AS_CASE([$ac_cv_func_malloc_0_nonnull], [*yes], [$1], [$2])
 ])# _AC_FUNC_MALLOC_IF
+])
+
+# gl_FUNC_MALLOC_0_NONNULL
+# ------------------------
+# If 'malloc (0)' returns nonnull define HAVE_MALLOC_0_NONNULL.
+# Also, set ac_cv_func_malloc_0_nonnull to a string that ends in
+# "yes", otherwise set it to something else.  If unknown whether
+# malloc (0) works, guess as normal for cross-builds.
+AC_DEFUN([gl_FUNC_MALLOC_0_NONNULL],
+[
+  _AC_FUNC_MALLOC_IF(
+    [AC_DEFINE([HAVE_MALLOC_0_NONNULL], [1],
+       [Define to 1 if malloc (0) returns nonnull.])],
+    [],
+    ["$gl_cross_guess_normal"])
+])
 
 # gl_FUNC_MALLOC_GNU
 # ------------------
-# Replace malloc if it is not compatible with GNU libc.
+# Test whether malloc (0) is compatible with GNU libc.
+# Replace malloc if not.
+# Define HAVE_MALLOC_0_NONNULL if malloc (0) returns nonnull (except upon
+# out-of-memory).
+# Define HAVE_MALLOC_PTRDIFF if malloc (N) reliably fails when N exceeds
+# PTRDIFF_MAX.
 AC_DEFUN([gl_FUNC_MALLOC_GNU],
 [
   AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
   AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
+  AC_REQUIRE([gl_FUNC_MALLOC_0_NONNULL])
 
-  dnl Through the dependency on module extensions-aix, _LINUX_SOURCE_COMPAT
-  dnl gets defined already before this macro gets invoked.  This helps
-  dnl if !(__VEC__ || __AIXVEC), and doesn't hurt otherwise.
-
-  REPLACE_MALLOC_FOR_MALLOC_GNU="$REPLACE_MALLOC_FOR_MALLOC_POSIX"
-  if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 0; then
-    _AC_FUNC_MALLOC_IF([], [REPLACE_MALLOC_FOR_MALLOC_GNU=1])
-  fi
+  AS_CASE([$ac_cv_func_malloc_0_nonnull],
+    [*yes],
+      [REPLACE_MALLOC_FOR_MALLOC_GNU=$REPLACE_MALLOC_FOR_MALLOC_POSIX],
+    [REPLACE_MALLOC_FOR_MALLOC_GNU=1])
 ])
 
 # gl_FUNC_MALLOC_PTRDIFF
 # ----------------------
-# Test whether malloc (N) reliably fails when N exceeds PTRDIFF_MAX,
-# and replace malloc otherwise.
+# Test whether malloc (N) reliably fails when N exceeds PTRDIFF_MAX.
+# Define HAVE_MALLOC_PTRDIFF if yes.
+# Replace malloc if not.
 AC_DEFUN([gl_FUNC_MALLOC_PTRDIFF],
 [
   AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
   AC_REQUIRE([gl_CHECK_MALLOC_PTRDIFF])
-  test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC_FOR_MALLOC_POSIX=1
+  AS_IF([test "$gl_cv_malloc_ptrdiff" = yes],
+    [AC_DEFINE([HAVE_MALLOC_PTRDIFF], 1,
+       [Define to 1 if malloc-like functions do not allocate objects
+        larger than PTRDIFF_MAX bytes.])],
+    [REPLACE_MALLOC_FOR_MALLOC_POSIX=1])
 ])
 
 # Test whether malloc, realloc, calloc refuse to create objects
 # larger than what can be expressed in ptrdiff_t.
-# Set gl_cv_func_malloc_gnu to yes or no accordingly.
+# Set gl_cv_func_malloc_gnu.
 AC_DEFUN([gl_CHECK_MALLOC_PTRDIFF],
 [
   AC_CACHE_CHECK([whether malloc is ptrdiff_t safe],
@@ -113,16 +145,19 @@ AC_DEFUN([gl_FUNC_MALLOC_POSIX],
   AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
   AC_REQUIRE([gl_FUNC_MALLOC_PTRDIFF])
   AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
-  if test "$gl_cv_func_malloc_posix" = yes; then
-    AC_DEFINE([HAVE_MALLOC_POSIX], [1],
-      [Define if malloc, realloc, and calloc set errno on allocation failure.])
-  else
-    REPLACE_MALLOC_FOR_MALLOC_POSIX=1
-  fi
+  case "$gl_cv_func_malloc_posix" in
+    *yes)
+      AC_DEFINE([HAVE_MALLOC_POSIX], [1],
+        [Define if malloc, realloc, and calloc set errno on allocation failure.])
+      ;;
+    *)
+      REPLACE_MALLOC_FOR_MALLOC_POSIX=1
+      ;;
+  esac
 ])
 
 # Test whether malloc, realloc, calloc set errno to ENOMEM on failure.
-# Set gl_cv_func_malloc_posix to yes or no accordingly.
+# Set gl_cv_func_malloc_posix to *yes or *no accordingly.
 AC_DEFUN([gl_CHECK_MALLOC_POSIX],
 [
   AC_REQUIRE([AC_CANONICAL_HOST])
@@ -133,10 +168,24 @@ AC_DEFUN([gl_CHECK_MALLOC_POSIX],
       dnl some systems go to their knees when you do that. So assume that
       dnl all Unix implementations of the function set errno on failure,
       dnl except on those platforms where we have seen 'test-malloc-gnu',
-      dnl 'test-realloc-gnu', 'test-calloc-gnu' fail.
+      dnl 'test-realloc-posix', 'test-calloc-gnu' fail.
       case "$host_os" in
         mingw* | windows*)
-          gl_cv_func_malloc_posix=no ;;
+          dnl Old MSVCRT from 2001 did not set errno=ENOMEM when malloc failed.
+          dnl More recent MSVCRT from 2019 does so.
+          dnl UCRT is the successor of MSVCRT. Assume that UCRT does so as well.
+          AC_COMPILE_IFELSE(
+            [AC_LANG_PROGRAM(
+              [[#include <stdio.h>
+                #ifndef _UCRT
+                msvcrt yuck
+                #endif
+              ]],
+              [[]])
+            ],
+            [gl_cv_func_malloc_posix="guessing yes"],
+            [gl_cv_func_malloc_posix="guessing no"])
+          ;;
         irix* | solaris*)
           dnl On IRIX 6.5, the three functions return NULL with errno unset
           dnl when the argument is larger than PTRDIFF_MAX.
index 5b0baee20577feb8af1f5b6745e9bf0f1357dae0..912f6aafd112bd3a61db2e70ac3c915b1a54e08a 100644 (file)
@@ -1,9 +1,10 @@
 # manywarnings.m4
-# serial 27
+# serial 28
 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Simon Josefsson
 
@@ -185,6 +186,9 @@ AC_DEFUN([gl_MANYWARN_ALL_GCC(C)],
     esac
   fi
 
+  # These options are not supported by gcc, but are useful with clang.
+  AS_VAR_APPEND([$1], [' -Wthread-safety'])
+
   # Disable specific options as needed.
   if test "$gl_cv_cc_nomfi_needed" = yes; then
     AS_VAR_APPEND([$1], [' -Wno-missing-field-initializers'])
index 66d65cd7c110fa4ddb9ec9f84a2715c35ff98c74..ae11afa98216dee0c6a0d0eca01d69765abd1d1f 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2000-2002, 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # From Paul Eggert.
 
index a7b33d771ff983834af0c1fba1966954bf09e766..e081a6b42c64ac7e8f016f1715359587167afc22 100644 (file)
--- a/m4/md5.m4
+++ b/m4/md5.m4
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002-2006, 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_MD5],
 [
index e6b1d91cbb196db134892d359b559311c5b7d4c3..fba98ab759bf268160a1ef5db7fceae443cddc2b 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002-2004, 2007-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Check that memmem is present and functional.
 AC_DEFUN([gl_FUNC_MEMMEM_SIMPLE],
index 377fda3caca680102b588d1ac5ff1f879b09786c..d73b40fa2b36ee25e54f3ef8b6ff52f9b9c1bbfc 100644 (file)
@@ -5,6 +5,7 @@ dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_MEMPCPY],
 [
index d8c931e90cc6db56f65b1591216d0f778d23ffc7..a0c8a9966406bb539c1dc193d810bf338aaa7181 100644 (file)
@@ -5,6 +5,7 @@ dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_MEMRCHR],
 [
index 499a95968ab48cfaccc9f34a0ea6610041894f8a..abdabffcfa9276de09342148545346dcc4fdb1f2 100644 (file)
@@ -1,9 +1,10 @@
 # memset_explicit.m4
-# serial 3
+# serial 4
 dnl Copyright 2022-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_MEMSET_EXPLICIT],
 [
@@ -22,6 +23,36 @@ AC_DEFUN([gl_FUNC_MEMSET_EXPLICIT],
 
 AC_DEFUN([gl_PREREQ_MEMSET_EXPLICIT],
 [
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   AC_CHECK_FUNCS([explicit_memset])
   AC_CHECK_FUNCS_ONCE([memset_s])
+  if test $ac_cv_func_memset_s = yes; then
+    AC_CACHE_CHECK([for working memset_s],
+      [gl_cv_func_memset_s_works],
+      [AC_RUN_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[#include <string.h>
+              #include <stddef.h>
+            ]], [[
+              (void) memset_s (NULL, 0, '?', 0);
+            ]])
+         ],
+         [gl_cv_func_memset_s_works=yes],
+         [gl_cv_func_memset_s_works=no],
+         [case "$host_os" in
+            # Guess no on Solaris.
+            solaris*)
+              gl_cv_func_memset_s_works="guessing no" ;;
+            *)
+              gl_cv_func_memset_s_works="guessing yes" ;;
+          esac
+         ])
+      ])
+    case "$gl_cv_func_memset_s_works" in
+      *yes)
+        AC_DEFINE([HAVE_MEMSET_S_SUPPORTS_ZERO], [1],
+          [Define to 1 if memset_s support zero-length operations.])
+        ;;
+    esac
+  fi
 ])
index bc7d0c345fa88a9b1c0cb42c4de1b458e2571a6e..2ce09e0777483db27bc13ea96ddebef28132c914 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_PREREQ([2.53])
 
index 57a033b859ebb359dfe5ce37e9d6ce9e15531c3c..4656612b0ba24850917d8c613e1889a7cfe4279e 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_MKOSTEMP],
 [
index 85c52454aa5eaf9b4586bbb060b7c4e2d525602c..cc4998804ed97443a2dd4023782d546e25c6f094 100644 (file)
@@ -1,9 +1,10 @@
 # mktime.m4
-# serial 39
+# serial 42
 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Jim Meyering.
 
index 0d5c2808289dd9183ab6538a301cafa77faa30d2..159ef755d0d540a12840f1e6171aa028e8156ebc 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # For using mode_t, it's sufficient to use AC_TYPE_MODE_T and
 # include <sys/types.h>.
index 3af29d39a0b949b1d47a493dde7deef2cb65ac0c..bddff28e7c4266dfb2da36fb783cf7a0198454bd 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Determine whether the compiler is or may be producing universal binaries.
 #
index 0d4de8926a22b5c051b5387d301e876872681fcd..6dccf1049f936ae022e4a135ef2ea69954509e6a 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2019-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Test for musl libc, despite the musl libc authors don't like it
 # <https://wiki.musl-libc.org/faq.html>
index a7281b8ac5f8e56ccf54672220fdece25f4948e6..569da93c01a3629b7c7d0125dc2e5a0a4322a5a3 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 1999-2001, 2003-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Jim Meyering.
 dnl Check for the nanosleep function.
index cbe8fe82d5d1dd1a4f32e7acd2d7652920f35e21..dee7d74c7274c0188f1a8da76b6900198d6d8e75 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Based on libsigsegv, from Bruno Haible and Paolo Bonzini.
 
index 317741d9b8dc17cd1834f76b08da9dd431c89d6e..9226560f6b2e2c33ab64d46d79eee2bff4822e12 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_NPROC],
 [
index 534507d300baf54a5829fe305dd63539e4e0ba6e..f6b614a3d04b36fb50ad57a1f9ed0f61dbba6931 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 1996-1997, 1999-2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Written by Jim Meyering and Paul Eggert.
 
index db6035dbeb3afef39b8593fd691e2d883067d9a6..42cd98fbfb8f8fde098f8dc8f4e329e7ffb2a92f 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2012-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Check whether to override the 'off_t' type.
 dnl Set WINDOWS_64_BIT_OFF_T.
index 6defdfb4005fbfab8b61919a22c205089acccb40..91aa6efbea6738e77946957c98e0a7d501231976 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 2017-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Test whether O_CLOEXEC is defined.
 
index 03460e422d9079e561170bfdb77f21e3475ca1c7..9d5c21ce1fb6a90f8a1ebbc54367840d82577b1d 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2007-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Tests whether open() and creat() recognize a trailing slash.
 dnl Sets gl_cv_func_open_slash.
index 62a11a110c59a39e76d46bee566f9b0ac284c2f9..600c2ec80dd5ae6a1690a257faaf20edcfd0f4d4 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2007-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_OPEN],
 [
index 4280837f1e14901be6aeb051878525d94454c7c6..958089e2d3a62433d73f894f791e57b6782a7d81 100644 (file)
@@ -5,6 +5,7 @@ dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_PATHMAX],
 [
index 8bedcc6bcd3783ee403de0f45ac361d8f0cca48d..e014c0bd8f50f9c267314bc45f460594523a3bb0 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2020-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # The following implementation works around a problem in autoconf <= 2.69.
 m4_version_prereq([2.70], [], [
index e8ace7f077e56f62abbf2a01158a9dab06424380..2bee623c0052e4d9c25f33400d9c9d488374289b 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_PIPE2],
 [
index 23d1fadd6372d1b06adb137a54f642563f5b7aa9..546235ec6a5f987ef9cf08cb6788ae7f58bfc3ce 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2011-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_PSELECT],
 [
index 437869f6dbec4e54d8e8c51ba19684086dc31672..2de8ebebf16344cecbddcf5d76c87783a78ddf3f 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2011-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
 [
index 6e0fa0a55e898bf832a7f236e5c666bcb50c3303..ffef17e982fc2ea7a0fcb7745d9a324f66b61ba9 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2003, 2007-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_RAWMEMCHR],
 [
index 7ebdb6ca14f15e61560f920f25e927e43a60f669..a7eb43504abbe0a79d8d11c8067234cc624e6f6b 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2003, 2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_READLINK],
 [
index 4c4e3588e0aa1ee0cc38cf89bf7b7f8f33cf20f9..81e389a111702ac42d1e7a6edb5552067e320d2b 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # See if we need to provide readlinkat replacement.
 
index 1d9071fe65a3a36dd6dc0bf55a5b2150ceaf7402..c11c2970609c4ff2bde34c58a336c58f91e12abc 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_READUTMP],
 [
index cc91102836f3f34674bc427da4b669160dc828fd..6401f22847c4c0bfcfd9caea085a0c351b391201 100644 (file)
@@ -1,59 +1,22 @@
 # realloc.m4
-# serial 32
+# serial 39
 dnl Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
-# This is adapted with modifications from upstream Autoconf here:
-# https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n1455
-AC_DEFUN([_AC_FUNC_REALLOC_IF],
+# An an experimental option, the user can request a sanitized realloc()
+# implementation, i.e. one that aborts upon undefined behaviour,
+# by setting
+#   gl_cv_func_realloc_sanitize=yes
+# at configure time.
+AC_DEFUN([gl_FUNC_REALLOC_SANITIZED],
 [
-  AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
-  AC_CACHE_CHECK([whether realloc (0, 0) returns nonnull],
-    [ac_cv_func_realloc_0_nonnull],
-    [AC_RUN_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <stdlib.h>
-          ]],
-          [[void *p = realloc (0, 0);
-            void * volatile vp = p;
-            int result = !vp;
-            free (p);
-            return result;]])
-       ],
-       [ac_cv_func_realloc_0_nonnull=yes],
-       [ac_cv_func_realloc_0_nonnull=no],
-       [case "$host_os" in
-          # Guess yes on platforms where we know the result.
-          *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
-          | gnu* | *-musl* | midipix* | midnightbsd* \
-          | hpux* | solaris* | cygwin* | mingw* | windows* | msys* )
-            ac_cv_func_realloc_0_nonnull="guessing yes" ;;
-          # If we don't know, obey --enable-cross-guesses.
-          *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;;
-        esac
-       ])
-    ])
-  AS_CASE([$ac_cv_func_realloc_0_nonnull], [*yes], [$1], [$2])
-])# AC_FUNC_REALLOC
-
-# gl_FUNC_REALLOC_GNU
-# -------------------
-# Replace realloc if it is not compatible with GNU libc.
-AC_DEFUN([gl_FUNC_REALLOC_GNU],
-[
-  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
-  AC_REQUIRE([gl_FUNC_REALLOC_POSIX])
-
-  dnl Through the dependency on module extensions-aix, _LINUX_SOURCE_COMPAT
-  dnl gets defined already before this macro gets invoked.  This helps
-  dnl if !(__VEC__ || __AIXVEC), and doesn't hurt otherwise.
-
-  if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 0; then
-    _AC_FUNC_REALLOC_IF([], [REPLACE_REALLOC_FOR_REALLOC_GNU=1])
-  fi
-])# gl_FUNC_REALLOC_GNU
+  AC_CACHE_CHECK([whether realloc should abort upon undefined behaviour],
+    [gl_cv_func_realloc_sanitize],
+    [test -n "$gl_cv_func_realloc_sanitize" || gl_cv_func_realloc_sanitize=no])
+])
 
 # gl_FUNC_REALLOC_POSIX
 # ---------------------
@@ -64,7 +27,59 @@ AC_DEFUN([gl_FUNC_REALLOC_POSIX],
 [
   AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
   AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
-  if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
+  AC_REQUIRE([gl_FUNC_REALLOC_SANITIZED])
+  if test "$gl_cv_func_realloc_sanitize" != no; then
     REPLACE_REALLOC_FOR_REALLOC_POSIX=1
+    AC_DEFINE([NEED_SANITIZED_REALLOC], [1],
+      [Define to 1 if realloc should abort upon undefined behaviour.])
+  else
+    REPLACE_REALLOC_FOR_REALLOC_POSIX=$REPLACE_MALLOC_FOR_MALLOC_POSIX
   fi
 ])
+
+# gl_FUNC_REALLOC_0_NONNULL
+# -------------------------
+# Replace realloc if realloc (..., 0) returns null.
+# Modules that use this macro directly or indirectly should depend
+# on extensions-aix, so that _LINUX_SOURCE_COMPAT gets defined
+# before this macro gets invoked.  This helps if !(__VEC__ || __AIXVEC),
+# and doesn't hurt otherwise.
+AC_DEFUN([gl_FUNC_REALLOC_0_NONNULL],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
+  AC_REQUIRE([gl_FUNC_REALLOC_POSIX])
+  AC_CACHE_CHECK([whether realloc (..., 0) returns nonnull],
+    [gl_cv_func_realloc_0_nonnull],
+    [AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <stdlib.h>
+            /* Use prealloc to test; "volatile" prevents the compiler
+               from optimizing the realloc call away.  */
+            void *(*volatile prealloc) (void *, size_t) = realloc;]],
+          [[void *p = prealloc (0, 0);
+            int result = !p;
+            p = prealloc (p, 0);
+            result |= !p;
+            free (p);
+            return result;]])],
+       [gl_cv_func_realloc_0_nonnull=yes],
+       [gl_cv_func_realloc_0_nonnull=no],
+       [AS_CASE([$host_os],
+          [# Guess yes on platforms where we know the result.
+           freebsd* | netbsd* | openbsd* | darwin* | bitrig* \
+           | *-musl* | midipix* | midnightbsd* \
+           | hpux* | solaris* | cygwin*],
+            [gl_cv_func_realloc_0_nonnull="guessing yes"],
+          [# Guess as follows if we don't know.
+           gl_cv_func_realloc_0_nonnull=$gl_cross_guess_normal])])])
+  AS_CASE([$gl_cv_func_realloc_0_nonnull],
+    [*yes],
+      [AC_DEFINE([HAVE_REALLOC_0_NONNULL], [1],
+         [Define to 1 if realloc (..., 0) returns nonnull.])],
+    [AS_CASE([$gl_cv_func_realloc_sanitize,$gl_cv_malloc_ptrdiff,$gl_cv_func_malloc_posix,$host],
+       [yes,*,*,* | *,no,*,* | *,*,*no,* | *,*,*,aarch64c-*-freebsd*],
+         [REPLACE_REALLOC_FOR_REALLOC_POSIX=1],
+       [# Optimize for common case of glibc 2.1.1+ and compatibles.
+        REPLACE_REALLOC_FOR_REALLOC_POSIX=2])])
+])
index f0101fe67c63e5c53493c8b712eee085e3a3675b..1060a8e898715b5aa4a58018affb1c8644ae9981 100644 (file)
@@ -1,9 +1,10 @@
 # regex.m4
-# serial 75
+# serial 78
 dnl Copyright (C) 1996-2001, 2003-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Initially derived from code in GNU grep.
 dnl Mostly written by Jim Meyering.
@@ -39,16 +40,16 @@ AC_DEFUN([gl_REGEX],
             #include <limits.h>
             #include <string.h>
 
-            #if defined M_CHECK_ACTION || HAVE_DECL_ALARM
-            # include <signal.h>
-            # include <unistd.h>
+            #if HAVE_MALLOC_H
+            # include <malloc.h> /* defines M_CHECK_ACTION on glibc */
             #endif
 
-            #if HAVE_MALLOC_H
-            # include <malloc.h>
+            #if defined __HAIKU__ || defined M_CHECK_ACTION || HAVE_DECL_ALARM
+            # include <signal.h>
+            # include <unistd.h>
             #endif
 
-            #ifdef M_CHECK_ACTION
+            #if defined __HAIKU__ || defined M_CHECK_ACTION
             /* Exit with distinguishable exit code.  */
             static void sigabrt_no_core (int sig) { raise (SIGTERM); }
             #endif
@@ -67,6 +68,9 @@ AC_DEFUN([gl_REGEX],
             signal (SIGALRM, SIG_DFL);
             alarm (2);
 #endif
+#ifdef __HAIKU__
+            signal (SIGABRT, sigabrt_no_core);
+#endif
 #ifdef M_CHECK_ACTION
             signal (SIGABRT, sigabrt_no_core);
             mallopt (M_CHECK_ACTION, 2);
@@ -388,7 +392,6 @@ AC_DEFUN([gl_PREREQ_REGEX],
   AC_REQUIRE([AC_C_INLINE])
   AC_REQUIRE([AC_C_RESTRICT])
   AC_REQUIRE([AC_TYPE_MBSTATE_T])
-  AC_REQUIRE([gl_EEMALLOC])
   AC_CHECK_HEADERS([libintl.h])
   AC_CHECK_FUNCS_ONCE([isblank iswctype])
   AC_CHECK_DECLS([isblank], [], [], [[#include <ctype.h>]])
diff --git a/m4/selinux-selinux-h.m4 b/m4/selinux-selinux-h.m4
new file mode 100644 (file)
index 0000000..c06a594
--- /dev/null
@@ -0,0 +1,97 @@
+# selinux-selinux-h.m4
+# serial 10   -*- Autoconf -*-
+dnl Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
+
+# From Jim Meyering
+# Provide <selinux/selinux.h>, if necessary.
+# If it is already present, provide wrapper functions to guard against
+# misbehavior from getfilecon, lgetfilecon, and fgetfilecon.
+
+AC_DEFUN([gl_HEADERS_SELINUX_SELINUX_H],
+[
+  AC_REQUIRE([gl_CHECK_HEADER_SELINUX_SELINUX_H])
+  if test "$with_selinux" != no; then
+    if test "$ac_cv_header_selinux_selinux_h" = yes; then
+      # We do have <selinux/selinux.h>, so do compile getfilecon.c
+      # and arrange to use its wrappers.
+      gl_CHECK_NEXT_HEADERS([selinux/selinux.h])
+      AC_DEFINE([getfilecon], [rpl_getfilecon],
+                [Always use our getfilecon wrapper.])
+      AC_DEFINE([getfilecon_raw], [rpl_getfilecon_raw],
+                [Always use our getfilecon_raw wrapper.])
+      AC_DEFINE([lgetfilecon], [rpl_lgetfilecon],
+                [Always use our lgetfilecon wrapper.])
+      AC_DEFINE([lgetfilecon_raw], [rpl_lgetfilecon_raw],
+                [Always use our lgetfilecon_raw wrapper.])
+      AC_DEFINE([fgetfilecon], [rpl_fgetfilecon],
+                [Always use our fgetfilecon wrapper.])
+      AC_DEFINE([fgetfilecon_raw], [rpl_fgetfilecon_raw],
+                [Always use our fgetfilecon_raw wrapper.])
+    fi
+  fi
+])
+
+# Check for <selinux/selinux.h>, if necessary.
+
+AC_DEFUN([gl_CHECK_HEADER_SELINUX_SELINUX_H],
+[
+  AC_REQUIRE([gl_LIBSELINUX])
+  if test "$with_selinux" != no; then
+    AC_CHECK_HEADERS_ONCE([selinux/selinux.h])
+
+    if test $ac_cv_header_selinux_selinux_h = yes; then
+      USE_SELINUX_SELINUX_H=1
+    else
+      USE_SELINUX_SELINUX_H=0
+    fi
+
+    case "$ac_cv_search_setfilecon:$ac_cv_header_selinux_selinux_h" in
+      no:*) # already warned
+        ;;
+      *:no)
+        AC_MSG_WARN([libselinux was found but selinux/selinux.h is missing.])
+        AC_MSG_WARN([AC_PACKAGE_NAME will be compiled without SELinux support.])
+        ;;
+    esac
+  else
+    # Do as if <selinux/selinux.h> does not exist, even if
+    # AC_CHECK_HEADERS_ONCE has already determined that it exists.
+    USE_SELINUX_SELINUX_H=0
+  fi
+  AC_SUBST([USE_SELINUX_SELINUX_H])
+  AC_DEFINE_UNQUOTED([USE_SELINUX_SELINUX_H], [$USE_SELINUX_SELINUX_H],
+    [Define to 1 if <selinux/selinux.h> should be used, to 0 otherwise.])
+])
+
+AC_DEFUN([gl_LIBSELINUX],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_CANONICAL_BUILD])
+
+  AC_ARG_WITH([selinux],
+    AS_HELP_STRING([[--without-selinux]], [do not use SELinux, even on systems with SELinux]),
+    [], [with_selinux=maybe])
+
+  LIB_SELINUX=
+  if test "$with_selinux" != no; then
+    gl_saved_LIBS=$LIBS
+    AC_SEARCH_LIBS([setfilecon], [selinux],
+                   [test "$ac_cv_search_setfilecon" = "none required" ||
+                    LIB_SELINUX=$ac_cv_search_setfilecon])
+    LIBS=$gl_saved_LIBS
+  fi
+  AC_SUBST([LIB_SELINUX])
+
+  # Warn if SELinux is found but libselinux is absent;
+  if test "$ac_cv_search_setfilecon" = no; then
+    if test "$host" = "$build" && test -d /selinux; then
+      AC_MSG_WARN([This system supports SELinux but libselinux is missing.])
+      AC_MSG_WARN([AC_PACKAGE_NAME will be compiled without SELinux support.])
+    fi
+    with_selinux=no
+  fi
+])
index 51f2afe8d0d2f495f15c55f10f3fee2c8c6f92f9..61189d260c45aabfb8fa2c180e942840daab8a70 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002-2006, 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_SHA1],
 [
index ad5596a488f48dbf833870c229a9f4683f3d5cbb..95070a1551628bb6eb3484744a785586fac32f54 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2005, 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_SHA256],
 [
index 86e5518beecce51b950d930b200f2781ac940568..d882973801b33b4bbab4b6ce510aa62af96970e4 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2005-2006, 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_SHA512],
 [
index acef58a6a40ce712a204d2aed90f334bcd4130a1..5e95f491b596e69652b2807b46609f8850708592 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002, 2005-2006, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_SIG2STR],
 [
index 72da5e957ca4c4a0dce28a011661816e442ea738..4f8f8cd58cfa5582a062fcf00a93b2b1f101756f 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2020-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_SIGDESCR_NP],
 [
index 7a7d2b3c526d8df1e6a02f41064aa4a742f298af..ef6c5df949c6528b15cac9607564ddc117d67bb5 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2007-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN_ONCE([gl_SIGNAL_H],
 [
index 9ece0abb6d047b8d82e4d3be19d27fb0366f8ded..a2aca10e7159cfb794d36ae8b27347b380eef259 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2005-2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Albert Chin, Windows fixes from Simon Josefsson.
 
index c15f948adb7ac3091d9dd24088eb2a67592c9612..437f066c92cf67eaa2dee50dff1e5c198a5a0e55 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2001-2003, 2006, 2010-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Bruno Haible.
 dnl Define ssize_t if it does not already exist.
index e8ee7d5125e236eea7461085867268b8cad3c38f..c192addd439a8c1878d61ab033961bedce3afa66 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2024 Free Software Foun
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Checks for stat-related time functions.
 
index 1c29d1e4fb9076e7d45f06304a3eac70614dd34c..fd6112b2d3825a213e454f8015129f4ec4be2fd5 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 2011-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Check for alignas and alignof that conform to C23.
 
@@ -81,10 +82,10 @@ AC_DEFUN([gl_ALIGNASOF],
 
    References:
    ISO C23 (latest free draft
-   <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.pdf>)
+   <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.pdf>)
    sections 6.5.3.4, 6.7.5, 7.15.
    C++11 (latest free draft
-   <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf>)
+   <https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf>)
    section 18.10. */
 
 /* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment
index 6af813f39dcb0217727c751c07a42511cbd876e1..0aa9a634610c0a49429e13f74de81cc6e8b2ae02 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl A placeholder for <stdbit.h>, for platforms that have issues.
 
index c7f75b37fa03d2b8d3c697f3514a0c14ef7efac5..e80b56eef69511b8818d72380834b147ce503c3d 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl A placeholder for <stddef.h>, for platforms that have issues.
 
index 2dea846914bb662b03040ffd204ba04291a0880d..0a078e64d58d35b883bbcfcbf998fe9ec7806ad3 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2001-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Paul Eggert and Bruno Haible.
 dnl Test whether <stdint.h> is supported or must be substituted.
index ec52ae92ff4c5a5e3169ca4b00c6419415beb702..14fb0d34c657167039be7d109fccb8bc42ad610d 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2007-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_STDIO_H_EARLY],
 [
index 5d9b3017c44d0711132b67975ad7b65fcde63e0e..87b63ff54e3551f756b7596410263c2aa29cf887 100644 (file)
@@ -1,9 +1,10 @@
 # stdlib_h.m4
-# serial 81
+# serial 82
 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN_ONCE([gl_STDLIB_H],
 [
@@ -140,7 +141,6 @@ AC_DEFUN([gl_STDLIB_H_REQUIRE_DEFAULTS],
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM_R])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOCARRAY])
-    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_GNU])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_POSIX])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALPATH])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RPMATCH])
@@ -247,7 +247,6 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
   REPLACE_RAND=0;            AC_SUBST([REPLACE_RAND])
   REPLACE_RANDOM=0;          AC_SUBST([REPLACE_RANDOM])
   REPLACE_RANDOM_R=0;        AC_SUBST([REPLACE_RANDOM_R])
-  REPLACE_REALLOC_FOR_REALLOC_GNU=0;    AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_GNU])
   REPLACE_REALLOC_FOR_REALLOC_POSIX=0;  AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_POSIX])
   REPLACE_REALLOCARRAY=0;    AC_SUBST([REPLACE_REALLOCARRAY])
   REPLACE_REALPATH=0;        AC_SUBST([REPLACE_REALPATH])
index c4d71dd9fa588edd477e8285889b9a72ef59ca80..0d7dca3dc6fe4bba68e667067c8ad3a8a4d8ab9d 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002, 2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_STPCPY],
 [
index f31264ae85baa5661434a20f53be16bef47d952f..68464f0d0832adcc1098c74ccab4961af86c68f3 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2007-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Configure a GNU-like replacement for <string.h>.
 
index 83a75c0c3277fa02ab044e97cfc5aa43ff1561a9..ecd25598196076ee7ef8a388baf9c36063c52764 100644 (file)
@@ -5,6 +5,7 @@ dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 m4_version_prereq([2.73], [], [
 # Replace AC_FUNC_STRNLEN from Autoconf 2.72 and earlier,
index 2a0b50b3428188cb66671afab5a0c82eb4f3e2bd..f4c6eb7e7097b886d430ae28e48bfc7ebb97256b 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002-2004, 2006, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_STRTOIMAX],
 [
index 03a50dec2f1f413d20adf13f7cc1b4efff6bc1cd..e7f7654d91d16378406e0638109ca54f645fbea9 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002, 2004, 2006, 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_STRTOLL],
 [
index 47968a1d33f65f5372228a960d585428a73ed815..e56c96e6e0acf702507dcc655e390381e7187b47 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # See if we need to provide symlink replacement.
 
index 22fa6c3849e37d882062c582c47c173745a08f19..95c9c72216065fa9a3878f8c1362a7233823e418 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright 2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Written by Paul Eggert.
 
index 62fd519e365119b11b9c546b567a3ea5bbef06ac..6d40452462a1dd17211a378fdb92c04a5cef6825 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2020-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN_ONCE([gl_SYS_RANDOM_H],
 [
index 550e066e1713399746bebbebeea660176a55292b..9828237f622e185fa467e16e6b3a0732b9ab9ee1 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2006-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN_ONCE([gl_SYS_SELECT_H],
 [
index 3bf3cb47778c5651f9c42760444467c1d006094a..2f1edcef1ad5229c6b7d07e433a726b0b74cb606 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2005-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Simon Josefsson.
 
index 3cc50ce677615de588f20635a8416a0aa5af2d52..2971bc526f3dc19db40ea576bf91748c451e4107 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2006-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Eric Blake.
 dnl Provide a GNU-like <sys/stat.h>.
index d32030889348a8174a49f17725f6b1a69bfe4541..6954319e4b475de4b84fcd7eebbbe4bb4f0cae6a 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Configure a replacement for <sys/time.h>.
 
index 7c7f26552729f1a3bede987aeadcf34d74fbee2b..a7b289c206a2a117b50f5b7fd1e7cb16b3898494 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2011-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN_ONCE([gl_SYS_TYPES_H],
 [
index 795a9803fd06921d05f12624b1319a845650c500..2179cbe14bf7a7e227de3254887ceb5ff59986bc 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # glibc provides __gen_tempname as a wrapper for mk[ds]temp.  Expose
 # it as a public API, and provide it on systems that are lacking.
index 88c76c03c02bf83fdf2303cce578adb8a408b409..28d698a1f0b625dfa5b9eb30ddb4e6b99a01ca62 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2000-2001, 2003-2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Configure a more-standard replacement for <time.h>.
 
index 3675390e87172e468013ad6542fc8d50295b1eb3..05eaba31d90e425654f441ad096c47eba7341cb9 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2003, 2006-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Reentrant time functions: localtime_r, gmtime_r.
 
index 1a3dd3befb1ef6cf11ce3d25dc61a61c04be6cbb..2e2ecab48671fc2ebf51483e5e24677778ffe536 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2015-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Time zone functions: tzalloc, localtime_rz, etc.
 
index c1ff26777b8b9c311a9fa2fe4cd4c2454265ddcf..9b12f1e4fda404ca8f737fab9f27db34a2e8663b 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2003, 2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_FUNC_TIMEGM],
 [
index 59a4cade539986e5c170b1ac70f632cff1e7b0fe..8eb9f8e1a64c922ef5c2bfd3a9499f89dacd5da8 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2011-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Check for timer_settime, and set TIMER_TIME_LIB.
 
index 5333920ef5e346c6cb5acc4e035b86126637ff37..39255320c7f0e9bf9bfc72a05e431bac31528232 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2000-2001, 2003-2007, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Jim Meyering
 
index 3d97edb7a7fb3b2149b655689b66538817da846b..341127746a42e5c7a80871436be0be2700211985 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2002, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Check for tm_gmtoff and tm_zone in struct tm, and #define
 dnl HAVE_STRUCT_TM_TM_GMTOFF and HAVE_STRUCT_TM_TM_ZONE accordingly.
index 04fa79c9ca607712b181b7ea2f5fb50feabeded4..6fcbc242e47cab80acf7953c84b2b309629a5cfb 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2006-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl Written by Simon Josefsson, Bruno Haible.
 
index e96cf5f87360e08f463749a4ce72cc1f108ee2fd..1e515a0f4d7b3c22075500bc6b322deae84a6fc7 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 1998-2006, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Jim Meyering.
 dnl
index b8200deaa252f53c3684a5d9edae0dbc26ccde71..5730b55feb5b52df26be321937c42b5f5a0ee323 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2003-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 AC_DEFUN([gl_UTIMENS],
 [
index a583f37668764563f8e4ca1930000f824c975d1d..8ed658d223b4a6345c8375c5ce879c16c131db78 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # See if we need to provide utimensat replacement.
 
index 05b23cbb73676f9d7747578039908e3321631172..807b4600f09930aa5c8605166cfbce049131c6fc 100644 (file)
@@ -5,6 +5,7 @@ dnl Copyright (C) 2003-2005, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # See if we need to work around bugs in glibc's implementation of
 # utimes from 2003-07-12 to 2003-09-17.
index 9211f69d4d8b9f800af9e31dd29d5319a388d388..6681ce9d69919c3667ee4ca1336b27c311cc6766 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2001, 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Check for variable-length arrays.
 
index fe7af01fc500a3aeef916b1010f7da69b109eb2e..7350a400f1ee09809895bb31226a4b252dc32205 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2008-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl From Simon Josefsson
 
index d8c084868343d54a73a72a7b8dd01ea792bd7ac2..9b2dd8d2453ec1c34a824dbd3aa746f2eef456d7 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2003-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 # Check for Extended Attributes (Linux)
 
index 710fba4e2971a93d248ec12b0d8823d79e206644..c23127a97fb1e9c239ae6b0875a3109f43186eb7 100644 (file)
@@ -4,6 +4,7 @@ dnl Copyright (C) 2020-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
+dnl This file is offered as-is, without any warranty.
 
 dnl This file must be named something that sorts after all other
 dnl package- or gnulib-provided .m4 files - at least for those packages