[monitoring-plugins] gnulib changes
RincewindsHat
git at monitoring-plugins.org
Sat Sep 17 03:00:13 CEST 2022
Module: monitoring-plugins
Branch: gnulib_2022
Commit: 62af1d0b2a31185dc8acaf3fe8fc3149414277bd
Author: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com>
Date: Sat Sep 17 02:56:19 2022 +0200
URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=62af1d0
gnulib changes
---
gl/Makefile.am | 115 --
gl/af_alg.c | 213 ---
gl/af_alg.h | 115 --
gl/byteswap.in.h | 44 -
gl/fflush.c | 233 ---
gl/fpurge.c | 150 --
gl/freading.c | 76 -
gl/freading.h | 55 -
gl/fseek.c | 30 -
gl/fseeko.c | 164 ---
gl/ftell.c | 37 -
gl/ftello.c | 157 --
gl/gl_openssl.h | 116 --
gl/inttypes.h | 1509 ++++++++++++++++++++
gl/limits.h | 132 ++
gl/lseek.c | 89 --
gl/m4/af_alg.m4 | 57 -
gl/m4/byteswap.m4 | 17 -
gl/m4/fflush.m4 | 100 --
gl/m4/fpurge.m4 | 73 -
gl/m4/freading.m4 | 11 -
gl/m4/fseek.m4 | 15 -
gl/m4/fseeko.m4 | 77 -
gl/m4/ftell.m4 | 15 -
gl/m4/ftello.m4 | 151 --
gl/m4/gl-openssl.m4 | 76 -
gl/m4/gnulib-cache.m4 | 2 -
gl/m4/gnulib-comp.m4 | 87 --
gl/m4/lseek.m4 | 78 -
gl/m4/sha256.m4 | 14 -
gl/m4/ungetc.m4 | 73 -
gl/malloc/.deps/.dirstamp | 0
gl/malloc/.deps/libgnu_a-dynarray-skeleton.Po | 1 +
gl/malloc/.deps/libgnu_a-dynarray_at_failure.Po | 138 ++
.../.deps/libgnu_a-dynarray_emplace_enlarge.Po | 138 ++
gl/malloc/.deps/libgnu_a-dynarray_finalize.Po | 116 ++
gl/malloc/.deps/libgnu_a-dynarray_resize.Po | 138 ++
gl/malloc/.deps/libgnu_a-dynarray_resize_clear.Po | 51 +
gl/malloc/.dirstamp | 0
gl/malloc/dynarray-skeleton.gl.h | 529 +++++++
gl/malloc/dynarray.gl.h | 174 +++
gl/sha256-stream.c | 145 --
gl/sha256.c | 433 ------
gl/sha256.h | 121 --
gl/stdckdint.h | 38 +
gl/stdio-impl.h | 212 ---
gl/sys-limits.h | 42 -
47 files changed, 2964 insertions(+), 3393 deletions(-)
diff --git a/gl/Makefile.am b/gl/Makefile.am
index d0acf41..8578de5 100644
--- a/gl/Makefile.am
+++ b/gl/Makefile.am
@@ -34,7 +34,6 @@
# --macro-prefix=gl \
# --no-vc-files \
# base64 \
-# crypto/sha256 \
# dirname \
# environ \
# floorf \
@@ -179,26 +178,6 @@ endif
## end gnulib module btowc
-## begin gnulib module byteswap
-
-BUILT_SOURCES += $(BYTESWAP_H)
-
-# We need the following in order to create <byteswap.h> when the system
-# doesn't have one.
-if GL_GENERATE_BYTESWAP_H
-byteswap.h: byteswap.in.h $(top_builddir)/config.status
- $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/byteswap.in.h
- $(AM_V_at)mv $@-t $@
-else
-byteswap.h: $(top_builddir)/config.status
- rm -f $@
-endif
-MOSTLYCLEANFILES += byteswap.h byteswap.h-t
-
-EXTRA_DIST += byteswap.in.h
-
-## end gnulib module byteswap
-
## begin gnulib module calloc-gnu
@@ -233,28 +212,6 @@ endif
## end gnulib module close
-## begin gnulib module crypto/af_alg
-
-libgnu_a_SOURCES += af_alg.c
-
-EXTRA_DIST += af_alg.h sys-limits.h
-
-## end gnulib module crypto/af_alg
-
-## begin gnulib module crypto/sha256
-
-libgnu_a_SOURCES += sha256-stream.c
-
-## end gnulib module crypto/sha256
-
-## begin gnulib module crypto/sha256-buffer
-
-libgnu_a_SOURCES += sha256.c
-
-EXTRA_DIST += gl_openssl.h sha256.h
-
-## end gnulib module crypto/sha256-buffer
-
## begin gnulib module dirname
libgnu_a_SOURCES += dirname.c basename.c
@@ -417,16 +374,6 @@ EXTRA_DIST += fd-hook.h
## end gnulib module fd-hook
-## begin gnulib module fflush
-
-if GL_COND_OBJ_FFLUSH
-libgnu_a_SOURCES += fflush.c
-endif
-
-EXTRA_DIST += stdio-impl.h
-
-## end gnulib module fflush
-
## begin gnulib module filename
@@ -498,24 +445,6 @@ EXTRA_libgnu_a_SOURCES += fopen.c
## end gnulib module fopen-gnu
-## begin gnulib module fpurge
-
-if GL_COND_OBJ_FPURGE
-libgnu_a_SOURCES += fpurge.c
-endif
-
-EXTRA_DIST += stdio-impl.h
-
-## end gnulib module fpurge
-
-## begin gnulib module freading
-
-libgnu_a_SOURCES += freading.c
-
-EXTRA_DIST += freading.h stdio-impl.h
-
-## end gnulib module freading
-
## begin gnulib module free-posix
if GL_COND_OBJ_FREE
@@ -524,24 +453,6 @@ endif
## end gnulib module free-posix
-## begin gnulib module fseek
-
-if GL_COND_OBJ_FSEEK
-libgnu_a_SOURCES += fseek.c
-endif
-
-## end gnulib module fseek
-
-## begin gnulib module fseeko
-
-if GL_COND_OBJ_FSEEKO
-libgnu_a_SOURCES += fseeko.c
-endif
-
-EXTRA_DIST += stdio-impl.h
-
-## end gnulib module fseeko
-
## begin gnulib module fstat
if GL_COND_OBJ_FSTAT
@@ -564,24 +475,6 @@ EXTRA_DIST += fsusage.h
## end gnulib module fsusage
-## begin gnulib module ftell
-
-if GL_COND_OBJ_FTELL
-libgnu_a_SOURCES += ftell.c
-endif
-
-## end gnulib module ftell
-
-## begin gnulib module ftello
-
-if GL_COND_OBJ_FTELLO
-libgnu_a_SOURCES += ftello.c
-endif
-
-EXTRA_DIST += stdio-impl.h
-
-## end gnulib module ftello
-
## begin gnulib module gen-header
# In 'sed', replace the pattern space with a "DO NOT EDIT" comment.
@@ -947,14 +840,6 @@ libgnu_a_SOURCES += glthread/lock.h glthread/lock.c
## end gnulib module lock
-## begin gnulib module lseek
-
-if GL_COND_OBJ_LSEEK
-libgnu_a_SOURCES += lseek.c
-endif
-
-## end gnulib module lseek
-
## begin gnulib module malloc-gnu
diff --git a/gl/af_alg.c b/gl/af_alg.c
deleted file mode 100644
index 084bff6..0000000
--- a/gl/af_alg.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/* af_alg.c - Compute message digests from file streams and buffers.
- Copyright (C) 2018-2022 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/>. */
-
-/* Written by Matteo Croce <mcroce at redhat.com>, 2018. */
-
-#include <config.h>
-
-#include "af_alg.h"
-
-#if USE_LINUX_CRYPTO_API
-
-#include <unistd.h>
-#include <string.h>
-#include <stdio.h>
-#include <errno.h>
-#include <linux/if_alg.h>
-#include <sys/stat.h>
-#include <sys/sendfile.h>
-#include <sys/socket.h>
-
-#include "sys-limits.h"
-
-#define BLOCKSIZE 32768
-
-/* Return a newly created socket for ALG.
- On error, return a negative error number. */
-static int
-alg_socket (char const *alg)
-{
- struct sockaddr_alg salg = {
- .salg_family = AF_ALG,
- .salg_type = "hash",
- };
- /* Copy alg into salg.salg_name, without calling strcpy nor strlen. */
- for (size_t i = 0; (salg.salg_name[i] = alg[i]) != '\0'; i++)
- if (i == sizeof salg.salg_name - 1)
- /* alg is too long. */
- return -EINVAL;
-
- int cfd = socket (AF_ALG, SOCK_SEQPACKET | SOCK_CLOEXEC, 0);
- if (cfd < 0)
- return -EAFNOSUPPORT;
- int ofd = (bind (cfd, (struct sockaddr *) &salg, sizeof salg) == 0
- ? accept4 (cfd, NULL, 0, SOCK_CLOEXEC)
- : -1);
- close (cfd);
- return ofd < 0 ? -EAFNOSUPPORT : ofd;
-}
-
-int
-afalg_buffer (const char *buffer, size_t len, const char *alg,
- void *resblock, ssize_t hashlen)
-{
- /* On Linux < 4.9, the value for an empty stream is wrong (all zeroes).
- See <https://patchwork.kernel.org/patch/9308641/>.
- This was not fixed properly until November 2016,
- see <https://patchwork.kernel.org/patch/9434741/>. */
- if (len == 0)
- return -EAFNOSUPPORT;
-
- int ofd = alg_socket (alg);
- if (ofd < 0)
- return ofd;
-
- int result;
-
- for (;;)
- {
- ssize_t size = (len > BLOCKSIZE ? BLOCKSIZE : len);
- if (send (ofd, buffer, size, MSG_MORE) != size)
- {
- result = -EAFNOSUPPORT;
- break;
- }
- buffer += size;
- len -= size;
- if (len == 0)
- {
- result = read (ofd, resblock, hashlen) == hashlen ? 0 : -EAFNOSUPPORT;
- break;
- }
- }
-
- close (ofd);
- return result;
-}
-
-int
-afalg_stream (FILE *stream, const char *alg,
- void *resblock, ssize_t hashlen)
-{
- int ofd = alg_socket (alg);
- if (ofd < 0)
- return ofd;
-
- /* If STREAM's size is known and nonzero and not too large, attempt
- sendfile to pipe the data. The nonzero restriction avoids issues
- with /proc files that pretend to be empty, and lets the classic
- read-write loop work around an empty-input bug noted below. */
- int fd = fileno (stream);
- int result;
- struct stat st;
- off_t off = ftello (stream);
- if (0 <= off && fstat (fd, &st) == 0
- && (S_ISREG (st.st_mode) || S_TYPEISSHM (&st) || S_TYPEISTMO (&st))
- && off < st.st_size && st.st_size - off < SYS_BUFSIZE_MAX)
- {
- /* Make sure the offset of fileno (stream) reflects how many bytes
- have been read from stream before this function got invoked.
- Note: fflush on an input stream after ungetc does not work as expected
- on some platforms. Therefore this situation is not supported here. */
- if (fflush (stream))
- result = -EIO;
- else
- {
- off_t nbytes = st.st_size - off;
- if (sendfile (ofd, fd, &off, nbytes) == nbytes)
- {
- if (read (ofd, resblock, hashlen) == hashlen)
- {
- /* The input buffers of stream are no longer valid. */
- if (lseek (fd, off, SEEK_SET) != (off_t)-1)
- result = 0;
- else
- /* The file position of fd has not changed. */
- result = -EAFNOSUPPORT;
- }
- else
- /* The file position of fd has not changed. */
- result = -EAFNOSUPPORT;
- }
- else
- /* The file position of fd has not changed. */
- result = -EAFNOSUPPORT;
- }
- }
- else
- {
- /* sendfile not possible, do a classic read-write loop. */
-
- /* Number of bytes to seek (backwards) in case of error. */
- off_t nseek = 0;
-
- for (;;)
- {
- char buf[BLOCKSIZE];
- /* When the stream is not seekable, start with a single-byte block,
- so that we can use ungetc() in the case that send() fails. */
- size_t blocksize = (nseek == 0 && off < 0 ? 1 : BLOCKSIZE);
- ssize_t size = fread (buf, 1, blocksize, stream);
- if (size == 0)
- {
- /* On Linux < 4.9, the value for an empty stream is wrong (all 0).
- See <https://patchwork.kernel.org/patch/9308641/>.
- This was not fixed properly until November 2016,
- see <https://patchwork.kernel.org/patch/9434741/>. */
- result = ferror (stream) ? -EIO : nseek == 0 ? -EAFNOSUPPORT : 0;
- break;
- }
- nseek -= size;
- if (send (ofd, buf, size, MSG_MORE) != size)
- {
- if (nseek == -1)
- {
- /* 1 byte of pushback buffer is guaranteed on stream, even
- if stream is not seekable. */
- ungetc ((unsigned char) buf[0], stream);
- result = -EAFNOSUPPORT;
- }
- else if (fseeko (stream, nseek, SEEK_CUR) == 0)
- /* The position of stream has been restored. */
- result = -EAFNOSUPPORT;
- else
- result = -EIO;
- break;
- }
-
- /* Don't assume that EOF is sticky. See:
- <https://sourceware.org/bugzilla/show_bug.cgi?id=19476>. */
- if (feof (stream))
- {
- result = 0;
- break;
- }
- }
-
- if (result == 0 && read (ofd, resblock, hashlen) != hashlen)
- {
- if (nseek == 0 || fseeko (stream, nseek, SEEK_CUR) == 0)
- /* The position of stream has been restored. */
- result = -EAFNOSUPPORT;
- else
- result = -EIO;
- }
- }
- close (ofd);
- return result;
-}
-
-#endif
diff --git a/gl/af_alg.h b/gl/af_alg.h
deleted file mode 100644
index ddd6568..0000000
--- a/gl/af_alg.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* af_alg.h - Compute message digests from file streams and buffers.
- Copyright (C) 2018-2022 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/>. */
-
-/* Written by Matteo Croce <mcroce at redhat.com>, 2018.
- Documentation by Bruno Haible <bruno at clisp.org>, 2018. */
-
-/* Declare specific functions for computing message digests
- using the Linux kernel crypto API, if available. This kernel API gives
- access to specialized crypto instructions (that would also be available
- in user space) or to crypto devices (not directly available in user space).
-
- For a more complete set of facilities that use the Linux kernel crypto API,
- look at libkcapi. */
-
-#ifndef AF_ALG_H
-# define AF_ALG_H 1
-
-# include <stdio.h>
-# include <errno.h>
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-# if USE_LINUX_CRYPTO_API
-
-/* Compute a message digest of a memory region.
-
- The memory region starts at BUFFER and is LEN bytes long.
-
- ALG is the message digest algorithm; see the file /proc/crypto.
-
- RESBLOCK points to a block of HASHLEN bytes, for the result.
- HASHLEN must be the length of the message digest, in bytes, in particular:
-
- alg | hashlen
- -------+--------
- md5 | 16
- sha1 | 20
- sha224 | 28
- sha256 | 32
- sha384 | 48
- sha512 | 64
-
- If successful, fill RESBLOCK and return 0.
- Upon failure, return a negated error number. */
-int
-afalg_buffer (const char *buffer, size_t len, const char *alg,
- void *resblock, ssize_t hashlen);
-
-/* Compute a message digest of data read from STREAM.
-
- STREAM is an open file stream. The last operation on STREAM should
- not be 'ungetc', and if STREAM is also open for writing it should
- have been fflushed since its last write. Read from the current
- position to the end of STREAM. Handle regular files efficiently.
-
- ALG is the message digest algorithm; see the file /proc/crypto.
-
- RESBLOCK points to a block of HASHLEN bytes, for the result.
- HASHLEN must be the length of the message digest, in bytes, in particular:
-
- alg | hashlen
- -------+--------
- md5 | 16
- sha1 | 20
- sha224 | 28
- sha256 | 32
- sha384 | 48
- sha512 | 64
-
- If successful, fill RESBLOCK and return 0.
- Upon failure, return a negated error number.
- Unless returning 0 or -EIO, restore STREAM's file position so that
- the caller can fall back on some other method. */
-int
-afalg_stream (FILE *stream, const char *alg,
- void *resblock, ssize_t hashlen);
-
-# else
-
-static inline int
-afalg_buffer (const char *buffer, size_t len, const char *alg,
- void *resblock, ssize_t hashlen)
-{
- return -EAFNOSUPPORT;
-}
-
-static inline int
-afalg_stream (FILE *stream, const char *alg,
- void *resblock, ssize_t hashlen)
-{
- return -EAFNOSUPPORT;
-}
-
-# endif
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif /* AF_ALG_H */
diff --git a/gl/byteswap.in.h b/gl/byteswap.in.h
deleted file mode 100644
index f4746d3..0000000
--- a/gl/byteswap.in.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* byteswap.h - Byte swapping
- Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc.
- Written by Oskar Liljeblad <oskar at osk.mine.nu>, 2005.
-
- 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/>. */
-
-#ifndef _GL_BYTESWAP_H
-#define _GL_BYTESWAP_H
-
-/* Given an unsigned 16-bit argument X, return the value corresponding to
- X with reversed byte order. */
-#define bswap_16(x) ((((x) & 0x00FF) << 8) | \
- (((x) & 0xFF00) >> 8))
-
-/* Given an unsigned 32-bit argument X, return the value corresponding to
- X with reversed byte order. */
-#define bswap_32(x) ((((x) & 0x000000FF) << 24) | \
- (((x) & 0x0000FF00) << 8) | \
- (((x) & 0x00FF0000) >> 8) | \
- (((x) & 0xFF000000) >> 24))
-
-/* Given an unsigned 64-bit argument X, return the value corresponding to
- X with reversed byte order. */
-#define bswap_64(x) ((((x) & 0x00000000000000FFULL) << 56) | \
- (((x) & 0x000000000000FF00ULL) << 40) | \
- (((x) & 0x0000000000FF0000ULL) << 24) | \
- (((x) & 0x00000000FF000000ULL) << 8) | \
- (((x) & 0x000000FF00000000ULL) >> 8) | \
- (((x) & 0x0000FF0000000000ULL) >> 24) | \
- (((x) & 0x00FF000000000000ULL) >> 40) | \
- (((x) & 0xFF00000000000000ULL) >> 56))
-
-#endif /* _GL_BYTESWAP_H */
diff --git a/gl/fflush.c b/gl/fflush.c
deleted file mode 100644
index 69511cd..0000000
--- a/gl/fflush.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/* fflush.c -- allow flushing input streams
- Copyright (C) 2007-2022 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/>. */
-
-/* Written by Eric Blake. */
-
-#include <config.h>
-
-/* Specification. */
-#include <stdio.h>
-
-#include <errno.h>
-#include <unistd.h>
-
-#include "freading.h"
-
-#include "stdio-impl.h"
-
-#undef fflush
-
-
-#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
-/* GNU libc, BeOS, Haiku, Linux libc5 */
-
-/* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */
-static void
-clear_ungetc_buffer_preserving_position (FILE *fp)
-{
- if (fp->_flags & _IO_IN_BACKUP)
- /* _IO_free_backup_area is a bit complicated. Simply call fseek. */
- fseeko (fp, 0, SEEK_CUR);
-}
-
-#else
-
-/* Clear the stream's ungetc buffer. May modify the value of ftello (fp). */
-static void
-clear_ungetc_buffer (FILE *fp)
-{
-# if defined __sferror || defined __DragonFly__ || defined __ANDROID__
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
- if (HASUB (fp))
- {
- fp_->_p += fp_->_r;
- fp_->_r = 0;
- }
-# elif defined __EMX__ /* emx+gcc */
- if (fp->_ungetc_count > 0)
- {
- fp->_ungetc_count = 0;
- fp->_rcount = - fp->_rcount;
- }
-# elif defined _IOERR /* Minix, AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */
- /* Nothing to do. */
-# else /* other implementations */
- fseeko (fp, 0, SEEK_CUR);
-# endif
-}
-
-#endif
-
-#if ! (defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1)
-/* GNU libc, BeOS, Haiku, Linux libc5 */
-
-# if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
-/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
-
-static int
-disable_seek_optimization (FILE *fp)
-{
- int saved_flags = fp_->_flags & (__SOPT | __SNPT);
- fp_->_flags = (fp_->_flags & ~__SOPT) | __SNPT;
- return saved_flags;
-}
-
-static void
-restore_seek_optimization (FILE *fp, int saved_flags)
-{
- fp_->_flags = (fp_->_flags & ~(__SOPT | __SNPT)) | saved_flags;
-}
-
-# else
-
-static void
-update_fpos_cache (_GL_ATTRIBUTE_MAYBE_UNUSED FILE *fp,
- _GL_ATTRIBUTE_MAYBE_UNUSED off_t pos)
-{
-# if defined __sferror || defined __DragonFly__ || defined __ANDROID__
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
-# if defined __CYGWIN__
- /* fp_->_offset is typed as an integer. */
- fp_->_offset = pos;
-# else
- /* fp_->_offset is an fpos_t. */
- /* Use a union, since on NetBSD, the compilation flags determine
- whether fpos_t is typedef'd to off_t or a struct containing a
- single off_t member. */
- union
- {
- fpos_t f;
- off_t o;
- } u;
- u.o = pos;
- fp_->_offset = u.f;
-# endif
- fp_->_flags |= __SOFF;
-# endif
-}
-# endif
-#endif
-
-/* Flush all pending data on STREAM according to POSIX rules. Both
- output and seekable input streams are supported. */
-int
-rpl_fflush (FILE *stream)
-{
- /* When stream is NULL, POSIX and C99 only require flushing of "output
- streams and update streams in which the most recent operation was not
- input", and all implementations do this.
-
- When stream is "an output stream or an update stream in which the most
- recent operation was not input", POSIX and C99 requires that fflush
- writes out any buffered data, and all implementations do this.
-
- When stream is, however, an input stream or an update stream in
- which the most recent operation was input, C99 specifies nothing,
- and POSIX only specifies behavior if the stream is seekable.
- mingw, in particular, drops the input buffer, leaving the file
- descriptor positioned at the end of the input buffer. I.e. ftell
- (stream) is lost. We don't want to call the implementation's
- fflush in this case.
-
- We test ! freading (stream) here, rather than fwriting (stream), because
- what we need to know is whether the stream holds a "read buffer", and on
- mingw this is indicated by _IOREAD, regardless of _IOWRT. */
- if (stream == NULL || ! freading (stream))
- return fflush (stream);
-
-#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
- /* GNU libc, BeOS, Haiku, Linux libc5 */
-
- clear_ungetc_buffer_preserving_position (stream);
-
- return fflush (stream);
-
-#else
- {
- /* What POSIX says:
- 1) About the file-position indicator (-> fseeko, ftello):
- The file position indicator is incremented by fgetc() and decremented
- by ungetc():
- <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fgetc.html>
- "... the fgetc() function shall ... advance the associated file
- position indicator for the stream ..."
- <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ungetc.html>
- "The file-position indicator is decremented by each successful
- call to ungetc()..."
- 2) fflush discards bytes pushed back by ungetc:
- <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fflush.html>
- "...any characters pushed back onto the stream by ungetc()
- or ungetwc() that have not subsequently been read from the
- stream shall be discarded..."
- This implies implicitly: fflush does not change the file position
- indicator.
- 3) Effects on the file descriptor, if the file descriptor is capable of
- seeking:
- <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fflush.html>
- "...the file offset of the underlying open file description shall
- be set to the file position of the stream..." */
-
- /* POSIX does not specify fflush behavior for non-seekable input
- streams. Some implementations purge unread data, some return
- EBADF, some do nothing. */
- off_t pos = ftello (stream);
- if (pos == -1)
- {
- errno = EBADF;
- return EOF;
- }
-
- /* Clear the ungetc buffer. */
- clear_ungetc_buffer (stream);
-
- /* To get here, we must be flushing a seekable input stream, so the
- semantics of fpurge are now appropriate to clear the buffer. To
- avoid losing data, the lseek is also necessary. */
- {
- int result = fpurge (stream);
- if (result != 0)
- return result;
- }
-
-# if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
-
- {
- /* Disable seek optimization for the next fseeko call. This tells the
- following fseeko call to seek to the desired position directly, rather
- than to seek to a block-aligned boundary. */
- int saved_flags = disable_seek_optimization (stream);
- int result = fseeko (stream, pos, SEEK_SET);
-
- restore_seek_optimization (stream, saved_flags);
- return result;
- }
-
-# else
-
- pos = lseek (fileno (stream), pos, SEEK_SET);
- if (pos == -1)
- return EOF;
- /* After a successful lseek, update the file descriptor's position cache
- in the stream. */
- update_fpos_cache (stream, pos);
-
- return 0;
-
-# endif
- }
-#endif
-}
diff --git a/gl/fpurge.c b/gl/fpurge.c
deleted file mode 100644
index 21e3b86..0000000
--- a/gl/fpurge.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/* Flushing buffers of a FILE stream.
- Copyright (C) 2007-2022 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>
-
-/* Specification. */
-#include <stdio.h>
-
-#if HAVE___FPURGE /* glibc >= 2.2, Haiku, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.10, Android API >= 23, musl libc */
-# if HAVE_STDIO_EXT_H
-# include <stdio_ext.h>
-# endif
-#endif
-#include <stdlib.h>
-
-#include "stdio-impl.h"
-
-int
-fpurge (FILE *fp)
-{
-#if HAVE___FPURGE /* glibc >= 2.2, Haiku, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.10, Android API >= 23, musl libc */
-
- __fpurge (fp);
- /* The __fpurge function does not have a return value. */
- return 0;
-
-#elif HAVE_FPURGE /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin >= 1.7 */
-
- /* Call the system's fpurge function. */
-# undef fpurge
-# if !HAVE_DECL_FPURGE
- extern int fpurge (FILE *);
-# endif
- int result = fpurge (fp);
-# if defined __sferror || defined __DragonFly__ || defined __ANDROID__
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
- if (result == 0)
- /* Correct the invariants that fpurge broke.
- <stdio.h> on BSD systems says:
- "The following always hold: if _flags & __SRD, _w is 0."
- If this invariant is not fulfilled and the stream is read-write but
- currently reading, subsequent putc or fputc calls will write directly
- into the buffer, although they shouldn't be allowed to. */
- if ((fp_->_flags & __SRD) != 0)
- fp_->_w = 0;
-# endif
- return result;
-
-#else
-
- /* Most systems provide FILE as a struct and the necessary bitmask in
- <stdio.h>, because they need it for implementing getc() and putc() as
- fast macros. */
-# if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
- /* GNU libc, BeOS, Haiku, Linux libc5 */
- fp->_IO_read_end = fp->_IO_read_ptr;
- fp->_IO_write_ptr = fp->_IO_write_base;
- /* Avoid memory leak when there is an active ungetc buffer. */
- if (fp->_IO_save_base != NULL)
- {
- free (fp->_IO_save_base);
- fp->_IO_save_base = NULL;
- }
- return 0;
-# elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
- fp_->_p = fp_->_bf._base;
- fp_->_r = 0;
- fp_->_w = ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */
- ? fp_->_bf._size
- : 0);
- /* Avoid memory leak when there is an active ungetc buffer. */
- if (fp_ub._base != NULL)
- {
- if (fp_ub._base != fp_->_ubuf)
- free (fp_ub._base);
- fp_ub._base = NULL;
- }
- return 0;
-# elif defined __EMX__ /* emx+gcc */
- fp->_ptr = fp->_buffer;
- fp->_rcount = 0;
- fp->_wcount = 0;
- fp->_ungetc_count = 0;
- return 0;
-# elif defined __minix /* Minix */
- fp->_ptr = fp->_buf;
- if (fp->_ptr != NULL)
- fp->_count = 0;
- return 0;
-# elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */
- fp_->_ptr = fp_->_base;
- if (fp_->_ptr != NULL)
- fp_->_cnt = 0;
- return 0;
-# elif defined __UCLIBC__ /* uClibc */
-# ifdef __STDIO_BUFFERS
- if (fp->__modeflags & __FLAG_WRITING)
- fp->__bufpos = fp->__bufstart;
- else if (fp->__modeflags & (__FLAG_READONLY | __FLAG_READING))
- fp->__bufpos = fp->__bufread;
-# endif
- return 0;
-# elif defined __QNX__ /* QNX */
- fp->_Rback = fp->_Back + sizeof (fp->_Back);
- fp->_Rsave = NULL;
- if (fp->_Mode & 0x2000 /* _MWRITE */)
- /* fp->_Buf <= fp->_Next <= fp->_Wend */
- fp->_Next = fp->_Buf;
- else
- /* fp->_Buf <= fp->_Next <= fp->_Rend */
- fp->_Rend = fp->_Next;
- return 0;
-# elif defined __MINT__ /* Atari FreeMiNT */
- if (fp->__pushed_back)
- {
- fp->__bufp = fp->__pushback_bufp;
- fp->__pushed_back = 0;
- }
- /* Preserve the current file position. */
- if (fp->__target != -1)
- fp->__target += fp->__bufp - fp->__buffer;
- fp->__bufp = fp->__buffer;
- /* Nothing in the buffer, next getc is nontrivial. */
- fp->__get_limit = fp->__bufp;
- /* Nothing in the buffer, next putc is nontrivial. */
- fp->__put_limit = fp->__buffer;
- return 0;
-# elif defined EPLAN9 /* Plan9 */
- fp->rp = fp->wp = fp->lp = fp->buf;
- return 0;
-# else
-# error "Please port gnulib fpurge.c to your platform! Look at the definitions of fflush, setvbuf and ungetc on your system, then report this to bug-gnulib."
-# endif
-
-#endif
-}
diff --git a/gl/freading.c b/gl/freading.c
deleted file mode 100644
index 93e96e0..0000000
--- a/gl/freading.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Retrieve information about a FILE stream.
- Copyright (C) 2007-2022 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>
-
-/* Specification. */
-#include "freading.h"
-
-#include "stdio-impl.h"
-
-/* Don't use glibc's __freading function in glibc < 2.7, see
- <https://sourceware.org/bugzilla/show_bug.cgi?id=4359> */
-#if !(HAVE___FREADING && (!defined __GLIBC__ || defined __UCLIBC__ || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7)))
-
-bool
-freading (FILE *fp)
-{
- /* Most systems provide FILE as a struct and the necessary bitmask in
- <stdio.h>, because they need it for implementing getc() and putc() as
- fast macros. */
-# if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
- /* GNU libc, BeOS, Haiku, Linux libc5 */
- return ((fp->_flags & _IO_NO_WRITES) != 0
- || ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0
- && fp->_IO_read_base != NULL));
-# elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */
- return (fp_->_flags & __SRD) != 0;
-# elif defined __EMX__ /* emx+gcc */
- return (fp->_flags & _IOREAD) != 0;
-# elif defined __minix /* Minix */
- return (fp->_flags & _IOREADING) != 0;
-# elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */
-# if defined __sun /* Solaris */
- return (fp_->_flag & _IOREAD) != 0 && (fp_->_flag & _IOWRT) == 0;
-# else
- return (fp_->_flag & _IOREAD) != 0;
-# endif
-# elif defined __UCLIBC__ /* uClibc */
- return (fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) != 0;
-# elif defined __QNX__ /* QNX */
- return ((fp->_Mode & 0x2 /* _MOPENW */) == 0
- || (fp->_Mode & 0x1000 /* _MREAD */) != 0);
-# elif defined __MINT__ /* Atari FreeMiNT */
- if (!fp->__mode.__write)
- return 1;
- if (!fp->__mode.__read)
- return 0;
-# ifdef _IO_CURRENTLY_GETTING /* Flag added on 2009-02-28 */
- return (fp->__flags & _IO_CURRENTLY_GETTING) != 0;
-# else
- return (fp->__buffer < fp->__get_limit /*|| fp->__bufp == fp->__put_limit ??*/);
-# endif
-# elif defined EPLAN9 /* Plan9 */
- if (fp->state == 0 /* CLOSED */ || fp->state == 4 /* WR */)
- return 0;
- return (fp->state == 3 /* RD */ && (fp->bufl == 0 || fp->rp < fp->wp));
-# else
-# error "Please port gnulib freading.c to your platform!"
-# endif
-}
-
-#endif
diff --git a/gl/freading.h b/gl/freading.h
deleted file mode 100644
index 74fed22..0000000
--- a/gl/freading.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Retrieve information about a FILE stream.
- Copyright (C) 2007-2022 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 <stdbool.h>
-#include <stdio.h>
-
-/* Return true if the stream STREAM is opened read-only, or if the
- last operation on the stream was a read operation. Return false if
- the stream is opened write-only or append-only, or if it supports
- writing and there is no current read operation (such as fgetc).
-
- freading and fwriting will never both be true. If STREAM supports
- both reads and writes, then:
- - both freading and fwriting might be false when the stream is first
- opened, after read encounters EOF, or after fflush,
- - freading might be false or true and fwriting might be false
- after repositioning (such as fseek, fsetpos, or rewind),
- depending on the underlying implementation.
-
- STREAM must not be wide-character oriented. */
-
-#if HAVE___FREADING && (!defined __GLIBC__ || defined __UCLIBC__ || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7))
-/* Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 29, not glibc >= 2.2, but glibc >= 2.7, or musl libc */
-
-# if HAVE_STDIO_EXT_H
-# include <stdio_ext.h>
-# endif
-# define freading(stream) (__freading (stream) != 0)
-
-#else
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-extern bool freading (FILE *stream) _GL_ATTRIBUTE_PURE;
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif
diff --git a/gl/fseek.c b/gl/fseek.c
deleted file mode 100644
index e9f9314..0000000
--- a/gl/fseek.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* An fseek() function that, together with fflush(), is POSIX compliant.
- Copyright (C) 2007, 2009-2022 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>
-
-/* Specification. */
-#include <stdio.h>
-
-/* Get off_t. */
-#include <unistd.h>
-
-int
-fseek (FILE *fp, long offset, int whence)
-{
- /* Use the replacement fseeko function with all its workarounds. */
- return fseeko (fp, (off_t)offset, whence);
-}
diff --git a/gl/fseeko.c b/gl/fseeko.c
deleted file mode 100644
index 2ca2db8..0000000
--- a/gl/fseeko.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/* An fseeko() function that, together with fflush(), is POSIX compliant.
- Copyright (C) 2007-2022 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>
-
-/* Specification. */
-#include <stdio.h>
-
-/* Get off_t, lseek, _POSIX_VERSION. */
-#include <unistd.h>
-
-#include "stdio-impl.h"
-
-int
-fseeko (FILE *fp, off_t offset, int whence)
-#undef fseeko
-#if !HAVE_FSEEKO
-# undef fseek
-# define fseeko fseek
-#endif
-#if _GL_WINDOWS_64_BIT_OFF_T
-# undef fseeko
-# if HAVE__FSEEKI64 && HAVE_DECL__FSEEKI64 /* msvc, mingw since msvcrt8.0, mingw64 */
-# define fseeko _fseeki64
-# else /* mingw before msvcrt8.0 */
-# define fseeko fseeko64
-# endif
-#endif
-{
-#if LSEEK_PIPE_BROKEN
- /* mingw gives bogus answers rather than failure on non-seekable files. */
- if (lseek (fileno (fp), 0, SEEK_CUR) == -1)
- return EOF;
-#endif
-
- /* These tests are based on fpurge.c. */
-#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
- /* GNU libc, BeOS, Haiku, Linux libc5 */
- if (fp->_IO_read_end == fp->_IO_read_ptr
- && fp->_IO_write_ptr == fp->_IO_write_base
- && fp->_IO_save_base == NULL)
-#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
-# if defined __SL64 && defined __SCLE /* Cygwin */
- if ((fp->_flags & __SL64) == 0)
- {
- /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit
- mode; but has an fseeko that requires 64-bit mode. */
- FILE *tmp = fopen ("/dev/null", "r");
- if (!tmp)
- return -1;
- fp->_flags |= __SL64;
- fp->_seek64 = tmp->_seek64;
- fclose (tmp);
- }
-# endif
- if (fp_->_p == fp_->_bf._base
- && fp_->_r == 0
- && fp_->_w == ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */
- ? fp_->_bf._size
- : 0)
- && fp_ub._base == NULL)
-#elif defined __EMX__ /* emx+gcc */
- if (fp->_ptr == fp->_buffer
- && fp->_rcount == 0
- && fp->_wcount == 0
- && fp->_ungetc_count == 0)
-#elif defined __minix /* Minix */
- if (fp_->_ptr == fp_->_buf
- && (fp_->_ptr == NULL || fp_->_count == 0))
-#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */
- if (fp_->_ptr == fp_->_base
- && (fp_->_ptr == NULL || fp_->_cnt == 0))
-#elif defined __UCLIBC__ /* uClibc */
- if (((fp->__modeflags & __FLAG_WRITING) == 0
- || fp->__bufpos == fp->__bufstart)
- && ((fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) == 0
- || fp->__bufpos == fp->__bufread))
-#elif defined __QNX__ /* QNX */
- if ((fp->_Mode & 0x2000 /* _MWRITE */ ? fp->_Next == fp->_Buf : fp->_Next == fp->_Rend)
- && fp->_Rback == fp->_Back + sizeof (fp->_Back)
- && fp->_Rsave == NULL)
-#elif defined __MINT__ /* Atari FreeMiNT */
- if (fp->__bufp == fp->__buffer
- && fp->__get_limit == fp->__bufp
- && fp->__put_limit == fp->__bufp
- && !fp->__pushed_back)
-#elif defined EPLAN9 /* Plan9 */
- if (fp->rp == fp->buf
- && fp->wp == fp->buf)
-#elif FUNC_FFLUSH_STDIN < 0 && 200809 <= _POSIX_VERSION
- /* Cross-compiling to some other system advertising conformance to
- POSIX.1-2008 or later. Assume fseeko and fflush work as advertised.
- If this assumption is incorrect, please report the bug to
- bug-gnulib. */
- if (0)
-#else
- #error "Please port gnulib fseeko.c to your platform! Look at the code in fseeko.c, then report this to bug-gnulib."
-#endif
- {
- /* We get here when an fflush() call immediately preceded this one (or
- if ftell() has created buffers but no I/O has occurred on a
- newly-opened stream). We know there are no buffers. */
- off_t pos = lseek (fileno (fp), offset, whence);
- if (pos == -1)
- {
-#if defined __sferror || defined __DragonFly__ || defined __ANDROID__
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
- fp_->_flags &= ~__SOFF;
-#endif
- return -1;
- }
-
-#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
- /* GNU libc, BeOS, Haiku, Linux libc5 */
- fp->_flags &= ~_IO_EOF_SEEN;
- fp->_offset = pos;
-#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
-# if defined __CYGWIN__ || (defined __NetBSD__ && __NetBSD_Version__ >= 600000000) || defined __minix
- /* fp_->_offset is typed as an integer. */
- fp_->_offset = pos;
-# else
- /* fp_->_offset is an fpos_t. */
- {
- /* Use a union, since on NetBSD, the compilation flags
- determine whether fpos_t is typedef'd to off_t or a struct
- containing a single off_t member. */
- union
- {
- fpos_t f;
- off_t o;
- } u;
- u.o = pos;
- fp_->_offset = u.f;
- }
-# endif
- fp_->_flags |= __SOFF;
- fp_->_flags &= ~__SEOF;
-#elif defined __EMX__ /* emx+gcc */
- fp->_flags &= ~_IOEOF;
-#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */
- fp_->_flag &= ~_IOEOF;
-#elif defined __MINT__ /* Atari FreeMiNT */
- fp->__offset = pos;
- fp->__eof = 0;
-#endif
- return 0;
- }
- return fseeko (fp, offset, whence);
-}
diff --git a/gl/ftell.c b/gl/ftell.c
deleted file mode 100644
index 3fbd9e9..0000000
--- a/gl/ftell.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* An ftell() function that works around platform bugs.
- Copyright (C) 2007-2022 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>
-
-/* Specification. */
-#include <stdio.h>
-
-#include <errno.h>
-#include <limits.h>
-
-long
-ftell (FILE *fp)
-{
- /* Use the replacement ftello function with all its workarounds. */
- off_t offset = ftello (fp);
- if (LONG_MIN <= offset && offset <= LONG_MAX)
- return /* (long) */ offset;
- else
- {
- errno = EOVERFLOW;
- return -1;
- }
-}
diff --git a/gl/ftello.c b/gl/ftello.c
deleted file mode 100644
index 989614a..0000000
--- a/gl/ftello.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/* An ftello() function that works around platform bugs.
- Copyright (C) 2007, 2009-2022 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>
-
-/* Specification. */
-#include <stdio.h>
-
-#include <errno.h>
-#include "intprops.h"
-
-/* Get lseek. */
-#include <unistd.h>
-
-#include "stdio-impl.h"
-
-off_t
-ftello (FILE *fp)
-#undef ftello
-#if !HAVE_FTELLO
-# undef ftell
-# define ftello ftell
-#endif
-#if _GL_WINDOWS_64_BIT_OFF_T
-# undef ftello
-# if HAVE__FTELLI64 /* msvc, mingw64 */
-# define ftello _ftelli64
-# else /* mingw */
-# define ftello ftello64
-# endif
-#endif
-{
-#if FTELLO_BROKEN_AFTER_UNGETC /* macOS >= 10.15 */
- /* The system's ftello() is completely broken, because it calls __sflush,
- which makes side effects on the stream. */
-
- /* Handle non-seekable files first. */
- if (fp->_file < 0 || fp->_seek == NULL)
- {
- errno = ESPIPE;
- return -1;
- }
-
- /* Determine the current offset, ignoring buffered and pushed-back bytes. */
- off_t pos;
-
- if (fp->_flags & __SOFF)
- pos = fp->_offset;
- else
- {
- pos = fp->_seek (fp->_cookie, 0, SEEK_CUR);
- if (pos < 0)
- return -1;
- if (fp->_flags & __SOPT)
- {
- fp->_offset = pos;
- fp->_flags |= __SOFF;
- }
- }
-
- if (fp->_flags & __SRD)
- {
- /* Now consider buffered and pushed-back bytes from ungetc. */
- if (fp->_ub._base != NULL)
- /* Considering the buffered bytes, we are at position
- pos - fp->_ur.
- Considering also the pushed-back bytes, we are at position
- pos - fp->_ur - fp->_r. */
- pos = pos - fp->_ur - fp->_r;
- else
- /* Considering the buffered bytes, we are at position
- pos - fp->_r. */
- pos = pos - fp->_r;
- if (pos < 0)
- {
- errno = EIO;
- return -1;
- }
- }
- else if ((fp->_flags & __SWR) && fp->_p != NULL)
- {
- /* Consider the buffered bytes. */
- off_t buffered = fp->_p - fp->_bf._base;
-
- /* Compute pos + buffered, with overflow check. */
- off_t sum;
- if (! INT_ADD_OK (pos, buffered, &sum))
- {
- errno = EOVERFLOW;
- return -1;
- }
- pos = sum;
- }
-
- return pos;
-
-#else
-
-# if LSEEK_PIPE_BROKEN
- /* mingw gives bogus answers rather than failure on non-seekable files. */
- if (lseek (fileno (fp), 0, SEEK_CUR) == -1)
- return -1;
-# endif
-
-# if FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE /* Solaris */
- /* The Solaris stdio leaves the _IOREAD flag set after reading from a file
- reaches EOF and the program then starts writing to the file. ftello
- gets confused by this. */
- if (fp_->_flag & _IOWRT)
- {
- off_t pos;
-
- /* Call ftello nevertheless, for the side effects that it does on fp. */
- ftello (fp);
-
- /* Compute the file position ourselves. */
- pos = lseek (fileno (fp), (off_t) 0, SEEK_CUR);
- if (pos >= 0)
- {
- if ((fp_->_flag & _IONBF) == 0 && fp_->_base != NULL)
- pos += fp_->_ptr - fp_->_base;
- }
- return pos;
- }
-# endif
-
-# if defined __SL64 && defined __SCLE /* Cygwin */
- if ((fp->_flags & __SL64) == 0)
- {
- /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit
- mode; but has an ftello that requires 64-bit mode. */
- FILE *tmp = fopen ("/dev/null", "r");
- if (!tmp)
- return -1;
- fp->_flags |= __SL64;
- fp->_seek64 = tmp->_seek64;
- fclose (tmp);
- }
-# endif
-
- return ftello (fp);
-
-#endif
-}
diff --git a/gl/gl_openssl.h b/gl/gl_openssl.h
deleted file mode 100644
index 4c42ac8..0000000
--- a/gl/gl_openssl.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Wrap openssl crypto hash routines in gnulib interface. -*- coding: utf-8 -*-
-
- Copyright (C) 2013-2022 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/>. */
-
-/* Written by Pádraig Brady */
-
-#ifndef GL_OPENSSL_NAME
-# error "Please define GL_OPENSSL_NAME to 1,5,256 etc."
-#endif
-
-#ifndef _GL_INLINE_HEADER_BEGIN
-# error "Please include config.h first."
-#endif
-_GL_INLINE_HEADER_BEGIN
-#ifndef GL_OPENSSL_INLINE
-# define GL_OPENSSL_INLINE _GL_INLINE
-#endif
-
-/* Concatenate two preprocessor tokens. */
-#define _GLCRYPTO_CONCAT_(prefix, suffix) prefix##suffix
-#define _GLCRYPTO_CONCAT(prefix, suffix) _GLCRYPTO_CONCAT_ (prefix, suffix)
-
-#if GL_OPENSSL_NAME == 5
-# define OPENSSL_ALG md5
-#else
-# define OPENSSL_ALG _GLCRYPTO_CONCAT (sha, GL_OPENSSL_NAME)
-#endif
-
-/* Context type mappings. */
-#if BASE_OPENSSL_TYPE != GL_OPENSSL_NAME
-# undef BASE_OPENSSL_TYPE
-# if GL_OPENSSL_NAME == 224
-# define BASE_OPENSSL_TYPE 256
-# elif GL_OPENSSL_NAME == 384
-# define BASE_OPENSSL_TYPE 512
-# endif
-# define md5_CTX MD5_CTX
-# define sha1_CTX SHA_CTX
-# define sha224_CTX SHA256_CTX
-# define sha224_ctx sha256_ctx
-# define sha256_CTX SHA256_CTX
-# define sha384_CTX SHA512_CTX
-# define sha384_ctx sha512_ctx
-# define sha512_CTX SHA512_CTX
-# undef _gl_CTX
-# undef _gl_ctx
-# define _gl_CTX _GLCRYPTO_CONCAT (OPENSSL_ALG, _CTX) /* openssl type. */
-# define _gl_ctx _GLCRYPTO_CONCAT (OPENSSL_ALG, _ctx) /* gnulib type. */
-
-struct _gl_ctx { _gl_CTX CTX; };
-#endif
-
-/* Function name mappings. */
-#define md5_prefix MD5
-#define sha1_prefix SHA1
-#define sha224_prefix SHA224
-#define sha256_prefix SHA256
-#define sha384_prefix SHA384
-#define sha512_prefix SHA512
-#define _GLCRYPTO_PREFIX _GLCRYPTO_CONCAT (OPENSSL_ALG, _prefix)
-#define OPENSSL_FN(suffix) _GLCRYPTO_CONCAT (_GLCRYPTO_PREFIX, suffix)
-#define GL_CRYPTO_FN(suffix) _GLCRYPTO_CONCAT (OPENSSL_ALG, suffix)
-
-GL_OPENSSL_INLINE void
-GL_CRYPTO_FN (_init_ctx) (struct _gl_ctx *ctx)
-{ (void) OPENSSL_FN (_Init) ((_gl_CTX *) ctx); }
-
-/* These were never exposed by gnulib. */
-#if ! (GL_OPENSSL_NAME == 224 || GL_OPENSSL_NAME == 384)
-GL_OPENSSL_INLINE void
-GL_CRYPTO_FN (_process_bytes) (const void *buf, size_t len, struct _gl_ctx *ctx)
-{ OPENSSL_FN (_Update) ((_gl_CTX *) ctx, buf, len); }
-
-GL_OPENSSL_INLINE void
-GL_CRYPTO_FN (_process_block) (const void *buf, size_t len, struct _gl_ctx *ctx)
-{ GL_CRYPTO_FN (_process_bytes) (buf, len, ctx); }
-#endif
-
-GL_OPENSSL_INLINE void *
-GL_CRYPTO_FN (_finish_ctx) (struct _gl_ctx *ctx, void *restrict res)
-{ OPENSSL_FN (_Final) ((unsigned char *) res, (_gl_CTX *) ctx); return res; }
-
-GL_OPENSSL_INLINE void *
-GL_CRYPTO_FN (_buffer) (const char *buf, size_t len, void *restrict res)
-{ return OPENSSL_FN () ((const unsigned char *) buf, len, (unsigned char *) res); }
-
-GL_OPENSSL_INLINE void *
-GL_CRYPTO_FN (_read_ctx) (const struct _gl_ctx *ctx, void *restrict res)
-{
- /* Assume any unprocessed bytes in ctx are not to be ignored. */
- _gl_CTX tmp_ctx = *(_gl_CTX *) ctx;
- OPENSSL_FN (_Final) ((unsigned char *) res, &tmp_ctx);
- return res;
-}
-
-/* Undef so we can include multiple times. */
-#undef GL_CRYPTO_FN
-#undef OPENSSL_FN
-#undef _GLCRYPTO_PREFIX
-#undef OPENSSL_ALG
-#undef GL_OPENSSL_NAME
-
-_GL_INLINE_HEADER_END
diff --git a/gl/inttypes.h b/gl/inttypes.h
new file mode 100644
index 0000000..445a599
--- /dev/null
+++ b/gl/inttypes.h
@@ -0,0 +1,1509 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 2006-2022 Free Software Foundation, Inc.
+ Written by Paul Eggert, Bruno Haible, Derek Price.
+ This file is part of gnulib.
+
+ 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/>. */
+
+/*
+ * ISO C 99 <inttypes.h> for platforms that lack it.
+ * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html>
+ */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+/* Include the original <inttypes.h> if it exists, and if this file
+ has not been included yet or if this file includes gnulib stdint.h
+ which in turn includes this file.
+ The include_next requires a split double-inclusion guard. */
+#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+# if 1
+
+ /* Some pre-C++11 <stdint.h> implementations need this. */
+# if defined __cplusplus && ! defined __STDC_FORMAT_MACROS
+# define __STDC_FORMAT_MACROS 1
+# endif
+
+# include_next <inttypes.h>
+
+# define _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H
+# endif
+#endif
+
+#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+#define INTTYPES_H
+
+/* Include <stdint.h> or the gnulib replacement.
+ But avoid namespace pollution on glibc systems. */
+#ifndef __GLIBC__
+# include <stdint.h>
+#endif
+/* Get CHAR_BIT, INT_MAX, LONG_MAX, etc. */
+#include <limits.h>
+/* On mingw, __USE_MINGW_ANSI_STDIO only works if <stdio.h> is also included */
+#if defined _WIN32 && ! defined __CYGWIN__
+# include <stdio.h>
+#endif
+
+#if !(INT_MAX == 0x7fffffff && INT_MIN + INT_MAX == -1)
+# error "This file assumes that 'int' is 32-bit two's complement. Please report your platform and compiler to <bug-gnulib at gnu.org>."
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+/* C++ compatible function declaration macros.
+ Copyright (C) 2010-2022 Free Software Foundation, Inc.
+
+ This program 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 of the License, or
+ (at your option) any later version.
+
+ This program 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/>. */
+
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* Begin/end the GNULIB_NAMESPACE namespace. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE {
+# define _GL_END_NAMESPACE }
+#else
+# define _GL_BEGIN_NAMESPACE
+# define _GL_END_NAMESPACE
+#endif
+
+/* The three most frequent use cases of these macros are:
+
+ * For providing a substitute for a function that is missing on some
+ platforms, but is declared and works fine on the platforms on which
+ it exists:
+
+ #if @GNULIB_FOO@
+ # if !@HAVE_FOO@
+ _GL_FUNCDECL_SYS (foo, ...);
+ # endif
+ _GL_CXXALIAS_SYS (foo, ...);
+ _GL_CXXALIASWARN (foo);
+ #elif defined GNULIB_POSIXCHECK
+ ...
+ #endif
+
+ * For providing a replacement for a function that exists on all platforms,
+ but is broken/insufficient and needs to be replaced on some platforms:
+
+ #if @GNULIB_FOO@
+ # if @REPLACE_FOO@
+ # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+ # undef foo
+ # define foo rpl_foo
+ # endif
+ _GL_FUNCDECL_RPL (foo, ...);
+ _GL_CXXALIAS_RPL (foo, ...);
+ # else
+ _GL_CXXALIAS_SYS (foo, ...);
+ # endif
+ _GL_CXXALIASWARN (foo);
+ #elif defined GNULIB_POSIXCHECK
+ ...
+ #endif
+
+ * For providing a replacement for a function that exists on some platforms
+ but is broken/insufficient and needs to be replaced on some of them and
+ is additionally either missing or undeclared on some other platforms:
+
+ #if @GNULIB_FOO@
+ # if @REPLACE_FOO@
+ # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+ # undef foo
+ # define foo rpl_foo
+ # endif
+ _GL_FUNCDECL_RPL (foo, ...);
+ _GL_CXXALIAS_RPL (foo, ...);
+ # else
+ # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@
+ _GL_FUNCDECL_SYS (foo, ...);
+ # endif
+ _GL_CXXALIAS_SYS (foo, ...);
+ # endif
+ _GL_CXXALIASWARN (foo);
+ #elif defined GNULIB_POSIXCHECK
+ ...
+ #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+ performs the declaration with C linkage. */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+ declares a replacement function, named rpl_func, with the given prototype,
+ consisting of return type, parameters, and attributes.
+ Example:
+ _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+ _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+ _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+ declares the system function, named func, with the given prototype,
+ consisting of return type, parameters, and attributes.
+ Example:
+ _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+ _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+ _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+ declares a C++ alias called GNULIB_NAMESPACE::func
+ that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+ Example:
+ _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+
+ Wrapping rpl_func in an object with an inline conversion operator
+ avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is
+ actually used in the program. */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+ namespace GNULIB_NAMESPACE \
+ { \
+ static const struct _gl_ ## func ## _wrapper \
+ { \
+ typedef rettype (*type) parameters; \
+ \
+ inline operator type () const \
+ { \
+ return ::rpl_func; \
+ } \
+ } func = {}; \
+ } \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_MDA (func, rettype, parameters);
+ is to be used when func is a Microsoft deprecated alias, on native Windows.
+ It declares a C++ alias called GNULIB_NAMESPACE::func
+ that redirects to _func, if GNULIB_NAMESPACE is defined.
+ Example:
+ _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_MDA(func,rettype,parameters) \
+ _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters)
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+ is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+ except that the C function rpl_func may have a slightly different
+ declaration. A cast is used to silence the "invalid conversion" error
+ that would otherwise occur. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+ namespace GNULIB_NAMESPACE \
+ { \
+ static const struct _gl_ ## func ## _wrapper \
+ { \
+ typedef rettype (*type) parameters; \
+ \
+ inline operator type () const \
+ { \
+ return reinterpret_cast<type>(::rpl_func); \
+ } \
+ } func = {}; \
+ } \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters);
+ is like _GL_CXXALIAS_MDA (func, rettype, parameters);
+ except that the C function func may have a slightly different declaration.
+ A cast is used to silence the "invalid conversion" error that would
+ otherwise occur. */
+#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \
+ _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters)
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+ declares a C++ alias called GNULIB_NAMESPACE::func
+ that redirects to the system provided function func, if GNULIB_NAMESPACE
+ is defined.
+ Example:
+ _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+
+ Wrapping func in an object with an inline conversion operator
+ avoids a reference to func unless GNULIB_NAMESPACE::func is
+ actually used in the program. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+ namespace GNULIB_NAMESPACE \
+ { \
+ static const struct _gl_ ## func ## _wrapper \
+ { \
+ typedef rettype (*type) parameters; \
+ \
+ inline operator type () const \
+ { \
+ return ::func; \
+ } \
+ } func = {}; \
+ } \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+ is like _GL_CXXALIAS_SYS (func, rettype, parameters);
+ except that the C function func may have a slightly different declaration.
+ A cast is used to silence the "invalid conversion" error that would
+ otherwise occur. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+ namespace GNULIB_NAMESPACE \
+ { \
+ static const struct _gl_ ## func ## _wrapper \
+ { \
+ typedef rettype (*type) parameters; \
+ \
+ inline operator type () const \
+ { \
+ return reinterpret_cast<type>(::func); \
+ } \
+ } func = {}; \
+ } \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+ is like _GL_CXXALIAS_SYS (func, rettype, parameters);
+ except that the C function is picked among a set of overloaded functions,
+ namely the one with rettype2 and parameters2. Two consecutive casts
+ are used to silence the "cannot find a match" and "invalid conversion"
+ errors that would otherwise occur. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+ /* The outer cast must be a reinterpret_cast.
+ The inner cast: When the function is defined as a set of overloaded
+ functions, it works as a static_cast<>, choosing the designated variant.
+ When the function is defined as a single variant, it works as a
+ reinterpret_cast<>. The parenthesized cast syntax works both ways. */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+ namespace GNULIB_NAMESPACE \
+ { \
+ static const struct _gl_ ## func ## _wrapper \
+ { \
+ typedef rettype (*type) parameters; \
+ \
+ inline operator type () const \
+ { \
+ return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \
+ } \
+ } func = {}; \
+ } \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+ causes a warning to be emitted when ::func is used but not when
+ GNULIB_NAMESPACE::func is used. func must be defined without overloaded
+ variants. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+ _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+ we enable the warning only when not optimizing. */
+# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__)
+# define _GL_CXXALIASWARN_2(func,namespace) \
+ _GL_WARN_ON_USE (func, \
+ "The symbol ::" #func " refers to the system function. " \
+ "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+# define _GL_CXXALIASWARN_2(func,namespace) \
+ extern __typeof__ (func) func
+# else
+# define _GL_CXXALIASWARN_2(func,namespace) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+ causes a warning to be emitted when the given overloaded variant of ::func
+ is used but not when GNULIB_NAMESPACE::func is used. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+ GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+ we enable the warning only when not optimizing. */
+# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__)
+# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+ _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \
+ "The symbol ::" #func " refers to the system function. " \
+ "Use " #namespace "::" #func " instead.")
+# else
+# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+/* A C macro for declaring that specific arguments must not be NULL.
+ Copyright (C) 2009-2022 Free Software Foundation, Inc.
+
+ This program 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 of the License, or
+ (at your option) any later version.
+
+ This program 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/>. */
+
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+ that the values passed as arguments n, ..., m must be non-NULL pointers.
+ n = 1 stands for the first argument, n = 2 for the second argument etc. */
+#ifndef _GL_ARG_NONNULL
+# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__
+# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+# define _GL_ARG_NONNULL(params)
+# endif
+#endif
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+/* A C macro for emitting warnings if a function is used.
+ Copyright (C) 2010-2022 Free Software Foundation, Inc.
+
+ This program 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 of the License, or
+ (at your option) any later version.
+
+ This program 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/>. */
+
+/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
+ for FUNCTION which will then trigger a compiler warning containing
+ the text of "literal string" anywhere that function is called, if
+ supported by the compiler. If the compiler does not support this
+ feature, the macro expands to an unused extern declaration.
+
+ _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the
+ attribute used in _GL_WARN_ON_USE. If the compiler does not support
+ this feature, it expands to empty.
+
+ These macros are useful for marking a function as a potential
+ portability trap, with the intent that "literal string" include
+ instructions on the replacement function that should be used
+ instead.
+ _GL_WARN_ON_USE is for functions with 'extern' linkage.
+ _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline'
+ linkage.
+
+ However, one of the reasons that a function is a portability trap is
+ if it has the wrong signature. Declaring FUNCTION with a different
+ signature in C is a compilation error, so this macro must use the
+ same type as any existing declaration so that programs that avoid
+ the problematic FUNCTION do not fail to compile merely because they
+ included a header that poisoned the function. But this implies that
+ _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already
+ have a declaration. Use of this macro implies that there must not
+ be any other macro hiding the declaration of FUNCTION; but
+ undefining FUNCTION first is part of the poisoning process anyway
+ (although for symbols that are provided only via a macro, the result
+ is a compilation error rather than a warning containing
+ "literal string"). Also note that in C++, it is only safe to use if
+ FUNCTION has no overloads.
+
+ For an example, it is possible to poison 'getline' by:
+ - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
+ [getline]) in configure.ac, which potentially defines
+ HAVE_RAW_DECL_GETLINE
+ - adding this code to a header that wraps the system <stdio.h>:
+ #undef getline
+ #if HAVE_RAW_DECL_GETLINE
+ _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
+ "not universally present; use the gnulib module getline");
+ #endif
+
+ It is not possible to directly poison global variables. But it is
+ possible to write a wrapper accessor function, and poison that
+ (less common usage, like &environ, will cause a compilation error
+ rather than issue the nice warning, but the end result of informing
+ the developer about their portability problem is still achieved):
+ #if HAVE_RAW_DECL_ENVIRON
+ static char ***
+ rpl_environ (void) { return &environ; }
+ _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
+ # undef environ
+ # define environ (*rpl_environ ())
+ #endif
+ or better (avoiding contradictory use of 'static' and 'extern'):
+ #if HAVE_RAW_DECL_ENVIRON
+ static char ***
+ _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared")
+ rpl_environ (void) { return &environ; }
+ # undef environ
+ # define environ (*rpl_environ ())
+ #endif
+ */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later. */
+# define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# define _GL_WARN_ON_USE_ATTRIBUTE(message) \
+ __attribute__ ((__warning__ (message)))
+# elif __clang_major__ >= 4
+/* Another compiler attribute is available in clang. */
+# define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C __typeof__ (function) function \
+ __attribute__ ((__diagnose_if__ (1, message, "warning")))
+# define _GL_WARN_ON_USE_ATTRIBUTE(message) \
+ __attribute__ ((__diagnose_if__ (1, message, "warning")))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function. */
+# define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C __typeof__ (function) function
+# define _GL_WARN_ON_USE_ATTRIBUTE(message)
+# else /* Unsupported. */
+# define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# define _GL_WARN_ON_USE_ATTRIBUTE(message)
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message")
+ is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the
+ function is declared with the given prototype, consisting of return type,
+ parameters, and attributes.
+ This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+ not work in this case. */
+#ifndef _GL_WARN_ON_USE_CXX
+# if !defined __cplusplus
+# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \
+ _GL_WARN_ON_USE (function, msg)
+# else
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later. */
+# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \
+extern rettype_gcc function parameters_and_attributes \
+ __attribute__ ((__warning__ (msg)))
+# elif __clang_major__ >= 4
+/* Another compiler attribute is available in clang. */
+# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \
+extern rettype_clang function parameters_and_attributes \
+ __attribute__ ((__diagnose_if__ (1, msg, "warning")))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function. */
+# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \
+extern rettype_gcc function parameters_and_attributes
+# else /* Unsupported. */
+# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+ performs the declaration with C linkage. */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+# define _GL_WARN_EXTERN_C extern "C"
+# else
+# define _GL_WARN_EXTERN_C extern
+# endif
+#endif
+
+/* 7.8.1 Macros for format specifiers */
+
+#if defined _TNS_R_TARGET
+ /* Tandem NonStop R series and compatible platforms released before
+ July 2005 support %Ld but not %lld. */
+# define _LONG_LONG_FORMAT_PREFIX "L"
+#else
+# define _LONG_LONG_FORMAT_PREFIX "ll"
+#endif
+
+#if !defined PRId8
+# ifdef INT8_MAX
+# define PRId8 "d"
+# endif
+#endif
+#if !defined PRIi8
+# ifdef INT8_MAX
+# define PRIi8 "i"
+# endif
+#endif
+#if !defined PRIo8
+# ifdef UINT8_MAX
+# define PRIo8 "o"
+# endif
+#endif
+#if !defined PRIu8
+# ifdef UINT8_MAX
+# define PRIu8 "u"
+# endif
+#endif
+#if !defined PRIx8
+# ifdef UINT8_MAX
+# define PRIx8 "x"
+# endif
+#endif
+#if !defined PRIX8
+# ifdef UINT8_MAX
+# define PRIX8 "X"
+# endif
+#endif
+#if !defined PRId16
+# ifdef INT16_MAX
+# define PRId16 "d"
+# endif
+#endif
+#if !defined PRIi16
+# ifdef INT16_MAX
+# define PRIi16 "i"
+# endif
+#endif
+#if !defined PRIo16
+# ifdef UINT16_MAX
+# define PRIo16 "o"
+# endif
+#endif
+#if !defined PRIu16
+# ifdef UINT16_MAX
+# define PRIu16 "u"
+# endif
+#endif
+#if !defined PRIx16
+# ifdef UINT16_MAX
+# define PRIx16 "x"
+# endif
+#endif
+#if !defined PRIX16
+# ifdef UINT16_MAX
+# define PRIX16 "X"
+# endif
+#endif
+#if !defined PRId32
+# ifdef INT32_MAX
+# define PRId32 "d"
+# endif
+#endif
+#if !defined PRIi32
+# ifdef INT32_MAX
+# define PRIi32 "i"
+# endif
+#endif
+#if !defined PRIo32
+# ifdef UINT32_MAX
+# define PRIo32 "o"
+# endif
+#endif
+#if !defined PRIu32
+# ifdef UINT32_MAX
+# define PRIu32 "u"
+# endif
+#endif
+#if !defined PRIx32
+# ifdef UINT32_MAX
+# define PRIx32 "x"
+# endif
+#endif
+#if !defined PRIX32
+# ifdef UINT32_MAX
+# define PRIX32 "X"
+# endif
+#endif
+#ifdef INT64_MAX
+# if (0 ? defined _LP64 : defined _LP64)
+# define _PRI64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+# define _PRI64_PREFIX "I64"
+# elif LONG_MAX >> 30 == 1
+# define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined PRId64
+# define PRId64 _PRI64_PREFIX "d"
+# endif
+# if !defined PRIi64
+# define PRIi64 _PRI64_PREFIX "i"
+# endif
+#endif
+#ifdef UINT64_MAX
+# if (0 ? defined _LP64 : defined _LP64)
+# define _PRIu64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+# define _PRIu64_PREFIX "I64"
+# elif ULONG_MAX >> 31 == 1
+# define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined PRIo64
+# define PRIo64 _PRIu64_PREFIX "o"
+# endif
+# if !defined PRIu64
+# define PRIu64 _PRIu64_PREFIX "u"
+# endif
+# if !defined PRIx64
+# define PRIx64 _PRIu64_PREFIX "x"
+# endif
+# if !defined PRIX64
+# define PRIX64 _PRIu64_PREFIX "X"
+# endif
+#endif
+
+#if !defined PRIdLEAST8
+# define PRIdLEAST8 "d"
+#endif
+#if !defined PRIiLEAST8
+# define PRIiLEAST8 "i"
+#endif
+#if !defined PRIoLEAST8
+# define PRIoLEAST8 "o"
+#endif
+#if !defined PRIuLEAST8
+# define PRIuLEAST8 "u"
+#endif
+#if !defined PRIxLEAST8
+# define PRIxLEAST8 "x"
+#endif
+#if !defined PRIXLEAST8
+# define PRIXLEAST8 "X"
+#endif
+#if !defined PRIdLEAST16
+# define PRIdLEAST16 "d"
+#endif
+#if !defined PRIiLEAST16
+# define PRIiLEAST16 "i"
+#endif
+#if !defined PRIoLEAST16
+# define PRIoLEAST16 "o"
+#endif
+#if !defined PRIuLEAST16
+# define PRIuLEAST16 "u"
+#endif
+#if !defined PRIxLEAST16
+# define PRIxLEAST16 "x"
+#endif
+#if !defined PRIXLEAST16
+# define PRIXLEAST16 "X"
+#endif
+#if !defined PRIdLEAST32
+# define PRIdLEAST32 "d"
+#endif
+#if !defined PRIiLEAST32
+# define PRIiLEAST32 "i"
+#endif
+#if !defined PRIoLEAST32
+# define PRIoLEAST32 "o"
+#endif
+#if !defined PRIuLEAST32
+# define PRIuLEAST32 "u"
+#endif
+#if !defined PRIxLEAST32
+# define PRIxLEAST32 "x"
+#endif
+#if !defined PRIXLEAST32
+# define PRIXLEAST32 "X"
+#endif
+#ifdef INT64_MAX
+# if !defined PRIdLEAST64
+# define PRIdLEAST64 PRId64
+# endif
+# if !defined PRIiLEAST64
+# define PRIiLEAST64 PRIi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined PRIoLEAST64
+# define PRIoLEAST64 PRIo64
+# endif
+# if !defined PRIuLEAST64
+# define PRIuLEAST64 PRIu64
+# endif
+# if !defined PRIxLEAST64
+# define PRIxLEAST64 PRIx64
+# endif
+# if !defined PRIXLEAST64
+# define PRIXLEAST64 PRIX64
+# endif
+#endif
+
+#if !defined PRIdFAST8
+# if INT_FAST8_MAX > INT32_MAX
+# define PRIdFAST8 PRId64
+# else
+# define PRIdFAST8 "d"
+# endif
+#endif
+#if !defined PRIiFAST8
+# if INT_FAST8_MAX > INT32_MAX
+# define PRIiFAST8 PRIi64
+# else
+# define PRIiFAST8 "i"
+# endif
+#endif
+#if !defined PRIoFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define PRIoFAST8 PRIo64
+# else
+# define PRIoFAST8 "o"
+# endif
+#endif
+#if !defined PRIuFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define PRIuFAST8 PRIu64
+# else
+# define PRIuFAST8 "u"
+# endif
+#endif
+#if !defined PRIxFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define PRIxFAST8 PRIx64
+# else
+# define PRIxFAST8 "x"
+# endif
+#endif
+#if !defined PRIXFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define PRIXFAST8 PRIX64
+# else
+# define PRIXFAST8 "X"
+# endif
+#endif
+#if !defined PRIdFAST16
+# if INT_FAST16_MAX > INT32_MAX
+# define PRIdFAST16 PRId64
+# else
+# define PRIdFAST16 "d"
+# endif
+#endif
+#if !defined PRIiFAST16
+# if INT_FAST16_MAX > INT32_MAX
+# define PRIiFAST16 PRIi64
+# else
+# define PRIiFAST16 "i"
+# endif
+#endif
+#if !defined PRIoFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define PRIoFAST16 PRIo64
+# else
+# define PRIoFAST16 "o"
+# endif
+#endif
+#if !defined PRIuFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define PRIuFAST16 PRIu64
+# else
+# define PRIuFAST16 "u"
+# endif
+#endif
+#if !defined PRIxFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define PRIxFAST16 PRIx64
+# else
+# define PRIxFAST16 "x"
+# endif
+#endif
+#if !defined PRIXFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define PRIXFAST16 PRIX64
+# else
+# define PRIXFAST16 "X"
+# endif
+#endif
+#if !defined PRIdFAST32
+# if INT_FAST32_MAX > INT32_MAX
+# define PRIdFAST32 PRId64
+# else
+# define PRIdFAST32 "d"
+# endif
+#endif
+#if !defined PRIiFAST32
+# if INT_FAST32_MAX > INT32_MAX
+# define PRIiFAST32 PRIi64
+# else
+# define PRIiFAST32 "i"
+# endif
+#endif
+#if !defined PRIoFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define PRIoFAST32 PRIo64
+# else
+# define PRIoFAST32 "o"
+# endif
+#endif
+#if !defined PRIuFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define PRIuFAST32 PRIu64
+# else
+# define PRIuFAST32 "u"
+# endif
+#endif
+#if !defined PRIxFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define PRIxFAST32 PRIx64
+# else
+# define PRIxFAST32 "x"
+# endif
+#endif
+#if !defined PRIXFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define PRIXFAST32 PRIX64
+# else
+# define PRIXFAST32 "X"
+# endif
+#endif
+#ifdef INT64_MAX
+# if !defined PRIdFAST64
+# define PRIdFAST64 PRId64
+# endif
+# if !defined PRIiFAST64
+# define PRIiFAST64 PRIi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined PRIoFAST64
+# define PRIoFAST64 PRIo64
+# endif
+# if !defined PRIuFAST64
+# define PRIuFAST64 PRIu64
+# endif
+# if !defined PRIxFAST64
+# define PRIxFAST64 PRIx64
+# endif
+# if !defined PRIXFAST64
+# define PRIXFAST64 PRIX64
+# endif
+#endif
+
+#if !defined PRIdMAX
+# if 1
+# define PRIdMAX PRId64
+# else
+# define PRIdMAX "ld"
+# endif
+#endif
+#if !defined PRIiMAX
+# if 1
+# define PRIiMAX PRIi64
+# else
+# define PRIiMAX "li"
+# endif
+#endif
+#if !defined PRIoMAX
+# if 1
+# define PRIoMAX PRIo64
+# else
+# define PRIoMAX "lo"
+# endif
+#endif
+#if !defined PRIuMAX
+# if 1
+# define PRIuMAX PRIu64
+# else
+# define PRIuMAX "lu"
+# endif
+#endif
+#if !defined PRIxMAX
+# if 1
+# define PRIxMAX PRIx64
+# else
+# define PRIxMAX "lx"
+# endif
+#endif
+#if !defined PRIXMAX
+# if 1
+# define PRIXMAX PRIX64
+# else
+# define PRIXMAX "lX"
+# endif
+#endif
+
+#if !defined PRIdPTR
+# ifdef INTPTR_MAX
+# define PRIdPTR __PRIPTR_PREFIX "d"
+# endif
+#endif
+#if !defined PRIiPTR
+# ifdef INTPTR_MAX
+# define PRIiPTR __PRIPTR_PREFIX "i"
+# endif
+#endif
+#if !defined PRIoPTR
+# ifdef UINTPTR_MAX
+# define PRIoPTR __PRIPTR_PREFIX "o"
+# endif
+#endif
+#if !defined PRIuPTR
+# ifdef UINTPTR_MAX
+# define PRIuPTR __PRIPTR_PREFIX "u"
+# endif
+#endif
+#if !defined PRIxPTR
+# ifdef UINTPTR_MAX
+# define PRIxPTR __PRIPTR_PREFIX "x"
+# endif
+#endif
+#if !defined PRIXPTR
+# ifdef UINTPTR_MAX
+# define PRIXPTR __PRIPTR_PREFIX "X"
+# endif
+#endif
+
+#if !defined SCNd8
+# ifdef INT8_MAX
+# define SCNd8 "hhd"
+# endif
+#endif
+#if !defined SCNi8
+# ifdef INT8_MAX
+# define SCNi8 "hhi"
+# endif
+#endif
+#if !defined SCNo8
+# ifdef UINT8_MAX
+# define SCNo8 "hho"
+# endif
+#endif
+#if !defined SCNu8
+# ifdef UINT8_MAX
+# define SCNu8 "hhu"
+# endif
+#endif
+#if !defined SCNx8
+# ifdef UINT8_MAX
+# define SCNx8 "hhx"
+# endif
+#endif
+#if !defined SCNd16
+# ifdef INT16_MAX
+# define SCNd16 "hd"
+# endif
+#endif
+#if !defined SCNi16
+# ifdef INT16_MAX
+# define SCNi16 "hi"
+# endif
+#endif
+#if !defined SCNo16
+# ifdef UINT16_MAX
+# define SCNo16 "ho"
+# endif
+#endif
+#if !defined SCNu16
+# ifdef UINT16_MAX
+# define SCNu16 "hu"
+# endif
+#endif
+#if !defined SCNx16
+# ifdef UINT16_MAX
+# define SCNx16 "hx"
+# endif
+#endif
+#if !defined SCNd32
+# ifdef INT32_MAX
+# define SCNd32 "d"
+# endif
+#endif
+#if !defined SCNi32
+# ifdef INT32_MAX
+# define SCNi32 "i"
+# endif
+#endif
+#if !defined SCNo32
+# ifdef UINT32_MAX
+# define SCNo32 "o"
+# endif
+#endif
+#if !defined SCNu32
+# ifdef UINT32_MAX
+# define SCNu32 "u"
+# endif
+#endif
+#if !defined SCNx32
+# ifdef UINT32_MAX
+# define SCNx32 "x"
+# endif
+#endif
+#ifdef INT64_MAX
+# if (0 ? defined _LP64 : defined _LP64)
+# define _SCN64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+# define _SCN64_PREFIX "I64"
+# elif LONG_MAX >> 30 == 1
+# define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined SCNd64
+# define SCNd64 _SCN64_PREFIX "d"
+# endif
+# if !defined SCNi64
+# define SCNi64 _SCN64_PREFIX "i"
+# endif
+#endif
+#ifdef UINT64_MAX
+# if (0 ? defined _LP64 : defined _LP64)
+# define _SCNu64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+# define _SCNu64_PREFIX "I64"
+# elif ULONG_MAX >> 31 == 1
+# define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined SCNo64
+# define SCNo64 _SCNu64_PREFIX "o"
+# endif
+# if !defined SCNu64
+# define SCNu64 _SCNu64_PREFIX "u"
+# endif
+# if !defined SCNx64
+# define SCNx64 _SCNu64_PREFIX "x"
+# endif
+#endif
+
+#if !defined SCNdLEAST8
+# define SCNdLEAST8 "hhd"
+#endif
+#if !defined SCNiLEAST8
+# define SCNiLEAST8 "hhi"
+#endif
+#if !defined SCNoLEAST8
+# define SCNoLEAST8 "hho"
+#endif
+#if !defined SCNuLEAST8
+# define SCNuLEAST8 "hhu"
+#endif
+#if !defined SCNxLEAST8
+# define SCNxLEAST8 "hhx"
+#endif
+#if !defined SCNdLEAST16
+# define SCNdLEAST16 "hd"
+#endif
+#if !defined SCNiLEAST16
+# define SCNiLEAST16 "hi"
+#endif
+#if !defined SCNoLEAST16
+# define SCNoLEAST16 "ho"
+#endif
+#if !defined SCNuLEAST16
+# define SCNuLEAST16 "hu"
+#endif
+#if !defined SCNxLEAST16
+# define SCNxLEAST16 "hx"
+#endif
+#if !defined SCNdLEAST32
+# define SCNdLEAST32 "d"
+#endif
+#if !defined SCNiLEAST32
+# define SCNiLEAST32 "i"
+#endif
+#if !defined SCNoLEAST32
+# define SCNoLEAST32 "o"
+#endif
+#if !defined SCNuLEAST32
+# define SCNuLEAST32 "u"
+#endif
+#if !defined SCNxLEAST32
+# define SCNxLEAST32 "x"
+#endif
+#ifdef INT64_MAX
+# if !defined SCNdLEAST64
+# define SCNdLEAST64 SCNd64
+# endif
+# if !defined SCNiLEAST64
+# define SCNiLEAST64 SCNi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined SCNoLEAST64
+# define SCNoLEAST64 SCNo64
+# endif
+# if !defined SCNuLEAST64
+# define SCNuLEAST64 SCNu64
+# endif
+# if !defined SCNxLEAST64
+# define SCNxLEAST64 SCNx64
+# endif
+#endif
+
+#if !defined SCNdFAST8
+# if INT_FAST8_MAX > INT32_MAX
+# define SCNdFAST8 SCNd64
+# elif INT_FAST8_MAX == 0x7fff
+# define SCNdFAST8 "hd"
+# elif INT_FAST8_MAX == 0x7f
+# define SCNdFAST8 "hhd"
+# else
+# define SCNdFAST8 "d"
+# endif
+#endif
+#if !defined SCNiFAST8
+# if INT_FAST8_MAX > INT32_MAX
+# define SCNiFAST8 SCNi64
+# elif INT_FAST8_MAX == 0x7fff
+# define SCNiFAST8 "hi"
+# elif INT_FAST8_MAX == 0x7f
+# define SCNiFAST8 "hhi"
+# else
+# define SCNiFAST8 "i"
+# endif
+#endif
+#if !defined SCNoFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define SCNoFAST8 SCNo64
+# elif UINT_FAST8_MAX == 0xffff
+# define SCNoFAST8 "ho"
+# elif UINT_FAST8_MAX == 0xff
+# define SCNoFAST8 "hho"
+# else
+# define SCNoFAST8 "o"
+# endif
+#endif
+#if !defined SCNuFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define SCNuFAST8 SCNu64
+# elif UINT_FAST8_MAX == 0xffff
+# define SCNuFAST8 "hu"
+# elif UINT_FAST8_MAX == 0xff
+# define SCNuFAST8 "hhu"
+# else
+# define SCNuFAST8 "u"
+# endif
+#endif
+#if !defined SCNxFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define SCNxFAST8 SCNx64
+# elif UINT_FAST8_MAX == 0xffff
+# define SCNxFAST8 "hx"
+# elif UINT_FAST8_MAX == 0xff
+# define SCNxFAST8 "hhx"
+# else
+# define SCNxFAST8 "x"
+# endif
+#endif
+#if !defined SCNdFAST16
+# if INT_FAST16_MAX > INT32_MAX
+# define SCNdFAST16 SCNd64
+# elif INT_FAST16_MAX == 0x7fff
+# define SCNdFAST16 "hd"
+# else
+# define SCNdFAST16 "d"
+# endif
+#endif
+#if !defined SCNiFAST16
+# if INT_FAST16_MAX > INT32_MAX
+# define SCNiFAST16 SCNi64
+# elif INT_FAST16_MAX == 0x7fff
+# define SCNiFAST16 "hi"
+# else
+# define SCNiFAST16 "i"
+# endif
+#endif
+#if !defined SCNoFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define SCNoFAST16 SCNo64
+# elif UINT_FAST16_MAX == 0xffff
+# define SCNoFAST16 "ho"
+# else
+# define SCNoFAST16 "o"
+# endif
+#endif
+#if !defined SCNuFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define SCNuFAST16 SCNu64
+# elif UINT_FAST16_MAX == 0xffff
+# define SCNuFAST16 "hu"
+# else
+# define SCNuFAST16 "u"
+# endif
+#endif
+#if !defined SCNxFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define SCNxFAST16 SCNx64
+# elif UINT_FAST16_MAX == 0xffff
+# define SCNxFAST16 "hx"
+# else
+# define SCNxFAST16 "x"
+# endif
+#endif
+#if !defined SCNdFAST32
+# if INT_FAST32_MAX > INT32_MAX
+# define SCNdFAST32 SCNd64
+# else
+# define SCNdFAST32 "d"
+# endif
+#endif
+#if !defined SCNiFAST32
+# if INT_FAST32_MAX > INT32_MAX
+# define SCNiFAST32 SCNi64
+# else
+# define SCNiFAST32 "i"
+# endif
+#endif
+#if !defined SCNoFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define SCNoFAST32 SCNo64
+# else
+# define SCNoFAST32 "o"
+# endif
+#endif
+#if !defined SCNuFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define SCNuFAST32 SCNu64
+# else
+# define SCNuFAST32 "u"
+# endif
+#endif
+#if !defined SCNxFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define SCNxFAST32 SCNx64
+# else
+# define SCNxFAST32 "x"
+# endif
+#endif
+#ifdef INT64_MAX
+# if !defined SCNdFAST64
+# define SCNdFAST64 SCNd64
+# endif
+# if !defined SCNiFAST64
+# define SCNiFAST64 SCNi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined SCNoFAST64
+# define SCNoFAST64 SCNo64
+# endif
+# if !defined SCNuFAST64
+# define SCNuFAST64 SCNu64
+# endif
+# if !defined SCNxFAST64
+# define SCNxFAST64 SCNx64
+# endif
+#endif
+
+#if !defined SCNdMAX
+# if 1
+# define SCNdMAX SCNd64
+# else
+# define SCNdMAX "ld"
+# endif
+#endif
+#if !defined SCNiMAX
+# if 1
+# define SCNiMAX SCNi64
+# else
+# define SCNiMAX "li"
+# endif
+#endif
+#if !defined SCNoMAX
+# if 1
+# define SCNoMAX SCNo64
+# else
+# define SCNoMAX "lo"
+# endif
+#endif
+#if !defined SCNuMAX
+# if 1
+# define SCNuMAX SCNu64
+# else
+# define SCNuMAX "lu"
+# endif
+#endif
+#if !defined SCNxMAX
+# if 1
+# define SCNxMAX SCNx64
+# else
+# define SCNxMAX "lx"
+# endif
+#endif
+
+#if !defined SCNdPTR
+# ifdef INTPTR_MAX
+# define SCNdPTR __PRIPTR_PREFIX "d"
+# endif
+#endif
+#if !defined SCNiPTR
+# ifdef INTPTR_MAX
+# define SCNiPTR __PRIPTR_PREFIX "i"
+# endif
+#endif
+#if !defined SCNoPTR
+# ifdef UINTPTR_MAX
+# define SCNoPTR __PRIPTR_PREFIX "o"
+# endif
+#endif
+#if !defined SCNuPTR
+# ifdef UINTPTR_MAX
+# define SCNuPTR __PRIPTR_PREFIX "u"
+# endif
+#endif
+#if !defined SCNxPTR
+# ifdef UINTPTR_MAX
+# define SCNxPTR __PRIPTR_PREFIX "x"
+# endif
+#endif
+
+/* 7.8.2 Functions for greatest-width integer types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if 0
+# if !1
+extern intmax_t imaxabs (intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxabs
+# if HAVE_RAW_DECL_IMAXABS
+_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - "
+ "use gnulib module imaxabs for portability");
+# endif
+#endif
+
+#if 0
+# if !1
+# if !GNULIB_defined_imaxdiv_t
+typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t;
+# define GNULIB_defined_imaxdiv_t 1
+# endif
+# endif
+# if !1
+extern imaxdiv_t imaxdiv (intmax_t, intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxdiv
+# if HAVE_RAW_DECL_IMAXDIV
+_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - "
+ "use gnulib module imaxdiv for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strtoimax
+# define strtoimax rpl_strtoimax
+# endif
+_GL_FUNCDECL_RPL (strtoimax, intmax_t,
+ (const char *restrict, char **restrict, int)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoimax, intmax_t,
+ (const char *restrict, char **restrict, int));
+# else
+# if !1
+# undef strtoimax
+_GL_FUNCDECL_SYS (strtoimax, intmax_t,
+ (const char *restrict, char **restrict, int)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoimax, intmax_t,
+ (const char *restrict, char **restrict, int));
+# endif
+_GL_CXXALIASWARN (strtoimax);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoimax
+# if HAVE_RAW_DECL_STRTOIMAX
+_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - "
+ "use gnulib module strtoimax for portability");
+# endif
+#endif
+
+#if 0
+# if 0
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strtoumax
+# define strtoumax rpl_strtoumax
+# endif
+_GL_FUNCDECL_RPL (strtoumax, uintmax_t,
+ (const char *restrict, char **restrict, int)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoumax, uintmax_t,
+ (const char *restrict, char **restrict, int));
+# else
+# if !1
+# undef strtoumax
+_GL_FUNCDECL_SYS (strtoumax, uintmax_t,
+ (const char *restrict, char **restrict, int)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoumax, uintmax_t,
+ (const char *restrict, char **restrict, int));
+# endif
+_GL_CXXALIASWARN (strtoumax);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoumax
+# if HAVE_RAW_DECL_STRTOUMAX
+_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - "
+ "use gnulib module strtoumax for portability");
+# endif
+#endif
+
+/* Don't bother defining or declaring wcstoimax and wcstoumax, since
+ wide-character functions like this are hardly ever useful. */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */
diff --git a/gl/limits.h b/gl/limits.h
new file mode 100644
index 0000000..4f37f3c
--- /dev/null
+++ b/gl/limits.h
@@ -0,0 +1,132 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <limits.h>.
+
+ Copyright 2016-2022 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/>. */
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+
+#if defined _GL_ALREADY_INCLUDING_LIMITS_H
+/* Special invocation convention:
+ On Haiku/x86_64, we have a sequence of nested includes
+ <limits.h> -> <syslimits.h> -> <limits.h>.
+ In this situation, LONG_MAX and INT_MAX are not yet defined,
+ therefore we should not attempt to define LONG_BIT. */
+
+#include_next <limits.h>
+
+#else
+/* Normal invocation convention. */
+
+#ifndef _GL_LIMITS_H
+
+# define _GL_ALREADY_INCLUDING_LIMITS_H
+
+/* The include_next requires a split double-inclusion guard. */
+# include_next <limits.h>
+
+# undef _GL_ALREADY_INCLUDING_LIMITS_H
+
+#ifndef _GL_LIMITS_H
+#define _GL_LIMITS_H
+
+#ifndef LLONG_MIN
+# if defined LONG_LONG_MIN /* HP-UX 11.31 */
+# define LLONG_MIN LONG_LONG_MIN
+# elif defined LONGLONG_MIN /* IRIX 6.5 */
+# define LLONG_MIN LONGLONG_MIN
+# elif defined __GNUC__
+# define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL)
+# endif
+#endif
+#ifndef LLONG_MAX
+# if defined LONG_LONG_MAX /* HP-UX 11.31 */
+# define LLONG_MAX LONG_LONG_MAX
+# elif defined LONGLONG_MAX /* IRIX 6.5 */
+# define LLONG_MAX LONGLONG_MAX
+# elif defined __GNUC__
+# define LLONG_MAX __LONG_LONG_MAX__
+# endif
+#endif
+#ifndef ULLONG_MAX
+# if defined ULONG_LONG_MAX /* HP-UX 11.31 */
+# define ULLONG_MAX ULONG_LONG_MAX
+# elif defined ULONGLONG_MAX /* IRIX 6.5 */
+# define ULLONG_MAX ULONGLONG_MAX
+# elif defined __GNUC__
+# define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL)
+# endif
+#endif
+
+/* The number of usable bits in an unsigned or signed integer type
+ with minimum value MIN and maximum value MAX, as an int expression
+ suitable in #if. Cover all known practical hosts. This
+ implementation exploits the fact that MAX is 1 less than a power of
+ 2, and merely counts the number of 1 bits in MAX; "COBn" means
+ "count the number of 1 bits in the low-order n bits"). */
+#define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max))
+#define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n))
+#define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n))
+#define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n))
+#define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n))
+#define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n))
+#define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1))
+
+#ifndef WORD_BIT
+/* Assume 'int' is 32 bits wide. */
+# define WORD_BIT 32
+#endif
+#ifndef LONG_BIT
+/* Assume 'long' is 32 or 64 bits wide. */
+# if LONG_MAX == INT_MAX
+# define LONG_BIT 32
+# else
+# define LONG_BIT 64
+# endif
+#endif
+
+/* Macros specified by C2x and by ISO/IEC TS 18661-1:2014. */
+
+#if (! defined ULLONG_WIDTH \
+ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__ \
+ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__)))
+# define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX)
+# define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX)
+# define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX)
+# define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX)
+# define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX)
+# define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX)
+# define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX)
+# define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX)
+# define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX)
+# define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX)
+# define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX)
+#endif
+
+/* Macros specified by C2x. */
+
+#if (! defined BOOL_WIDTH \
+ && (defined _GNU_SOURCE \
+ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__)))
+# define BOOL_MAX 1
+# define BOOL_WIDTH 1
+#endif
+
+#endif /* _GL_LIMITS_H */
+#endif /* _GL_LIMITS_H */
+#endif
diff --git a/gl/lseek.c b/gl/lseek.c
deleted file mode 100644
index 1a9c49b..0000000
--- a/gl/lseek.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* An lseek() function that detects pipes.
- Copyright (C) 2007, 2009-2022 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>
-
-/* Specification. */
-#include <unistd.h>
-
-#if defined _WIN32 && ! defined __CYGWIN__
-/* Windows platforms. */
-/* Get GetFileType. */
-# include <windows.h>
-/* Get _get_osfhandle. */
-# if GNULIB_MSVC_NOTHROW
-# include "msvc-nothrow.h"
-# else
-# include <io.h>
-# endif
-#else
-# include <sys/stat.h>
-#endif
-#include <errno.h>
-
-#undef lseek
-
-off_t
-rpl_lseek (int fd, off_t offset, int whence)
-{
-#if defined _WIN32 && ! defined __CYGWIN__
- /* mingw lseek mistakenly succeeds on pipes, sockets, and terminals. */
- HANDLE h = (HANDLE) _get_osfhandle (fd);
- if (h == INVALID_HANDLE_VALUE)
- {
- errno = EBADF;
- return -1;
- }
- if (GetFileType (h) != FILE_TYPE_DISK)
- {
- errno = ESPIPE;
- return -1;
- }
-#elif defined __APPLE__ && defined __MACH__ && defined SEEK_DATA
- if (whence == SEEK_DATA)
- {
- /* If OFFSET points to data, macOS lseek+SEEK_DATA returns the
- start S of the first data region that begins *after* OFFSET,
- where the region from OFFSET to S consists of possibly-empty
- data followed by a possibly-empty hole. To work around this
- portability glitch, check whether OFFSET is within data by
- using lseek+SEEK_HOLE, and if so return to OFFSET by using
- lseek+SEEK_SET. Also, contrary to the macOS documentation,
- lseek+SEEK_HOLE can fail with ENXIO if there are no holes on
- or after OFFSET. What a mess! */
- off_t next_hole = lseek (fd, offset, SEEK_HOLE);
- if (next_hole < 0)
- return errno == ENXIO ? offset : next_hole;
- if (next_hole != offset)
- whence = SEEK_SET;
- }
-#else
- /* BeOS lseek mistakenly succeeds on pipes... */
- struct stat statbuf;
- if (fstat (fd, &statbuf) < 0)
- return -1;
- if (!S_ISREG (statbuf.st_mode))
- {
- errno = ESPIPE;
- return -1;
- }
-#endif
-#if _GL_WINDOWS_64_BIT_OFF_T || (defined __MINGW32__ && defined _FILE_OFFSET_BITS && (_FILE_OFFSET_BITS == 64))
- return _lseeki64 (fd, offset, whence);
-#else
- return lseek (fd, offset, whence);
-#endif
-}
diff --git a/gl/m4/af_alg.m4 b/gl/m4/af_alg.m4
deleted file mode 100644
index 9c7edf0..0000000
--- a/gl/m4/af_alg.m4
+++ /dev/null
@@ -1,57 +0,0 @@
-# af_alg.m4 serial 6
-dnl Copyright 2018-2022 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 From Matteo Croce.
-
-AC_DEFUN_ONCE([gl_AF_ALG],
-[
- AC_REQUIRE([gl_SYS_SOCKET_H])
- AC_REQUIRE([AC_C_INLINE])
-
- dnl Check whether linux/if_alg.h has needed features.
- AC_CACHE_CHECK([whether linux/if_alg.h has struct sockaddr_alg.],
- [gl_cv_header_linux_if_alg_salg],
- [AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM([[#include <sys/socket.h>
- #include <linux/if_alg.h>
- struct sockaddr_alg salg = {
- .salg_family = AF_ALG,
- .salg_type = "hash",
- .salg_name = "sha1",
- };]])],
- [gl_cv_header_linux_if_alg_salg=yes],
- [gl_cv_header_linux_if_alg_salg=no])])
- if test "$gl_cv_header_linux_if_alg_salg" = yes; then
- AC_DEFINE([HAVE_LINUX_IF_ALG_H], [1],
- [Define to 1 if you have 'struct sockaddr_alg' defined.])
- fi
-
- dnl The default is to not use AF_ALG if available,
- dnl as it's system dependent as to whether the kernel
- dnl routines are faster than libcrypto for example.
- use_af_alg=no
- AC_ARG_WITH([linux-crypto],
- [AS_HELP_STRING([[--with-linux-crypto]],
- [use Linux kernel cryptographic API (if available) for the hash functions
- MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 on files])],
- [use_af_alg=$withval],
- [use_af_alg=no])
- dnl We cannot use it if it is not available.
- if test "$gl_cv_header_linux_if_alg_salg" != yes; then
- if test "$use_af_alg" != no; then
- AC_MSG_WARN([Linux kernel cryptographic API not found])
- fi
- use_af_alg=no
- fi
-
- if test "$use_af_alg" != no; then
- USE_AF_ALG=1
- else
- USE_AF_ALG=0
- fi
- AC_DEFINE_UNQUOTED([USE_LINUX_CRYPTO_API], [$USE_AF_ALG],
- [Define to 1 if you want to use the Linux kernel cryptographic API.])
-])
diff --git a/gl/m4/byteswap.m4 b/gl/m4/byteswap.m4
deleted file mode 100644
index 99aeb68..0000000
--- a/gl/m4/byteswap.m4
+++ /dev/null
@@ -1,17 +0,0 @@
-# byteswap.m4 serial 5
-dnl Copyright (C) 2005, 2007, 2009-2022 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 Written by Oskar Liljeblad.
-
-AC_DEFUN([gl_BYTESWAP],
-[
- dnl Prerequisites of lib/byteswap.in.h.
- AC_CHECK_HEADERS([byteswap.h], [
- GL_GENERATE_BYTESWAP_H=false
- ], [
- GL_GENERATE_BYTESWAP_H=true
- ])
-])
diff --git a/gl/m4/fflush.m4 b/gl/m4/fflush.m4
deleted file mode 100644
index e36f90e..0000000
--- a/gl/m4/fflush.m4
+++ /dev/null
@@ -1,100 +0,0 @@
-# fflush.m4 serial 18
-
-# Copyright (C) 2007-2022 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-dnl From Eric Blake
-
-dnl Find out how to obey POSIX semantics of fflush(stdin) discarding
-dnl unread input on seekable streams, rather than C99 undefined semantics.
-
-AC_DEFUN([gl_FUNC_FFLUSH],
-[
- AC_REQUIRE([gl_STDIO_H_DEFAULTS])
- gl_FUNC_FFLUSH_STDIN
- case "$gl_cv_func_fflush_stdin" in
- *yes) ;;
- *) REPLACE_FFLUSH=1 ;;
- esac
-])
-
-dnl Determine whether fflush works on input streams.
-dnl Sets gl_cv_func_fflush_stdin.
-
-AC_DEFUN([gl_FUNC_FFLUSH_STDIN],
-[
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
- AC_CHECK_HEADERS_ONCE([unistd.h])
- AC_CACHE_CHECK([whether fflush works on input streams],
- [gl_cv_func_fflush_stdin],
- [echo hello world > conftest.txt
- AC_RUN_IFELSE([AC_LANG_PROGRAM(
- [[
-#include <stdio.h>
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else /* on Windows with MSVC */
-# include <io.h>
-#endif
- ]GL_MDA_DEFINES],
- [[FILE *f = fopen ("conftest.txt", "r");
- char buffer[10];
- int fd;
- int c;
- if (f == NULL)
- return 1;
- fd = fileno (f);
- if (fd < 0 || fread (buffer, 1, 5, f) != 5)
- { fclose (f); return 2; }
- /* For deterministic results, ensure f read a bigger buffer. */
- if (lseek (fd, 0, SEEK_CUR) == 5)
- { fclose (f); return 3; }
- /* POSIX requires fflush-fseek to set file offset of fd. This fails
- on BSD systems and on mingw. */
- if (fflush (f) != 0 || fseek (f, 0, SEEK_CUR) != 0)
- { fclose (f); return 4; }
- if (lseek (fd, 0, SEEK_CUR) != 5)
- { fclose (f); return 5; }
- /* Verify behaviour of fflush after ungetc. See
- <https://www.opengroup.org/austin/aardvark/latest/xshbug3.txt> */
- /* Verify behaviour of fflush after a backup ungetc. This fails on
- mingw. */
- c = fgetc (f);
- ungetc (c, f);
- fflush (f);
- if (fgetc (f) != c)
- { fclose (f); return 6; }
- /* Verify behaviour of fflush after a non-backup ungetc. This fails
- on glibc 2.8 and on BSD systems. */
- c = fgetc (f);
- ungetc ('@', f);
- fflush (f);
- if (fgetc (f) != c)
- { fclose (f); return 7; }
- fclose (f);
- return 0;
- ]])],
- [gl_cv_func_fflush_stdin=yes],
- [gl_cv_func_fflush_stdin=no],
- [case "$host_os" in
- # Guess no on native Windows.
- mingw*) gl_cv_func_fflush_stdin="guessing no" ;;
- *) gl_cv_func_fflush_stdin=cross ;;
- esac
- ])
- rm conftest.txt
- ])
- case "$gl_cv_func_fflush_stdin" in
- *yes) gl_func_fflush_stdin=1 ;;
- *no) gl_func_fflush_stdin=0 ;;
- *) gl_func_fflush_stdin='(-1)' ;;
- esac
- AC_DEFINE_UNQUOTED([FUNC_FFLUSH_STDIN], [$gl_func_fflush_stdin],
- [Define to 1 if fflush is known to work on stdin as per POSIX.1-2008,
- 0 if fflush is known to not work, -1 if unknown.])
-])
-
-# Prerequisites of lib/fflush.c.
-AC_DEFUN([gl_PREREQ_FFLUSH], [:])
diff --git a/gl/m4/fpurge.m4 b/gl/m4/fpurge.m4
deleted file mode 100644
index 1a15454..0000000
--- a/gl/m4/fpurge.m4
+++ /dev/null
@@ -1,73 +0,0 @@
-# fpurge.m4 serial 12
-dnl Copyright (C) 2007, 2009-2022 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.
-
-AC_DEFUN([gl_FUNC_FPURGE],
-[
- AC_REQUIRE([gl_STDIO_H_DEFAULTS])
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
- AC_CHECK_HEADERS_ONCE([stdio_ext.h])
- AC_CHECK_FUNCS_ONCE([fpurge])
- AC_CHECK_FUNCS_ONCE([__fpurge])
- AC_CHECK_DECLS([fpurge], , , [[#include <stdio.h>]])
- if test "x$ac_cv_func_fpurge" = xyes; then
- HAVE_FPURGE=1
- # Detect BSD bug. Only cygwin 1.7 and musl are known to be immune.
- AC_CACHE_CHECK([whether fpurge works], [gl_cv_func_fpurge_works],
- [AC_RUN_IFELSE(
- [AC_LANG_PROGRAM(
- [[#include <stdio.h>
-]],
- [[FILE *f = fopen ("conftest.txt", "w+");
- if (!f)
- return 1;
- if (fputc ('a', f) != 'a')
- { fclose (f); return 2; }
- rewind (f);
- if (fgetc (f) != 'a')
- { fclose (f); return 3; }
- if (fgetc (f) != EOF)
- { fclose (f); return 4; }
- if (fpurge (f) != 0)
- { fclose (f); return 5; }
- if (putc ('b', f) != 'b')
- { fclose (f); return 6; }
- if (fclose (f) != 0)
- return 7;
- if ((f = fopen ("conftest.txt", "r")) == NULL)
- return 8;
- if (fgetc (f) != 'a')
- { fclose (f); return 9; }
- if (fgetc (f) != 'b')
- { fclose (f); return 10; }
- if (fgetc (f) != EOF)
- { fclose (f); return 11; }
- if (fclose (f) != 0)
- return 12;
- if (remove ("conftest.txt") != 0)
- return 13;
- return 0;
- ]])],
- [gl_cv_func_fpurge_works=yes],
- [gl_cv_func_fpurge_works=no],
- [case "$host_os" in
- # Guess yes on musl systems.
- *-musl*) gl_cv_func_fpurge_works="guessing yes" ;;
- # Otherwise obey --enable-cross-guesses.
- *) gl_cv_func_fpurge_works="$gl_cross_guess_normal" ;;
- esac
- ])
- ])
- case "$gl_cv_func_fpurge_works" in
- *yes) ;;
- *) REPLACE_FPURGE=1 ;;
- esac
- else
- HAVE_FPURGE=0
- fi
- if test "x$ac_cv_have_decl_fpurge" = xno; then
- HAVE_DECL_FPURGE=0
- fi
-])
diff --git a/gl/m4/freading.m4 b/gl/m4/freading.m4
deleted file mode 100644
index 81b17a6..0000000
--- a/gl/m4/freading.m4
+++ /dev/null
@@ -1,11 +0,0 @@
-# freading.m4 serial 2
-dnl Copyright (C) 2007, 2009-2022 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.
-
-AC_DEFUN([gl_FUNC_FREADING],
-[
- AC_CHECK_HEADERS_ONCE([stdio_ext.h])
- AC_CHECK_FUNCS_ONCE([__freading])
-])
diff --git a/gl/m4/fseek.m4 b/gl/m4/fseek.m4
deleted file mode 100644
index bd4a55b..0000000
--- a/gl/m4/fseek.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-# fseek.m4 serial 4
-dnl Copyright (C) 2007, 2009-2022 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.
-
-AC_DEFUN([gl_FUNC_FSEEK],
-[
- AC_REQUIRE([gl_STDIO_H_DEFAULTS])
- AC_REQUIRE([gl_FUNC_FSEEKO])
- dnl When fseeko needs fixes, fseek needs them too.
- if test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1; then
- REPLACE_FSEEK=1
- fi
-])
diff --git a/gl/m4/fseeko.m4 b/gl/m4/fseeko.m4
deleted file mode 100644
index e50fe39..0000000
--- a/gl/m4/fseeko.m4
+++ /dev/null
@@ -1,77 +0,0 @@
-# fseeko.m4 serial 20
-dnl Copyright (C) 2007-2022 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.
-
-AC_DEFUN([gl_FUNC_FSEEKO],
-[
- AC_REQUIRE([gl_STDIO_H_DEFAULTS])
- AC_REQUIRE([gl_STDIN_LARGE_OFFSET])
- AC_REQUIRE([gl_SYS_TYPES_H])
- AC_REQUIRE([AC_PROG_CC])
-
- dnl Persuade glibc <stdio.h> to declare fseeko().
- AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
-
- AC_CACHE_CHECK([for fseeko], [gl_cv_func_fseeko],
- [
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
-]], [[fseeko (stdin, 0, 0);]])],
- [gl_cv_func_fseeko=yes], [gl_cv_func_fseeko=no])
- ])
-
- AC_CHECK_DECLS_ONCE([fseeko])
- if test $ac_cv_have_decl_fseeko = no; then
- HAVE_DECL_FSEEKO=0
- fi
-
- if test $gl_cv_func_fseeko = no; then
- HAVE_FSEEKO=0
- else
- if test $WINDOWS_64_BIT_OFF_T = 1; then
- REPLACE_FSEEKO=1
- fi
- if test $gl_cv_var_stdin_large_offset = no; then
- REPLACE_FSEEKO=1
- fi
- m4_ifdef([gl_FUNC_FFLUSH_STDIN], [
- gl_FUNC_FFLUSH_STDIN
- case "$gl_cv_func_fflush_stdin" in
- *yes) ;;
- *) REPLACE_FSEEKO=1 ;;
- esac
- ])
- fi
-])
-
-dnl Code shared by fseeko and ftello. Determine if large files are supported,
-dnl but stdin does not start as a large file by default.
-AC_DEFUN([gl_STDIN_LARGE_OFFSET],
- [
- AC_CACHE_CHECK([whether stdin defaults to large file offsets],
- [gl_cv_var_stdin_large_offset],
- [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]],
-[[#if defined __SL64 && defined __SCLE /* cygwin */
- /* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making
- fseeko/ftello needlessly fail. This bug was fixed in 1.5.25, and
- it is easier to do a version check than building a runtime test. */
-# include <cygwin/version.h>
-# if CYGWIN_VERSION_DLL_COMBINED < CYGWIN_VERSION_DLL_MAKE_COMBINED (1005, 25)
- choke me
-# endif
-#endif]])],
- [gl_cv_var_stdin_large_offset=yes],
- [gl_cv_var_stdin_large_offset=no])])
-])
-
-# Prerequisites of lib/fseeko.c.
-AC_DEFUN([gl_PREREQ_FSEEKO],
-[
- dnl Native Windows has the function _fseeki64. mingw hides it in some
- dnl circumstances, but mingw64 makes it usable again.
- AC_CHECK_FUNCS([_fseeki64])
- if test $ac_cv_func__fseeki64 = yes; then
- AC_CHECK_DECLS([_fseeki64])
- fi
-])
diff --git a/gl/m4/ftell.m4 b/gl/m4/ftell.m4
deleted file mode 100644
index 89f2d1b..0000000
--- a/gl/m4/ftell.m4
+++ /dev/null
@@ -1,15 +0,0 @@
-# ftell.m4 serial 3
-dnl Copyright (C) 2007, 2009-2022 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.
-
-AC_DEFUN([gl_FUNC_FTELL],
-[
- AC_REQUIRE([gl_STDIO_H_DEFAULTS])
- AC_REQUIRE([gl_FUNC_FTELLO])
- dnl When ftello needs fixes, ftell needs them too.
- if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then
- REPLACE_FTELL=1
- fi
-])
diff --git a/gl/m4/ftello.m4 b/gl/m4/ftello.m4
deleted file mode 100644
index 919f39d..0000000
--- a/gl/m4/ftello.m4
+++ /dev/null
@@ -1,151 +0,0 @@
-# ftello.m4 serial 14
-dnl Copyright (C) 2007-2022 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.
-
-AC_DEFUN([gl_FUNC_FTELLO],
-[
- AC_REQUIRE([gl_STDIO_H_DEFAULTS])
- AC_REQUIRE([AC_PROG_CC])
- AC_REQUIRE([gl_STDIN_LARGE_OFFSET])
- AC_REQUIRE([gl_SYS_TYPES_H])
-
- dnl Persuade glibc <stdio.h> to declare ftello().
- AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
-
- AC_CHECK_DECLS_ONCE([ftello])
- if test $ac_cv_have_decl_ftello = no; then
- HAVE_DECL_FTELLO=0
- fi
-
- AC_CACHE_CHECK([for ftello], [gl_cv_func_ftello],
- [
- AC_LINK_IFELSE(
- [AC_LANG_PROGRAM(
- [[#include <stdio.h>]],
- [[ftello (stdin);]])],
- [gl_cv_func_ftello=yes],
- [gl_cv_func_ftello=no])
- ])
- if test $gl_cv_func_ftello = no; then
- HAVE_FTELLO=0
- else
- if test $WINDOWS_64_BIT_OFF_T = 1; then
- REPLACE_FTELLO=1
- fi
- if test $gl_cv_var_stdin_large_offset = no; then
- REPLACE_FTELLO=1
- fi
- if test $REPLACE_FTELLO = 0; then
- dnl Detect bug on Solaris.
- dnl ftell and ftello produce incorrect results after putc that followed a
- dnl getc call that reached EOF on Solaris. This is because the _IOREAD
- dnl flag does not get cleared in this case, even though _IOWRT gets set,
- dnl and ftell and ftello look whether the _IOREAD flag is set.
- AC_REQUIRE([AC_CANONICAL_HOST])
- AC_CACHE_CHECK([whether ftello works],
- [gl_cv_func_ftello_works],
- [
- dnl Initial guess, used when cross-compiling or when /dev/tty cannot
- dnl be opened.
-changequote(,)dnl
- case "$host_os" in
- # Guess no on Solaris.
- solaris*) gl_cv_func_ftello_works="guessing no" ;;
- # Guess yes on native Windows.
- mingw*) gl_cv_func_ftello_works="guessing yes" ;;
- # Guess yes otherwise.
- *) gl_cv_func_ftello_works="guessing yes" ;;
- esac
-changequote([,])dnl
- AC_RUN_IFELSE(
- [AC_LANG_SOURCE([[
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#define TESTFILE "conftest.tmp"
-int
-main (void)
-{
- FILE *fp;
-
- /* Create a file with some contents. */
- fp = fopen (TESTFILE, "w");
- if (fp == NULL)
- return 70;
- if (fwrite ("foogarsh", 1, 8, fp) < 8)
- { fclose (fp); return 71; }
- if (fclose (fp))
- return 72;
-
- /* The file's contents is now "foogarsh". */
-
- /* Try writing after reading to EOF. */
- fp = fopen (TESTFILE, "r+");
- if (fp == NULL)
- return 73;
- if (fseek (fp, -1, SEEK_END))
- { fclose (fp); return 74; }
- if (!(getc (fp) == 'h'))
- { fclose (fp); return 1; }
- if (!(getc (fp) == EOF))
- { fclose (fp); return 2; }
- if (!(ftell (fp) == 8))
- { fclose (fp); return 3; }
- if (!(ftell (fp) == 8))
- { fclose (fp); return 4; }
- if (!(putc ('!', fp) == '!'))
- { fclose (fp); return 5; }
- if (!(ftell (fp) == 9))
- { fclose (fp); return 6; }
- if (!(fclose (fp) == 0))
- return 7;
- fp = fopen (TESTFILE, "r");
- if (fp == NULL)
- return 75;
- {
- char buf[10];
- if (!(fread (buf, 1, 10, fp) == 9))
- { fclose (fp); return 10; }
- if (!(memcmp (buf, "foogarsh!", 9) == 0))
- { fclose (fp); return 11; }
- }
- if (!(fclose (fp) == 0))
- return 12;
-
- /* The file's contents is now "foogarsh!". */
-
- return 0;
-}]])],
- [gl_cv_func_ftello_works=yes],
- [gl_cv_func_ftello_works=no], [:])
- ])
- case "$gl_cv_func_ftello_works" in
- *yes) ;;
- *)
- REPLACE_FTELLO=1
- AC_DEFINE([FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE], [1],
- [Define to 1 if the system's ftello function has the Solaris bug.])
- ;;
- esac
- fi
- if test $REPLACE_FTELLO = 0; then
- dnl Detect bug on macOS >= 10.15.
- gl_FUNC_UNGETC_WORKS
- if test $gl_ftello_broken_after_ungetc = yes; then
- REPLACE_FTELLO=1
- AC_DEFINE([FTELLO_BROKEN_AFTER_UNGETC], [1],
- [Define to 1 if the system's ftello function has the macOS bug.])
- fi
- fi
- fi
-])
-
-# Prerequisites of lib/ftello.c.
-AC_DEFUN([gl_PREREQ_FTELLO],
-[
- dnl Native Windows has the function _ftelli64. mingw hides it, but mingw64
- dnl makes it usable again.
- AC_CHECK_FUNCS([_ftelli64])
-])
diff --git a/gl/m4/gl-openssl.m4 b/gl/m4/gl-openssl.m4
deleted file mode 100644
index d076f84..0000000
--- a/gl/m4/gl-openssl.m4
+++ /dev/null
@@ -1,76 +0,0 @@
-# gl-openssl.m4 serial 6
-dnl Copyright (C) 2013-2022 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.
-
-AC_DEFUN([gl_SET_CRYPTO_CHECK_DEFAULT],
-[
- m4_define([gl_CRYPTO_CHECK_DEFAULT], [$1])
-])
-gl_SET_CRYPTO_CHECK_DEFAULT([no])
-
-AC_DEFUN([gl_CRYPTO_CHECK],
-[
- dnl gnulib users set this before gl_INIT with gl_SET_CRYPTO_CHECK_DEFAULT()
- m4_divert_once([DEFAULTS], [with_openssl_default='gl_CRYPTO_CHECK_DEFAULT'])
-
- dnl Only clear once, so crypto routines can be checked for individually
- m4_divert_once([DEFAULTS], [LIB_CRYPTO=])
-
- AC_ARG_WITH([openssl],
- [[ --with-openssl[=ARG] use libcrypto hash routines for the hash functions
- MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512.
- Valid ARGs are:
- 'yes',
- 'no',
- 'auto' => use if any version available,
- 'auto-gpl-compat' => use if GPL compatible version
- available,
- 'optional' => use if available
- and warn if not available;
- Default is ']gl_CRYPTO_CHECK_DEFAULT['.]m4_ifdef([gl_AF_ALG], [
- Note also --with-linux-crypto, which will enable the
- use of Linux kernel crypto routines (if available),
- which has precedence for files.])],
- [],
- [with_openssl=$with_openssl_default])
-
- AC_SUBST([LIB_CRYPTO])
- if test "x$with_openssl" != xno; then
- if test "x$with_openssl" = xauto-gpl-compat; then
- AC_CACHE_CHECK([whether openssl is GPL compatible],
- [gl_cv_openssl_gpl_compat],
- [AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM([[
- #include <openssl/opensslv.h>
- #if OPENSSL_VERSION_MAJOR < 3
- #error "openssl >= version 3 not found"
- #endif
- ]])],
- [gl_cv_openssl_gpl_compat=yes],
- [gl_cv_openssl_gpl_compat=no])])
- fi
- if test "x$with_openssl" != xauto-gpl-compat ||
- test "x$gl_cv_openssl_gpl_compat" = xyes; then
- AC_CHECK_LIB([crypto], [$1],
- [AC_CHECK_HEADERS(
- m4_if([$1], [MD5], [openssl/md5.h], [openssl/sha.h]),
- [LIB_CRYPTO=-lcrypto
- AC_DEFINE([HAVE_OPENSSL_$1], [1],
- [Define to 1 if libcrypto is used for $1.])])])
- fi
- if test "x$LIB_CRYPTO" = x; then
- message='openssl development library not found for $1.
- If you want to install it, first find the pre-built package name:
- - On Debian and Debian-based systems: libssl-dev,
- - On Red Hat distributions: openssl-devel.
- - Other: https://repology.org/project/openssl/versions'
- if test "x$with_openssl" = xyes; then
- AC_MSG_ERROR([$message])
- elif test "x$with_openssl" = xoptional; then
- AC_MSG_WARN([$message])
- fi
- fi
- fi
-])
diff --git a/gl/m4/gnulib-cache.m4 b/gl/m4/gnulib-cache.m4
index 06fed91..7551d09 100644
--- a/gl/m4/gnulib-cache.m4
+++ b/gl/m4/gnulib-cache.m4
@@ -39,7 +39,6 @@
# --macro-prefix=gl \
# --no-vc-files \
# base64 \
-# crypto/sha256 \
# dirname \
# environ \
# floorf \
@@ -65,7 +64,6 @@
gl_LOCAL_DIR([])
gl_MODULES([
base64
- crypto/sha256
dirname
environ
floorf
diff --git a/gl/m4/gnulib-comp.m4 b/gl/m4/gnulib-comp.m4
index 93b7884..563b9ae 100644
--- a/gl/m4/gnulib-comp.m4
+++ b/gl/m4/gnulib-comp.m4
@@ -50,15 +50,11 @@ AC_DEFUN([gl_EARLY],
# Code from module basename-lgpl:
# Code from module btowc:
# Code from module builtin-expect:
- # Code from module byteswap:
# Code from module c99:
# Code from module calloc-gnu:
# Code from module calloc-posix:
# Code from module cloexec:
# Code from module close:
- # Code from module crypto/af_alg:
- # Code from module crypto/sha256:
- # Code from module crypto/sha256-buffer:
# Code from module dirname:
# Code from module dirname-lgpl:
# Code from module double-slash-root:
@@ -73,24 +69,14 @@ AC_DEFUN([gl_EARLY],
# Code from module fcntl:
# Code from module fcntl-h:
# Code from module fd-hook:
- # Code from module fflush:
- AC_REQUIRE([gl_SET_LARGEFILE_SOURCE])
# Code from module filename:
# Code from module float:
# Code from module floorf:
# Code from module fopen:
# Code from module fopen-gnu:
- # Code from module fpurge:
- # Code from module freading:
# Code from module free-posix:
- # Code from module fseek:
- # Code from module fseeko:
- AC_REQUIRE([gl_SET_LARGEFILE_SOURCE])
# Code from module fstat:
# Code from module fsusage:
- # Code from module ftell:
- # Code from module ftello:
- AC_REQUIRE([gl_SET_LARGEFILE_SOURCE])
# Code from module gen-header:
# Code from module getaddrinfo:
# Code from module getdelim:
@@ -123,7 +109,6 @@ AC_DEFUN([gl_EARLY],
# Code from module locale:
# Code from module localeconv:
# Code from module lock:
- # Code from module lseek:
# Code from module malloc-gnu:
# Code from module malloc-posix:
# Code from module malloca:
@@ -246,9 +231,6 @@ AC_DEFUN([gl_INIT],
])
gl_WCHAR_MODULE_INDICATOR([btowc])
gl___BUILTIN_EXPECT
- gl_BYTESWAP
- gl_CONDITIONAL_HEADER([byteswap.h])
- AC_PROG_MKDIR_P
gl_FUNC_CALLOC_GNU
if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 1; then
AC_LIBOBJ([calloc])
@@ -263,9 +245,6 @@ AC_DEFUN([gl_INIT],
gl_FUNC_CLOSE
gl_CONDITIONAL([GL_COND_OBJ_CLOSE], [test $REPLACE_CLOSE = 1])
gl_UNISTD_MODULE_INDICATOR([close])
- gl_AF_ALG
- AC_REQUIRE([AC_C_RESTRICT])
- gl_SHA256
gl_MODULE_INDICATOR([dirname])
gl_DOUBLE_SLASH_ROOT
gl_FUNC_DUP2
@@ -296,13 +275,6 @@ AC_DEFUN([gl_INIT],
gl_FCNTL_H
gl_FCNTL_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
- gl_FUNC_FFLUSH
- gl_CONDITIONAL([GL_COND_OBJ_FFLUSH], [test $REPLACE_FFLUSH = 1])
- AM_COND_IF([GL_COND_OBJ_FFLUSH], [
- gl_PREREQ_FFLUSH
- ])
- gl_MODULE_INDICATOR([fflush])
- gl_STDIO_MODULE_INDICATOR([fflush])
gl_FLOAT_H
gl_CONDITIONAL_HEADER([float.h])
AC_PROG_MKDIR_P
@@ -325,27 +297,12 @@ AC_DEFUN([gl_INIT],
fi
gl_MODULE_INDICATOR([fopen-gnu])
gl_STDIO_MODULE_INDICATOR([fopen-gnu])
- gl_FUNC_FPURGE
- gl_CONDITIONAL([GL_COND_OBJ_FPURGE],
- [test $HAVE_FPURGE = 0 || test $REPLACE_FPURGE = 1])
- gl_STDIO_MODULE_INDICATOR([fpurge])
- gl_FUNC_FREADING
gl_FUNC_FREE
gl_CONDITIONAL([GL_COND_OBJ_FREE], [test $REPLACE_FREE = 1])
AM_COND_IF([GL_COND_OBJ_FREE], [
gl_PREREQ_FREE
])
gl_STDLIB_MODULE_INDICATOR([free-posix])
- gl_FUNC_FSEEK
- gl_CONDITIONAL([GL_COND_OBJ_FSEEK], [test $REPLACE_FSEEK = 1])
- gl_STDIO_MODULE_INDICATOR([fseek])
- gl_FUNC_FSEEKO
- gl_CONDITIONAL([GL_COND_OBJ_FSEEKO],
- [test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1])
- AM_COND_IF([GL_COND_OBJ_FSEEKO], [
- gl_PREREQ_FSEEKO
- ])
- gl_STDIO_MODULE_INDICATOR([fseeko])
gl_FUNC_FSTAT
gl_CONDITIONAL([GL_COND_OBJ_FSTAT], [test $REPLACE_FSTAT = 1])
AM_COND_IF([GL_COND_OBJ_FSTAT], [
@@ -362,16 +319,6 @@ AC_DEFUN([gl_INIT],
AM_COND_IF([GL_COND_OBJ_FSUSAGE], [
gl_PREREQ_FSUSAGE_EXTRA
])
- gl_FUNC_FTELL
- gl_CONDITIONAL([GL_COND_OBJ_FTELL], [test $REPLACE_FTELL = 1])
- gl_STDIO_MODULE_INDICATOR([ftell])
- gl_FUNC_FTELLO
- gl_CONDITIONAL([GL_COND_OBJ_FTELLO],
- [test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1])
- AM_COND_IF([GL_COND_OBJ_FTELLO], [
- gl_PREREQ_FTELLO
- ])
- gl_STDIO_MODULE_INDICATOR([ftello])
gl_GETADDRINFO
gl_CONDITIONAL([GL_COND_OBJ_GETADDRINFO],
[test $HAVE_GETADDRINFO = 0 || test $REPLACE_GETADDRINFO = 1])
@@ -470,9 +417,6 @@ AC_DEFUN([gl_INIT],
gl_LOCALE_MODULE_INDICATOR([localeconv])
gl_LOCK
gl_MODULE_INDICATOR([lock])
- gl_FUNC_LSEEK
- gl_CONDITIONAL([GL_COND_OBJ_LSEEK], [test $REPLACE_LSEEK = 1])
- gl_UNISTD_MODULE_INDICATOR([lseek])
gl_FUNC_MALLOC_GNU
if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 1; then
AC_LIBOBJ([malloc])
@@ -978,8 +922,6 @@ AC_DEFUN([gltests_LIBSOURCES], [
AC_DEFUN([gl_FILE_LIST], [
build-aux/config.rpath
lib/_Noreturn.h
- lib/af_alg.c
- lib/af_alg.h
lib/alloca.in.h
lib/arg-nonnull.h
lib/arpa_inet.in.h
@@ -992,7 +934,6 @@ AC_DEFUN([gl_FILE_LIST], [
lib/basename-lgpl.h
lib/basename.c
lib/btowc.c
- lib/byteswap.in.h
lib/c++defs.h
lib/calloc.c
lib/cdefs.h
@@ -1013,7 +954,6 @@ AC_DEFUN([gl_FILE_LIST], [
lib/fcntl.in.h
lib/fd-hook.c
lib/fd-hook.h
- lib/fflush.c
lib/filename.h
lib/float+.h
lib/float.c
@@ -1021,17 +961,10 @@ AC_DEFUN([gl_FILE_LIST], [
lib/floor.c
lib/floorf.c
lib/fopen.c
- lib/fpurge.c
- lib/freading.c
- lib/freading.h
lib/free.c
- lib/fseek.c
- lib/fseeko.c
lib/fstat.c
lib/fsusage.c
lib/fsusage.h
- lib/ftell.c
- lib/ftello.c
lib/gai_strerror.c
lib/getaddrinfo.c
lib/getdelim.c
@@ -1051,7 +984,6 @@ AC_DEFUN([gl_FILE_LIST], [
lib/getprogname.c
lib/getprogname.h
lib/gettext.h
- lib/gl_openssl.h
lib/glthread/lock.c
lib/glthread/lock.h
lib/glthread/threadlib.c
@@ -1076,7 +1008,6 @@ AC_DEFUN([gl_FILE_LIST], [
lib/localcharset.h
lib/locale.in.h
lib/localeconv.c
- lib/lseek.c
lib/malloc.c
lib/malloc/dynarray-skeleton.c
lib/malloc/dynarray.h
@@ -1130,9 +1061,6 @@ AC_DEFUN([gl_FILE_LIST], [
lib/setlocale-lock.c
lib/setlocale_null.c
lib/setlocale_null.h
- lib/sha256-stream.c
- lib/sha256.c
- lib/sha256.h
lib/size_max.h
lib/snprintf.c
lib/sockets.c
@@ -1147,7 +1075,6 @@ AC_DEFUN([gl_FILE_LIST], [
lib/stdckdint.in.h
lib/stddef.in.h
lib/stdint.in.h
- lib/stdio-impl.h
lib/stdio-read.c
lib/stdio-write.c
lib/stdio.in.h
@@ -1165,7 +1092,6 @@ AC_DEFUN([gl_FILE_LIST], [
lib/strncasecmp.c
lib/strsep.c
lib/strstr.c
- lib/sys-limits.h
lib/sys_socket.c
lib/sys_socket.in.h
lib/sys_stat.in.h
@@ -1207,13 +1133,11 @@ AC_DEFUN([gl_FILE_LIST], [
m4/00gnulib.m4
m4/__inline.m4
m4/absolute-header.m4
- m4/af_alg.m4
m4/alloca.m4
m4/arpa_inet_h.m4
m4/base64.m4
m4/btowc.m4
m4/builtin-expect.m4
- m4/byteswap.m4
m4/calloc.m4
m4/close.m4
m4/codeset.m4
@@ -1229,20 +1153,13 @@ AC_DEFUN([gl_FILE_LIST], [
m4/fcntl-o.m4
m4/fcntl.m4
m4/fcntl_h.m4
- m4/fflush.m4
m4/float_h.m4
m4/floorf.m4
m4/fopen.m4
- m4/fpurge.m4
- m4/freading.m4
m4/free.m4
- m4/fseek.m4
- m4/fseeko.m4
m4/fstat.m4
m4/fstypename.m4
m4/fsusage.m4
- m4/ftell.m4
- m4/ftello.m4
m4/getaddrinfo.m4
m4/getdelim.m4
m4/getdtablesize.m4
@@ -1252,7 +1169,6 @@ AC_DEFUN([gl_FILE_LIST], [
m4/getopt.m4
m4/getprogname.m4
m4/gettext.m4
- m4/gl-openssl.m4
m4/gnulib-common.m4
m4/host-cpu-c-abi.m4
m4/hostent.m4
@@ -1278,7 +1194,6 @@ AC_DEFUN([gl_FILE_LIST], [
m4/locale_h.m4
m4/localeconv.m4
m4/lock.m4
- m4/lseek.m4
m4/malloc.m4
m4/malloca.m4
m4/math_h.m4
@@ -1316,7 +1231,6 @@ AC_DEFUN([gl_FILE_LIST], [
m4/servent.m4
m4/setenv.m4
m4/setlocale_null.m4
- m4/sha256.m4
m4/size_max.m4
m4/snprintf.m4
m4/socketlib.m4
@@ -1349,7 +1263,6 @@ AC_DEFUN([gl_FILE_LIST], [
m4/time_h.m4
m4/time_r.m4
m4/timegm.m4
- m4/ungetc.m4
m4/unistd_h.m4
m4/unlocked-io.m4
m4/vararrays.m4
diff --git a/gl/m4/lseek.m4 b/gl/m4/lseek.m4
deleted file mode 100644
index 0583511..0000000
--- a/gl/m4/lseek.m4
+++ /dev/null
@@ -1,78 +0,0 @@
-# lseek.m4 serial 12
-dnl Copyright (C) 2007, 2009-2022 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.
-
-AC_DEFUN([gl_FUNC_LSEEK],
-[
- AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
-
- AC_REQUIRE([AC_CANONICAL_HOST])
- AC_REQUIRE([AC_PROG_CC])
- AC_CHECK_HEADERS_ONCE([unistd.h])
- AC_CACHE_CHECK([whether lseek detects pipes], [gl_cv_func_lseek_pipe],
- [case "$host_os" in
- mingw*)
- dnl Native Windows.
- dnl The result of lseek (fd, (off_t)0, SEEK_CUR) or
- dnl SetFilePointer(handle, 0, NULL, FILE_CURRENT)
- dnl for a pipe depends on the environment: In a Cygwin 1.5
- dnl environment it succeeds (wrong); in a Cygwin 1.7 environment
- dnl it fails with a wrong errno value.
- gl_cv_func_lseek_pipe=no
- ;;
- *)
- if test $cross_compiling = no; then
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[
-#include <sys/types.h> /* for off_t */
-#include <stdio.h> /* for SEEK_CUR */
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#else /* on Windows with MSVC */
-# include <io.h>
-#endif
-]GL_MDA_DEFINES],
-[[
- /* Exit with success only if stdin is seekable. */
- return lseek (0, (off_t)0, SEEK_CUR) < 0;
-]])],
- [if test -s conftest$ac_exeext \
- && ./conftest$ac_exeext < conftest.$ac_ext \
- && test 1 = "`echo hi \
- | { ./conftest$ac_exeext; echo $?; cat >/dev/null; }`"; then
- gl_cv_func_lseek_pipe=yes
- else
- gl_cv_func_lseek_pipe=no
- fi
- ],
- [gl_cv_func_lseek_pipe=no])
- else
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE([[
-#if defined __BEOS__
-/* BeOS mistakenly return 0 when trying to seek on pipes. */
- Choke me.
-#endif]])],
- [gl_cv_func_lseek_pipe=yes], [gl_cv_func_lseek_pipe=no])
- fi
- ;;
- esac
- ])
- if test "$gl_cv_func_lseek_pipe" = no; then
- REPLACE_LSEEK=1
- AC_DEFINE([LSEEK_PIPE_BROKEN], [1],
- [Define to 1 if lseek does not detect pipes.])
- fi
-
- AC_REQUIRE([gl_SYS_TYPES_H])
- if test $WINDOWS_64_BIT_OFF_T = 1; then
- REPLACE_LSEEK=1
- fi
-
- dnl macOS SEEK_DATA is incompatible with other platforms.
- case $host_os in
- darwin*)
- REPLACE_LSEEK=1;;
- esac
-])
diff --git a/gl/m4/sha256.m4 b/gl/m4/sha256.m4
deleted file mode 100644
index b3d8f92..0000000
--- a/gl/m4/sha256.m4
+++ /dev/null
@@ -1,14 +0,0 @@
-# sha256.m4 serial 8
-dnl Copyright (C) 2005, 2008-2022 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.
-
-AC_DEFUN([gl_SHA256],
-[
- dnl Prerequisites of lib/sha256.c.
- AC_REQUIRE([gl_BIGENDIAN])
-
- dnl Determine HAVE_OPENSSL_SHA256 and LIB_CRYPTO
- gl_CRYPTO_CHECK([SHA256])
-])
diff --git a/gl/m4/ungetc.m4 b/gl/m4/ungetc.m4
deleted file mode 100644
index 12a1099..0000000
--- a/gl/m4/ungetc.m4
+++ /dev/null
@@ -1,73 +0,0 @@
-# ungetc.m4 serial 10
-dnl Copyright (C) 2009-2022 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.
-
-AC_DEFUN_ONCE([gl_FUNC_UNGETC_WORKS],
-[
- AC_REQUIRE([AC_PROG_CC])
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
-
- AC_CACHE_CHECK([whether ungetc works on arbitrary bytes],
- [gl_cv_func_ungetc_works],
- [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-#include <stdio.h>
- ]], [[FILE *f;
- if (!(f = fopen ("conftest.tmp", "w+")))
- return 1;
- if (fputs ("abc", f) < 0)
- { fclose (f); return 2; }
- rewind (f);
- if (fgetc (f) != 'a')
- { fclose (f); return 3; }
- if (fgetc (f) != 'b')
- { fclose (f); return 4; }
- if (ungetc ('d', f) != 'd')
- { fclose (f); return 5; }
- if (ftell (f) != 1)
- { fclose (f); return 6; }
- if (fgetc (f) != 'd')
- { fclose (f); return 7; }
- if (ftell (f) != 2)
- { fclose (f); return 8; }
- if (fseek (f, 0, SEEK_CUR) != 0)
- { fclose (f); return 9; }
- if (ftell (f) != 2)
- { fclose (f); return 10; }
- if (fgetc (f) != 'c')
- { fclose (f); return 11; }
- fclose (f);
- remove ("conftest.tmp");
- ]])],
- [gl_cv_func_ungetc_works=yes], [gl_cv_func_ungetc_works=no],
- [case "$host_os" in
- # Guess yes on glibc systems.
- *-gnu* | gnu*) gl_cv_func_ungetc_works="guessing yes" ;;
- # Guess yes on musl systems.
- *-musl*) gl_cv_func_ungetc_works="guessing yes" ;;
- # Guess yes on bionic systems.
- *-android*) gl_cv_func_ungetc_works="guessing yes" ;;
- # Guess yes on native Windows.
- mingw*) gl_cv_func_ungetc_works="guessing yes" ;;
- # If we don't know, obey --enable-cross-guesses.
- *) gl_cv_func_ungetc_works="$gl_cross_guess_normal" ;;
- esac
- ])
- ])
- gl_ftello_broken_after_ungetc=no
- case "$gl_cv_func_ungetc_works" in
- *yes) ;;
- *)
- dnl On macOS >= 10.15, where the above program fails with exit code 6,
- dnl we fix it through an ftello override.
- case "$host_os" in
- darwin*) gl_ftello_broken_after_ungetc=yes ;;
- *)
- AC_DEFINE([FUNC_UNGETC_BROKEN], [1],
- [Define to 1 if ungetc is broken when used on arbitrary bytes.])
- ;;
- esac
- ;;
- esac
-])
diff --git a/gl/malloc/.deps/.dirstamp b/gl/malloc/.deps/.dirstamp
new file mode 100644
index 0000000..e69de29
diff --git a/gl/malloc/.deps/libgnu_a-dynarray-skeleton.Po b/gl/malloc/.deps/libgnu_a-dynarray-skeleton.Po
new file mode 100644
index 0000000..9ce06a8
--- /dev/null
+++ b/gl/malloc/.deps/libgnu_a-dynarray-skeleton.Po
@@ -0,0 +1 @@
+# dummy
diff --git a/gl/malloc/.deps/libgnu_a-dynarray_at_failure.Po b/gl/malloc/.deps/libgnu_a-dynarray_at_failure.Po
new file mode 100644
index 0000000..82befdb
--- /dev/null
+++ b/gl/malloc/.deps/libgnu_a-dynarray_at_failure.Po
@@ -0,0 +1,138 @@
+malloc/libgnu_a-dynarray_at_failure.o: malloc/dynarray_at_failure.c \
+ /usr/include/stdc-predef.h libc-config.h ../config.h \
+ /usr/include/errno.h /usr/include/features.h \
+ /usr/include/features-time64.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/bits/timesize.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/long-double.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/x86_64-linux-gnu/bits/types/error_t.h cdefs.h stdlib.h \
+ /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
+ /usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h \
+ /usr/include/x86_64-linux-gnu/bits/floatn.h \
+ /usr/include/x86_64-linux-gnu/bits/floatn-common.h \
+ /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h sys/types.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h \
+ /usr/include/x86_64-linux-gnu/bits/time64.h \
+ /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/time_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
+ /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endianness.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
+ /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
+ /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
+ /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
+ /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h dynarray.h \
+ malloc/dynarray.h stdbool.h string.h /usr/include/string.h strings.h \
+ /usr/include/strings.h stdio.h /usr/include/stdio.h \
+ /usr/lib/gcc/x86_64-linux-gnu/12/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
+ /usr/include/x86_64-linux-gnu/bits/types/FILE.h \
+ /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
+ /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h
+/usr/include/stdc-predef.h:
+libc-config.h:
+../config.h:
+/usr/include/errno.h:
+/usr/include/features.h:
+/usr/include/features-time64.h:
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+/usr/include/x86_64-linux-gnu/bits/timesize.h:
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+/usr/include/x86_64-linux-gnu/bits/long-double.h:
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+/usr/include/linux/errno.h:
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+/usr/include/asm-generic/errno.h:
+/usr/include/asm-generic/errno-base.h:
+/usr/include/x86_64-linux-gnu/bits/types/error_t.h:
+cdefs.h:
+stdlib.h:
+/usr/include/stdlib.h:
+/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:
+/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h:
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+/usr/include/x86_64-linux-gnu/bits/floatn.h:
+/usr/include/x86_64-linux-gnu/bits/floatn-common.h:
+/usr/include/x86_64-linux-gnu/bits/types/locale_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h:
+sys/types.h:
+/usr/include/x86_64-linux-gnu/sys/types.h:
+/usr/include/x86_64-linux-gnu/bits/types.h:
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+/usr/include/x86_64-linux-gnu/bits/time64.h:
+/usr/include/x86_64-linux-gnu/bits/types/clock_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/time_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/timer_t.h:
+/usr/include/x86_64-linux-gnu/bits/stdint-intn.h:
+/usr/include/endian.h:
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+/usr/include/x86_64-linux-gnu/bits/endianness.h:
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+/usr/include/x86_64-linux-gnu/bits/uintn-identity.h:
+/usr/include/x86_64-linux-gnu/sys/select.h:
+/usr/include/x86_64-linux-gnu/bits/select.h:
+/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h:
+/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h:
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h:
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h:
+/usr/include/x86_64-linux-gnu/bits/struct_mutex.h:
+/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h:
+alloca.h:
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+dynarray.h:
+malloc/dynarray.h:
+stdbool.h:
+string.h:
+/usr/include/string.h:
+strings.h:
+/usr/include/strings.h:
+stdio.h:
+/usr/include/stdio.h:
+/usr/lib/gcc/x86_64-linux-gnu/12/include/stdarg.h:
+/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/__FILE.h:
+/usr/include/x86_64-linux-gnu/bits/types/FILE.h:
+/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h:
+/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h:
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
diff --git a/gl/malloc/.deps/libgnu_a-dynarray_emplace_enlarge.Po b/gl/malloc/.deps/libgnu_a-dynarray_emplace_enlarge.Po
new file mode 100644
index 0000000..d75417a
--- /dev/null
+++ b/gl/malloc/.deps/libgnu_a-dynarray_emplace_enlarge.Po
@@ -0,0 +1,138 @@
+malloc/libgnu_a-dynarray_emplace_enlarge.o: \
+ malloc/dynarray_emplace_enlarge.c /usr/include/stdc-predef.h \
+ libc-config.h ../config.h /usr/include/errno.h /usr/include/features.h \
+ /usr/include/features-time64.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/bits/timesize.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/long-double.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/x86_64-linux-gnu/bits/types/error_t.h cdefs.h dynarray.h \
+ malloc/dynarray.h stdbool.h \
+ /usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h string.h \
+ /usr/include/string.h \
+ /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
+ /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h strings.h \
+ /usr/include/strings.h intprops.h intprops-internal.h limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/12/include/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/12/include/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/uio_lim.h stdlib.h \
+ /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h \
+ /usr/include/x86_64-linux-gnu/bits/floatn.h \
+ /usr/include/x86_64-linux-gnu/bits/floatn-common.h sys/types.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h \
+ /usr/include/x86_64-linux-gnu/bits/time64.h \
+ /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/time_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
+ /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endianness.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
+ /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
+ /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
+ /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
+ /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h
+/usr/include/stdc-predef.h:
+libc-config.h:
+../config.h:
+/usr/include/errno.h:
+/usr/include/features.h:
+/usr/include/features-time64.h:
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+/usr/include/x86_64-linux-gnu/bits/timesize.h:
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+/usr/include/x86_64-linux-gnu/bits/long-double.h:
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+/usr/include/linux/errno.h:
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+/usr/include/asm-generic/errno.h:
+/usr/include/asm-generic/errno-base.h:
+/usr/include/x86_64-linux-gnu/bits/types/error_t.h:
+cdefs.h:
+dynarray.h:
+malloc/dynarray.h:
+stdbool.h:
+/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h:
+string.h:
+/usr/include/string.h:
+/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:
+/usr/include/x86_64-linux-gnu/bits/types/locale_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h:
+strings.h:
+/usr/include/strings.h:
+intprops.h:
+intprops-internal.h:
+limits.h:
+/usr/lib/gcc/x86_64-linux-gnu/12/include/limits.h:
+/usr/lib/gcc/x86_64-linux-gnu/12/include/syslimits.h:
+/usr/include/limits.h:
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+/usr/include/linux/limits.h:
+/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h:
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
+/usr/include/x86_64-linux-gnu/bits/uio_lim.h:
+stdlib.h:
+/usr/include/stdlib.h:
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+/usr/include/x86_64-linux-gnu/bits/floatn.h:
+/usr/include/x86_64-linux-gnu/bits/floatn-common.h:
+sys/types.h:
+/usr/include/x86_64-linux-gnu/sys/types.h:
+/usr/include/x86_64-linux-gnu/bits/types.h:
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+/usr/include/x86_64-linux-gnu/bits/time64.h:
+/usr/include/x86_64-linux-gnu/bits/types/clock_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/time_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/timer_t.h:
+/usr/include/x86_64-linux-gnu/bits/stdint-intn.h:
+/usr/include/endian.h:
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+/usr/include/x86_64-linux-gnu/bits/endianness.h:
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+/usr/include/x86_64-linux-gnu/bits/uintn-identity.h:
+/usr/include/x86_64-linux-gnu/sys/select.h:
+/usr/include/x86_64-linux-gnu/bits/select.h:
+/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h:
+/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h:
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h:
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h:
+/usr/include/x86_64-linux-gnu/bits/struct_mutex.h:
+/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h:
+alloca.h:
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
diff --git a/gl/malloc/.deps/libgnu_a-dynarray_finalize.Po b/gl/malloc/.deps/libgnu_a-dynarray_finalize.Po
new file mode 100644
index 0000000..5acee05
--- /dev/null
+++ b/gl/malloc/.deps/libgnu_a-dynarray_finalize.Po
@@ -0,0 +1,116 @@
+malloc/libgnu_a-dynarray_finalize.o: malloc/dynarray_finalize.c \
+ /usr/include/stdc-predef.h libc-config.h ../config.h \
+ /usr/include/errno.h /usr/include/features.h \
+ /usr/include/features-time64.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/bits/timesize.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/long-double.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/x86_64-linux-gnu/bits/types/error_t.h cdefs.h dynarray.h \
+ malloc/dynarray.h stdbool.h \
+ /usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h string.h \
+ /usr/include/string.h \
+ /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
+ /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h strings.h \
+ /usr/include/strings.h stdlib.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h \
+ /usr/include/x86_64-linux-gnu/bits/floatn.h \
+ /usr/include/x86_64-linux-gnu/bits/floatn-common.h sys/types.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h \
+ /usr/include/x86_64-linux-gnu/bits/time64.h \
+ /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/time_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
+ /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endianness.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
+ /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
+ /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
+ /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
+ /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h
+/usr/include/stdc-predef.h:
+libc-config.h:
+../config.h:
+/usr/include/errno.h:
+/usr/include/features.h:
+/usr/include/features-time64.h:
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+/usr/include/x86_64-linux-gnu/bits/timesize.h:
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+/usr/include/x86_64-linux-gnu/bits/long-double.h:
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+/usr/include/linux/errno.h:
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+/usr/include/asm-generic/errno.h:
+/usr/include/asm-generic/errno-base.h:
+/usr/include/x86_64-linux-gnu/bits/types/error_t.h:
+cdefs.h:
+dynarray.h:
+malloc/dynarray.h:
+stdbool.h:
+/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h:
+string.h:
+/usr/include/string.h:
+/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:
+/usr/include/x86_64-linux-gnu/bits/types/locale_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h:
+strings.h:
+/usr/include/strings.h:
+stdlib.h:
+/usr/include/stdlib.h:
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+/usr/include/x86_64-linux-gnu/bits/floatn.h:
+/usr/include/x86_64-linux-gnu/bits/floatn-common.h:
+sys/types.h:
+/usr/include/x86_64-linux-gnu/sys/types.h:
+/usr/include/x86_64-linux-gnu/bits/types.h:
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+/usr/include/x86_64-linux-gnu/bits/time64.h:
+/usr/include/x86_64-linux-gnu/bits/types/clock_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/time_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/timer_t.h:
+/usr/include/x86_64-linux-gnu/bits/stdint-intn.h:
+/usr/include/endian.h:
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+/usr/include/x86_64-linux-gnu/bits/endianness.h:
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+/usr/include/x86_64-linux-gnu/bits/uintn-identity.h:
+/usr/include/x86_64-linux-gnu/sys/select.h:
+/usr/include/x86_64-linux-gnu/bits/select.h:
+/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h:
+/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h:
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h:
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h:
+/usr/include/x86_64-linux-gnu/bits/struct_mutex.h:
+/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h:
+alloca.h:
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
diff --git a/gl/malloc/.deps/libgnu_a-dynarray_resize.Po b/gl/malloc/.deps/libgnu_a-dynarray_resize.Po
new file mode 100644
index 0000000..2ab00d0
--- /dev/null
+++ b/gl/malloc/.deps/libgnu_a-dynarray_resize.Po
@@ -0,0 +1,138 @@
+malloc/libgnu_a-dynarray_resize.o: malloc/dynarray_resize.c \
+ /usr/include/stdc-predef.h libc-config.h ../config.h \
+ /usr/include/errno.h /usr/include/features.h \
+ /usr/include/features-time64.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/bits/timesize.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/long-double.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/x86_64-linux-gnu/bits/types/error_t.h cdefs.h dynarray.h \
+ malloc/dynarray.h stdbool.h \
+ /usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h string.h \
+ /usr/include/string.h \
+ /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
+ /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h strings.h \
+ /usr/include/strings.h intprops.h intprops-internal.h limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/12/include/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/12/include/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/uio_lim.h stdlib.h \
+ /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h \
+ /usr/include/x86_64-linux-gnu/bits/floatn.h \
+ /usr/include/x86_64-linux-gnu/bits/floatn-common.h sys/types.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h \
+ /usr/include/x86_64-linux-gnu/bits/time64.h \
+ /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/time_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \
+ /usr/include/x86_64-linux-gnu/bits/stdint-intn.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endianness.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \
+ /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
+ /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \
+ /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \
+ /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h
+/usr/include/stdc-predef.h:
+libc-config.h:
+../config.h:
+/usr/include/errno.h:
+/usr/include/features.h:
+/usr/include/features-time64.h:
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+/usr/include/x86_64-linux-gnu/bits/timesize.h:
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+/usr/include/x86_64-linux-gnu/bits/long-double.h:
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+/usr/include/linux/errno.h:
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+/usr/include/asm-generic/errno.h:
+/usr/include/asm-generic/errno-base.h:
+/usr/include/x86_64-linux-gnu/bits/types/error_t.h:
+cdefs.h:
+dynarray.h:
+malloc/dynarray.h:
+stdbool.h:
+/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h:
+string.h:
+/usr/include/string.h:
+/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:
+/usr/include/x86_64-linux-gnu/bits/types/locale_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h:
+strings.h:
+/usr/include/strings.h:
+intprops.h:
+intprops-internal.h:
+limits.h:
+/usr/lib/gcc/x86_64-linux-gnu/12/include/limits.h:
+/usr/lib/gcc/x86_64-linux-gnu/12/include/syslimits.h:
+/usr/include/limits.h:
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+/usr/include/linux/limits.h:
+/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h:
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
+/usr/include/x86_64-linux-gnu/bits/uio_lim.h:
+stdlib.h:
+/usr/include/stdlib.h:
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+/usr/include/x86_64-linux-gnu/bits/floatn.h:
+/usr/include/x86_64-linux-gnu/bits/floatn-common.h:
+sys/types.h:
+/usr/include/x86_64-linux-gnu/sys/types.h:
+/usr/include/x86_64-linux-gnu/bits/types.h:
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+/usr/include/x86_64-linux-gnu/bits/time64.h:
+/usr/include/x86_64-linux-gnu/bits/types/clock_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/time_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/timer_t.h:
+/usr/include/x86_64-linux-gnu/bits/stdint-intn.h:
+/usr/include/endian.h:
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+/usr/include/x86_64-linux-gnu/bits/endianness.h:
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+/usr/include/x86_64-linux-gnu/bits/uintn-identity.h:
+/usr/include/x86_64-linux-gnu/sys/select.h:
+/usr/include/x86_64-linux-gnu/bits/select.h:
+/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h:
+/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h:
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h:
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h:
+/usr/include/x86_64-linux-gnu/bits/struct_mutex.h:
+/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h:
+alloca.h:
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
diff --git a/gl/malloc/.deps/libgnu_a-dynarray_resize_clear.Po b/gl/malloc/.deps/libgnu_a-dynarray_resize_clear.Po
new file mode 100644
index 0000000..5af37ac
--- /dev/null
+++ b/gl/malloc/.deps/libgnu_a-dynarray_resize_clear.Po
@@ -0,0 +1,51 @@
+malloc/libgnu_a-dynarray_resize_clear.o: malloc/dynarray_resize_clear.c \
+ /usr/include/stdc-predef.h libc-config.h ../config.h \
+ /usr/include/errno.h /usr/include/features.h \
+ /usr/include/features-time64.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/bits/timesize.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/long-double.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/x86_64-linux-gnu/bits/types/error_t.h cdefs.h dynarray.h \
+ malloc/dynarray.h stdbool.h \
+ /usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h string.h \
+ /usr/include/string.h \
+ /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
+ /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \
+ /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h strings.h \
+ /usr/include/strings.h
+/usr/include/stdc-predef.h:
+libc-config.h:
+../config.h:
+/usr/include/errno.h:
+/usr/include/features.h:
+/usr/include/features-time64.h:
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+/usr/include/x86_64-linux-gnu/bits/timesize.h:
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+/usr/include/x86_64-linux-gnu/bits/long-double.h:
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+/usr/include/linux/errno.h:
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+/usr/include/asm-generic/errno.h:
+/usr/include/asm-generic/errno-base.h:
+/usr/include/x86_64-linux-gnu/bits/types/error_t.h:
+cdefs.h:
+dynarray.h:
+malloc/dynarray.h:
+stdbool.h:
+/usr/lib/gcc/x86_64-linux-gnu/12/include/stddef.h:
+string.h:
+/usr/include/string.h:
+/usr/include/x86_64-linux-gnu/bits/libc-header-start.h:
+/usr/include/x86_64-linux-gnu/bits/types/locale_t.h:
+/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h:
+strings.h:
+/usr/include/strings.h:
diff --git a/gl/malloc/.dirstamp b/gl/malloc/.dirstamp
new file mode 100644
index 0000000..e69de29
diff --git a/gl/malloc/dynarray-skeleton.gl.h b/gl/malloc/dynarray-skeleton.gl.h
new file mode 100644
index 0000000..6eb7690
--- /dev/null
+++ b/gl/malloc/dynarray-skeleton.gl.h
@@ -0,0 +1,529 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Type-safe arrays which grow dynamically.
+ Copyright (C) 2017-2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library 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.
+
+ The GNU C Library 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 the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+/* Pre-processor macros which act as parameters:
+
+ DYNARRAY_STRUCT
+ The struct tag of dynamic array to be defined.
+ DYNARRAY_ELEMENT
+ The type name of the element type. Elements are copied
+ as if by memcpy, and can change address as the dynamic
+ array grows.
+ DYNARRAY_PREFIX
+ The prefix of the functions which are defined.
+
+ The following parameters are optional:
+
+ DYNARRAY_ELEMENT_FREE
+ DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the
+ contents of elements. E is of type DYNARRAY_ELEMENT *.
+ DYNARRAY_ELEMENT_INIT
+ DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new
+ element. E is of type DYNARRAY_ELEMENT *.
+ If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is
+ defined, new elements are automatically zero-initialized.
+ Otherwise, new elements have undefined contents.
+ DYNARRAY_INITIAL_SIZE
+ The size of the statically allocated array (default:
+ at least 2, more elements if they fit into 128 bytes).
+ Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0,
+ there is no statically allocated array at, and all non-empty
+ arrays are heap-allocated.
+ DYNARRAY_FINAL_TYPE
+ The name of the type which holds the final array. If not
+ defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE
+ must be a struct type, with members of type DYNARRAY_ELEMENT and
+ size_t at the start (in this order).
+
+ These macros are undefined after this header file has been
+ included.
+
+ The following types are provided (their members are private to the
+ dynarray implementation):
+
+ struct DYNARRAY_STRUCT
+
+ The following functions are provided:
+
+ void DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *);
+ void DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *);
+ bool DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *);
+ void DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *);
+ size_t DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *);
+ DYNARRAY_ELEMENT *DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *);
+ DYNARRAY_ELEMENT *DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *);
+ DYNARRAY_ELEMENT *DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *, size_t);
+ void DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *, DYNARRAY_ELEMENT);
+ DYNARRAY_ELEMENT *DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *);
+ bool DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *, size_t);
+ void DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *);
+ void DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *);
+
+ The following functions are provided are provided if the
+ prerequisites are met:
+
+ bool DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *,
+ DYNARRAY_FINAL_TYPE *);
+ (if DYNARRAY_FINAL_TYPE is defined)
+ DYNARRAY_ELEMENT *DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *,
+ size_t *);
+ (if DYNARRAY_FINAL_TYPE is not defined)
+*/
+
+#include <malloc/dynarray.gl.h>
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef DYNARRAY_STRUCT
+# error "DYNARRAY_STRUCT must be defined"
+#endif
+
+#ifndef DYNARRAY_ELEMENT
+# error "DYNARRAY_ELEMENT must be defined"
+#endif
+
+#ifndef DYNARRAY_PREFIX
+# error "DYNARRAY_PREFIX must be defined"
+#endif
+
+#ifdef DYNARRAY_INITIAL_SIZE
+# if DYNARRAY_INITIAL_SIZE < 0
+# error "DYNARRAY_INITIAL_SIZE must be non-negative"
+# endif
+# if DYNARRAY_INITIAL_SIZE > 0
+# define DYNARRAY_HAVE_SCRATCH 1
+# else
+# define DYNARRAY_HAVE_SCRATCH 0
+# endif
+#else
+/* Provide a reasonable default which limits the size of
+ DYNARRAY_STRUCT. */
+# define DYNARRAY_INITIAL_SIZE \
+ (sizeof (DYNARRAY_ELEMENT) > 64 ? 2 : 128 / sizeof (DYNARRAY_ELEMENT))
+# define DYNARRAY_HAVE_SCRATCH 1
+#endif
+
+/* Public type definitions. */
+
+/* All fields of this struct are private to the implementation. */
+struct DYNARRAY_STRUCT
+{
+ union
+ {
+ struct dynarray_header dynarray_abstract;
+ struct
+ {
+ /* These fields must match struct dynarray_header. */
+ size_t used;
+ size_t allocated;
+ DYNARRAY_ELEMENT *array;
+ } dynarray_header;
+ } u;
+
+#if DYNARRAY_HAVE_SCRATCH
+ /* Initial inline allocation. */
+ DYNARRAY_ELEMENT scratch[DYNARRAY_INITIAL_SIZE];
+#endif
+};
+
+/* Internal use only: Helper macros. */
+
+/* Ensure macro-expansion of DYNARRAY_PREFIX. */
+#define DYNARRAY_CONCAT0(prefix, name) prefix##name
+#define DYNARRAY_CONCAT1(prefix, name) DYNARRAY_CONCAT0(prefix, name)
+#define DYNARRAY_NAME(name) DYNARRAY_CONCAT1(DYNARRAY_PREFIX, name)
+
+/* Use DYNARRAY_FREE instead of DYNARRAY_NAME (free),
+ so that Gnulib does not change 'free' to 'rpl_free'. */
+#define DYNARRAY_FREE DYNARRAY_CONCAT1 (DYNARRAY_NAME (f), ree)
+
+/* Address of the scratch buffer if any. */
+#if DYNARRAY_HAVE_SCRATCH
+# define DYNARRAY_SCRATCH(list) (list)->scratch
+#else
+# define DYNARRAY_SCRATCH(list) NULL
+#endif
+
+/* Internal use only: Helper functions. */
+
+/* Internal function. Call DYNARRAY_ELEMENT_FREE with the array
+ elements. Name mangling needed due to the DYNARRAY_ELEMENT_FREE
+ macro expansion. */
+static inline void
+DYNARRAY_NAME (free__elements__) (DYNARRAY_ELEMENT *__dynarray_array,
+ size_t __dynarray_used)
+{
+#ifdef DYNARRAY_ELEMENT_FREE
+ for (size_t __dynarray_i = 0; __dynarray_i < __dynarray_used; ++__dynarray_i)
+ DYNARRAY_ELEMENT_FREE (&__dynarray_array[__dynarray_i]);
+#endif /* DYNARRAY_ELEMENT_FREE */
+}
+
+/* Internal function. Free the non-scratch array allocation. */
+static inline void
+DYNARRAY_NAME (free__array__) (struct DYNARRAY_STRUCT *list)
+{
+#if DYNARRAY_HAVE_SCRATCH
+ if (list->u.dynarray_header.array != list->scratch)
+ free (list->u.dynarray_header.array);
+#else
+ free (list->u.dynarray_header.array);
+#endif
+}
+
+/* Public functions. */
+
+/* Initialize a dynamic array object. This must be called before any
+ use of the object. */
+_GL_ATTRIBUTE_NONNULL ((1))
+static void
+DYNARRAY_NAME (init) (struct DYNARRAY_STRUCT *list)
+{
+ list->u.dynarray_header.used = 0;
+ list->u.dynarray_header.allocated = DYNARRAY_INITIAL_SIZE;
+ list->u.dynarray_header.array = DYNARRAY_SCRATCH (list);
+}
+
+/* Deallocate the dynamic array and its elements. */
+_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NONNULL ((1))
+static void
+DYNARRAY_FREE (struct DYNARRAY_STRUCT *list)
+{
+ DYNARRAY_NAME (free__elements__)
+ (list->u.dynarray_header.array, list->u.dynarray_header.used);
+ DYNARRAY_NAME (free__array__) (list);
+ DYNARRAY_NAME (init) (list);
+}
+
+/* Return true if the dynamic array is in an error state. */
+_GL_ATTRIBUTE_NONNULL ((1))
+static inline bool
+DYNARRAY_NAME (has_failed) (const struct DYNARRAY_STRUCT *list)
+{
+ return list->u.dynarray_header.allocated == __dynarray_error_marker ();
+}
+
+/* Mark the dynamic array as failed. All elements are deallocated as
+ a side effect. */
+_GL_ATTRIBUTE_NONNULL ((1))
+static void
+DYNARRAY_NAME (mark_failed) (struct DYNARRAY_STRUCT *list)
+{
+ DYNARRAY_NAME (free__elements__)
+ (list->u.dynarray_header.array, list->u.dynarray_header.used);
+ DYNARRAY_NAME (free__array__) (list);
+ list->u.dynarray_header.array = DYNARRAY_SCRATCH (list);
+ list->u.dynarray_header.used = 0;
+ list->u.dynarray_header.allocated = __dynarray_error_marker ();
+}
+
+/* Return the number of elements which have been added to the dynamic
+ array. */
+_GL_ATTRIBUTE_NONNULL ((1))
+static inline size_t
+DYNARRAY_NAME (size) (const struct DYNARRAY_STRUCT *list)
+{
+ return list->u.dynarray_header.used;
+}
+
+/* Return a pointer to the array element at INDEX. Terminate the
+ process if INDEX is out of bounds. */
+_GL_ATTRIBUTE_NONNULL ((1))
+static inline DYNARRAY_ELEMENT *
+DYNARRAY_NAME (at) (struct DYNARRAY_STRUCT *list, size_t index)
+{
+ if (_GL_UNLIKELY (index >= DYNARRAY_NAME (size) (list)))
+ __libc_dynarray_at_failure (DYNARRAY_NAME (size) (list), index);
+ return list->u.dynarray_header.array + index;
+}
+
+/* Return a pointer to the first array element, if any. For a
+ zero-length array, the pointer can be NULL even though the dynamic
+ array has not entered the failure state. */
+_GL_ATTRIBUTE_NONNULL ((1))
+static inline DYNARRAY_ELEMENT *
+DYNARRAY_NAME (begin) (struct DYNARRAY_STRUCT *list)
+{
+ return list->u.dynarray_header.array;
+}
+
+/* Return a pointer one element past the last array element. For a
+ zero-length array, the pointer can be NULL even though the dynamic
+ array has not entered the failure state. */
+_GL_ATTRIBUTE_NONNULL ((1))
+static inline DYNARRAY_ELEMENT *
+DYNARRAY_NAME (end) (struct DYNARRAY_STRUCT *list)
+{
+ return list->u.dynarray_header.array + list->u.dynarray_header.used;
+}
+
+/* Internal function. Slow path for the add function below. */
+static void
+DYNARRAY_NAME (add__) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item)
+{
+ if (_GL_UNLIKELY
+ (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract,
+ DYNARRAY_SCRATCH (list),
+ sizeof (DYNARRAY_ELEMENT))))
+ {
+ DYNARRAY_NAME (mark_failed) (list);
+ return;
+ }
+
+ /* Copy the new element and increase the array length. */
+ list->u.dynarray_header.array[list->u.dynarray_header.used++] = item;
+}
+
+/* Add ITEM at the end of the array, enlarging it by one element.
+ Mark *LIST as failed if the dynamic array allocation size cannot be
+ increased. */
+_GL_ATTRIBUTE_NONNULL ((1))
+static inline void
+DYNARRAY_NAME (add) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item)
+{
+ /* Do nothing in case of previous error. */
+ if (DYNARRAY_NAME (has_failed) (list))
+ return;
+
+ /* Enlarge the array if necessary. */
+ if (_GL_UNLIKELY (list->u.dynarray_header.used
+ == list->u.dynarray_header.allocated))
+ {
+ DYNARRAY_NAME (add__) (list, item);
+ return;
+ }
+
+ /* Copy the new element and increase the array length. */
+ list->u.dynarray_header.array[list->u.dynarray_header.used++] = item;
+}
+
+/* Internal function. Building block for the emplace functions below.
+ Assumes space for one more element in *LIST. */
+static inline DYNARRAY_ELEMENT *
+DYNARRAY_NAME (emplace__tail__) (struct DYNARRAY_STRUCT *list)
+{
+ DYNARRAY_ELEMENT *result
+ = &list->u.dynarray_header.array[list->u.dynarray_header.used];
+ ++list->u.dynarray_header.used;
+#if defined (DYNARRAY_ELEMENT_INIT)
+ DYNARRAY_ELEMENT_INIT (result);
+#elif defined (DYNARRAY_ELEMENT_FREE)
+ memset (result, 0, sizeof (*result));
+#endif
+ return result;
+}
+
+/* Internal function. Slow path for the emplace function below. */
+static DYNARRAY_ELEMENT *
+DYNARRAY_NAME (emplace__) (struct DYNARRAY_STRUCT *list)
+{
+ if (_GL_UNLIKELY
+ (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract,
+ DYNARRAY_SCRATCH (list),
+ sizeof (DYNARRAY_ELEMENT))))
+ {
+ DYNARRAY_NAME (mark_failed) (list);
+ return NULL;
+ }
+ return DYNARRAY_NAME (emplace__tail__) (list);
+}
+
+/* Allocate a place for a new element in *LIST and return a pointer to
+ it. The pointer can be NULL if the dynamic array cannot be
+ enlarged due to a memory allocation failure. */
+_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NODISCARD
+_GL_ATTRIBUTE_NONNULL ((1))
+static
+/* Avoid inlining with the larger initialization code. */
+#if !(defined (DYNARRAY_ELEMENT_INIT) || defined (DYNARRAY_ELEMENT_FREE))
+inline
+#endif
+DYNARRAY_ELEMENT *
+DYNARRAY_NAME (emplace) (struct DYNARRAY_STRUCT *list)
+{
+ /* Do nothing in case of previous error. */
+ if (DYNARRAY_NAME (has_failed) (list))
+ return NULL;
+
+ /* Enlarge the array if necessary. */
+ if (_GL_UNLIKELY (list->u.dynarray_header.used
+ == list->u.dynarray_header.allocated))
+ return (DYNARRAY_NAME (emplace__) (list));
+ return DYNARRAY_NAME (emplace__tail__) (list);
+}
+
+/* Change the size of *LIST to SIZE. If SIZE is larger than the
+ existing size, new elements are added (which can be initialized).
+ Otherwise, the list is truncated, and elements are freed. Return
+ false on memory allocation failure (and mark *LIST as failed). */
+_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NONNULL ((1))
+static bool
+DYNARRAY_NAME (resize) (struct DYNARRAY_STRUCT *list, size_t size)
+{
+ if (size > list->u.dynarray_header.used)
+ {
+ bool ok;
+#if defined (DYNARRAY_ELEMENT_INIT)
+ /* The new elements have to be initialized. */
+ size_t old_size = list->u.dynarray_header.used;
+ ok = __libc_dynarray_resize (&list->u.dynarray_abstract,
+ size, DYNARRAY_SCRATCH (list),
+ sizeof (DYNARRAY_ELEMENT));
+ if (ok)
+ for (size_t i = old_size; i < size; ++i)
+ {
+ DYNARRAY_ELEMENT_INIT (&list->u.dynarray_header.array[i]);
+ }
+#elif defined (DYNARRAY_ELEMENT_FREE)
+ /* Zero initialization is needed so that the elements can be
+ safely freed. */
+ ok = __libc_dynarray_resize_clear
+ (&list->u.dynarray_abstract, size,
+ DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT));
+#else
+ ok = __libc_dynarray_resize (&list->u.dynarray_abstract,
+ size, DYNARRAY_SCRATCH (list),
+ sizeof (DYNARRAY_ELEMENT));
+#endif
+ if (_GL_UNLIKELY (!ok))
+ DYNARRAY_NAME (mark_failed) (list);
+ return ok;
+ }
+ else
+ {
+ /* The list has shrunk in size. Free the removed elements. */
+ DYNARRAY_NAME (free__elements__)
+ (list->u.dynarray_header.array + size,
+ list->u.dynarray_header.used - size);
+ list->u.dynarray_header.used = size;
+ return true;
+ }
+}
+
+/* Remove the last element of LIST if it is present. */
+_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NONNULL ((1))
+static void
+DYNARRAY_NAME (remove_last) (struct DYNARRAY_STRUCT *list)
+{
+ /* used > 0 implies that the array is the non-failed state. */
+ if (list->u.dynarray_header.used > 0)
+ {
+ size_t new_length = list->u.dynarray_header.used - 1;
+#ifdef DYNARRAY_ELEMENT_FREE
+ DYNARRAY_ELEMENT_FREE (&list->u.dynarray_header.array[new_length]);
+#endif
+ list->u.dynarray_header.used = new_length;
+ }
+}
+
+/* Remove all elements from the list. The elements are freed, but the
+ list itself is not. */
+_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NONNULL ((1))
+static void
+DYNARRAY_NAME (clear) (struct DYNARRAY_STRUCT *list)
+{
+ /* free__elements__ does nothing if the list is in the failed
+ state. */
+ DYNARRAY_NAME (free__elements__)
+ (list->u.dynarray_header.array, list->u.dynarray_header.used);
+ list->u.dynarray_header.used = 0;
+}
+
+#ifdef DYNARRAY_FINAL_TYPE
+/* Transfer the dynamic array to a permanent location at *RESULT.
+ Returns true on success on false on allocation failure. In either
+ case, *LIST is re-initialized and can be reused. A NULL pointer is
+ stored in *RESULT if LIST refers to an empty list. On success, the
+ pointer in *RESULT is heap-allocated and must be deallocated using
+ free. */
+_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NODISCARD
+_GL_ATTRIBUTE_NONNULL ((1, 2))
+static bool
+DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list,
+ DYNARRAY_FINAL_TYPE *result)
+{
+ struct dynarray_finalize_result res;
+ if (__libc_dynarray_finalize (&list->u.dynarray_abstract,
+ DYNARRAY_SCRATCH (list),
+ sizeof (DYNARRAY_ELEMENT), &res))
+ {
+ /* On success, the result owns all the data. */
+ DYNARRAY_NAME (init) (list);
+ *result = (DYNARRAY_FINAL_TYPE) { res.array, res.length };
+ return true;
+ }
+ else
+ {
+ /* On error, we need to free all data. */
+ DYNARRAY_FREE (list);
+ errno = ENOMEM;
+ return false;
+ }
+}
+#else /* !DYNARRAY_FINAL_TYPE */
+/* Transfer the dynamic array to a heap-allocated array and return a
+ pointer to it. The pointer is NULL if memory allocation fails, or
+ if the array is empty, so this function should be used only for
+ arrays which are known not be empty (usually because they always
+ have a sentinel at the end). If LENGTHP is not NULL, the array
+ length is written to *LENGTHP. *LIST is re-initialized and can be
+ reused. */
+_GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_NODISCARD
+_GL_ATTRIBUTE_NONNULL ((1))
+static DYNARRAY_ELEMENT *
+DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, size_t *lengthp)
+{
+ struct dynarray_finalize_result res;
+ if (__libc_dynarray_finalize (&list->u.dynarray_abstract,
+ DYNARRAY_SCRATCH (list),
+ sizeof (DYNARRAY_ELEMENT), &res))
+ {
+ /* On success, the result owns all the data. */
+ DYNARRAY_NAME (init) (list);
+ if (lengthp != NULL)
+ *lengthp = res.length;
+ return res.array;
+ }
+ else
+ {
+ /* On error, we need to free all data. */
+ DYNARRAY_FREE (list);
+ errno = ENOMEM;
+ return NULL;
+ }
+}
+#endif /* !DYNARRAY_FINAL_TYPE */
+
+/* Undo macro definitions. */
+
+#undef DYNARRAY_CONCAT0
+#undef DYNARRAY_CONCAT1
+#undef DYNARRAY_NAME
+#undef DYNARRAY_SCRATCH
+#undef DYNARRAY_HAVE_SCRATCH
+
+#undef DYNARRAY_STRUCT
+#undef DYNARRAY_ELEMENT
+#undef DYNARRAY_PREFIX
+#undef DYNARRAY_ELEMENT_FREE
+#undef DYNARRAY_ELEMENT_INIT
+#undef DYNARRAY_INITIAL_SIZE
+#undef DYNARRAY_FINAL_TYPE
diff --git a/gl/malloc/dynarray.gl.h b/gl/malloc/dynarray.gl.h
new file mode 100644
index 0000000..24897b2
--- /dev/null
+++ b/gl/malloc/dynarray.gl.h
@@ -0,0 +1,174 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Type-safe arrays which grow dynamically. Shared definitions.
+ Copyright (C) 2017-2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library 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.
+
+ The GNU C Library 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 the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+/* To use the dynarray facility, you need to include
+ <malloc/dynarray-skeleton.c> and define the parameter macros
+ documented in that file.
+
+ A minimal example which provides a growing list of integers can be
+ defined like this:
+
+ struct int_array
+ {
+ // Pointer to result array followed by its length,
+ // as required by DYNARRAY_FINAL_TYPE.
+ int *array;
+ size_t length;
+ };
+
+ #define DYNARRAY_STRUCT dynarray_int
+ #define DYNARRAY_ELEMENT int
+ #define DYNARRAY_PREFIX dynarray_int_
+ #define DYNARRAY_FINAL_TYPE struct int_array
+ #include <malloc/dynarray-skeleton.c>
+
+ To create a three-element array with elements 1, 2, 3, use this
+ code:
+
+ struct dynarray_int dyn;
+ dynarray_int_init (&dyn);
+ for (int i = 1; i <= 3; ++i)
+ {
+ int *place = dynarray_int_emplace (&dyn);
+ assert (place != NULL);
+ *place = i;
+ }
+ struct int_array result;
+ bool ok = dynarray_int_finalize (&dyn, &result);
+ assert (ok);
+ assert (result.length == 3);
+ assert (result.array[0] == 1);
+ assert (result.array[1] == 2);
+ assert (result.array[2] == 3);
+ free (result.array);
+
+ If the elements contain resources which must be freed, define
+ DYNARRAY_ELEMENT_FREE appropriately, like this:
+
+ struct str_array
+ {
+ char **array;
+ size_t length;
+ };
+
+ #define DYNARRAY_STRUCT dynarray_str
+ #define DYNARRAY_ELEMENT char *
+ #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr)
+ #define DYNARRAY_PREFIX dynarray_str_
+ #define DYNARRAY_FINAL_TYPE struct str_array
+ #include <malloc/dynarray-skeleton.c>
+
+ Compared to scratch buffers, dynamic arrays have the following
+ features:
+
+ - They have an element type, and are not just an untyped buffer of
+ bytes.
+
+ - When growing, previously stored elements are preserved. (It is
+ expected that scratch_buffer_grow_preserve and
+ scratch_buffer_set_array_size eventually go away because all
+ current users are moved to dynamic arrays.)
+
+ - Scratch buffers have a more aggressive growth policy because
+ growing them typically means a retry of an operation (across an
+ NSS service module boundary), which is expensive.
+
+ - For the same reason, scratch buffers have a much larger initial
+ stack allocation. */
+
+#ifndef _DYNARRAY_H
+#define _DYNARRAY_H
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <string.h>
+
+struct dynarray_header
+{
+ size_t used;
+ size_t allocated;
+ void *array;
+};
+
+/* Marker used in the allocated member to indicate that an error was
+ encountered. */
+static inline size_t
+__dynarray_error_marker (void)
+{
+ return -1;
+}
+
+/* Internal function. See the has_failed function in
+ dynarray-skeleton.c. */
+static inline bool
+__dynarray_error (struct dynarray_header *list)
+{
+ return list->allocated == __dynarray_error_marker ();
+}
+
+/* Internal function. Enlarge the dynamically allocated area of the
+ array to make room for one more element. SCRATCH is a pointer to
+ the scratch area (which is not heap-allocated and must not be
+ freed). ELEMENT_SIZE is the size, in bytes, of one element.
+ Return false on failure, true on success. */
+bool __libc_dynarray_emplace_enlarge (struct dynarray_header *,
+ void *scratch, size_t element_size);
+
+/* Internal function. Enlarge the dynamically allocated area of the
+ array to make room for at least SIZE elements (which must be larger
+ than the existing used part of the dynamic array). SCRATCH is a
+ pointer to the scratch area (which is not heap-allocated and must
+ not be freed). ELEMENT_SIZE is the size, in bytes, of one element.
+ Return false on failure, true on success. */
+bool __libc_dynarray_resize (struct dynarray_header *, size_t size,
+ void *scratch, size_t element_size);
+
+/* Internal function. Like __libc_dynarray_resize, but clear the new
+ part of the dynamic array. */
+bool __libc_dynarray_resize_clear (struct dynarray_header *, size_t size,
+ void *scratch, size_t element_size);
+
+/* Internal type. */
+struct dynarray_finalize_result
+{
+ void *array;
+ size_t length;
+};
+
+/* Internal function. Copy the dynamically-allocated area to an
+ explicitly-sized heap allocation. SCRATCH is a pointer to the
+ embedded scratch space. ELEMENT_SIZE is the size, in bytes, of the
+ element type. On success, true is returned, and pointer and length
+ are written to *RESULT. On failure, false is returned. The caller
+ has to take care of some of the memory management; this function is
+ expected to be called from dynarray-skeleton.c. */
+bool __libc_dynarray_finalize (struct dynarray_header *list, void *scratch,
+ size_t element_size,
+ struct dynarray_finalize_result *result);
+
+
+/* Internal function. Terminate the process after an index error.
+ SIZE is the number of elements of the dynamic array. INDEX is the
+ lookup index which triggered the failure. */
+_Noreturn void __libc_dynarray_at_failure (size_t size, size_t index);
+
+#ifndef _ISOMAC
+#endif
+
+#endif /* _DYNARRAY_H */
diff --git a/gl/sha256-stream.c b/gl/sha256-stream.c
deleted file mode 100644
index c2e6398..0000000
--- a/gl/sha256-stream.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* sha256.c - Functions to compute SHA256 and SHA224 message digest of files or
- memory blocks according to the NIST specification FIPS-180-2.
-
- Copyright (C) 2005-2006, 2008-2022 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/>. */
-
-/* Written by David Madore, considerably copypasting from
- Scott G. Miller's sha1.c
-*/
-
-#include <config.h>
-
-/* Specification. */
-#if HAVE_OPENSSL_SHA256
-# define GL_OPENSSL_INLINE _GL_EXTERN_INLINE
-#endif
-#include "sha256.h"
-
-#include <stdlib.h>
-
-#if USE_UNLOCKED_IO
-# include "unlocked-io.h"
-#endif
-
-#include "af_alg.h"
-
-#define BLOCKSIZE 32768
-#if BLOCKSIZE % 64 != 0
-# error "invalid BLOCKSIZE"
-#endif
-
-/* Compute message digest for bytes read from STREAM using algorithm ALG.
- Write the message digest into RESBLOCK, which contains HASHLEN bytes.
- The initial and finishing operations are INIT_CTX and FINISH_CTX.
- Return zero if and only if successful. */
-static int
-shaxxx_stream (FILE *stream, char const *alg, void *resblock,
- ssize_t hashlen, void (*init_ctx) (struct sha256_ctx *),
- void *(*finish_ctx) (struct sha256_ctx *, void *))
-{
- switch (afalg_stream (stream, alg, resblock, hashlen))
- {
- case 0: return 0;
- case -EIO: return 1;
- }
-
- char *buffer = malloc (BLOCKSIZE + 72);
- if (!buffer)
- return 1;
-
- struct sha256_ctx ctx;
- init_ctx (&ctx);
- size_t sum;
-
- /* Iterate over full file contents. */
- while (1)
- {
- /* We read the file in blocks of BLOCKSIZE bytes. One call of the
- computation function processes the whole buffer so that with the
- next round of the loop another block can be read. */
- size_t n;
- sum = 0;
-
- /* Read block. Take care for partial reads. */
- while (1)
- {
- /* Either process a partial fread() from this loop,
- or the fread() in afalg_stream may have gotten EOF.
- We need to avoid a subsequent fread() as EOF may
- not be sticky. For details of such systems, see:
- https://sourceware.org/bugzilla/show_bug.cgi?id=1190 */
- if (feof (stream))
- goto process_partial_block;
-
- n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
-
- sum += n;
-
- if (sum == BLOCKSIZE)
- break;
-
- if (n == 0)
- {
- /* Check for the error flag IFF N == 0, so that we don't
- exit the loop after a partial read due to e.g., EAGAIN
- or EWOULDBLOCK. */
- if (ferror (stream))
- {
- free (buffer);
- return 1;
- }
- goto process_partial_block;
- }
- }
-
- /* Process buffer with BLOCKSIZE bytes. Note that
- BLOCKSIZE % 64 == 0
- */
- sha256_process_block (buffer, BLOCKSIZE, &ctx);
- }
-
- process_partial_block:;
-
- /* Process any remaining bytes. */
- if (sum > 0)
- sha256_process_bytes (buffer, sum, &ctx);
-
- /* Construct result in desired memory. */
- finish_ctx (&ctx, resblock);
- free (buffer);
- return 0;
-}
-
-int
-sha256_stream (FILE *stream, void *resblock)
-{
- return shaxxx_stream (stream, "sha256", resblock, SHA256_DIGEST_SIZE,
- sha256_init_ctx, sha256_finish_ctx);
-}
-
-int
-sha224_stream (FILE *stream, void *resblock)
-{
- return shaxxx_stream (stream, "sha224", resblock, SHA224_DIGEST_SIZE,
- sha224_init_ctx, sha224_finish_ctx);
-}
-
-/*
- * Hey Emacs!
- * Local Variables:
- * coding: utf-8
- * End:
- */
diff --git a/gl/sha256.c b/gl/sha256.c
deleted file mode 100644
index c9ca618..0000000
--- a/gl/sha256.c
+++ /dev/null
@@ -1,433 +0,0 @@
-/* sha256.c - Functions to compute SHA256 and SHA224 message digest of files or
- memory blocks according to the NIST specification FIPS-180-2.
-
- Copyright (C) 2005-2006, 2008-2022 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/>. */
-
-/* Written by David Madore, considerably copypasting from
- Scott G. Miller's sha1.c
-*/
-
-#include <config.h>
-
-/* Specification. */
-#if HAVE_OPENSSL_SHA256
-# define GL_OPENSSL_INLINE _GL_EXTERN_INLINE
-#endif
-#include "sha256.h"
-
-#include <stdalign.h>
-#include <stdint.h>
-#include <string.h>
-
-#include <byteswap.h>
-#ifdef WORDS_BIGENDIAN
-# define SWAP(n) (n)
-#else
-# define SWAP(n) bswap_32 (n)
-#endif
-
-#if ! HAVE_OPENSSL_SHA256
-
-/* This array contains the bytes used to pad the buffer to the next
- 64-byte boundary. */
-static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
-
-
-/*
- Takes a pointer to a 256 bit block of data (eight 32 bit ints) and
- initializes it to the start constants of the SHA256 algorithm. This
- must be called before using hash in the call to sha256_hash
-*/
-void
-sha256_init_ctx (struct sha256_ctx *ctx)
-{
- ctx->state[0] = 0x6a09e667UL;
- ctx->state[1] = 0xbb67ae85UL;
- ctx->state[2] = 0x3c6ef372UL;
- ctx->state[3] = 0xa54ff53aUL;
- ctx->state[4] = 0x510e527fUL;
- ctx->state[5] = 0x9b05688cUL;
- ctx->state[6] = 0x1f83d9abUL;
- ctx->state[7] = 0x5be0cd19UL;
-
- ctx->total[0] = ctx->total[1] = 0;
- ctx->buflen = 0;
-}
-
-void
-sha224_init_ctx (struct sha256_ctx *ctx)
-{
- ctx->state[0] = 0xc1059ed8UL;
- ctx->state[1] = 0x367cd507UL;
- ctx->state[2] = 0x3070dd17UL;
- ctx->state[3] = 0xf70e5939UL;
- ctx->state[4] = 0xffc00b31UL;
- ctx->state[5] = 0x68581511UL;
- ctx->state[6] = 0x64f98fa7UL;
- ctx->state[7] = 0xbefa4fa4UL;
-
- ctx->total[0] = ctx->total[1] = 0;
- ctx->buflen = 0;
-}
-
-/* Copy the value from v into the memory location pointed to by *CP,
- If your architecture allows unaligned access, this is equivalent to
- * (__typeof__ (v) *) cp = v */
-static void
-set_uint32 (char *cp, uint32_t v)
-{
- memcpy (cp, &v, sizeof v);
-}
-
-/* Put result from CTX in first 32 bytes following RESBUF.
- The result must be in little endian byte order. */
-void *
-sha256_read_ctx (const struct sha256_ctx *ctx, void *resbuf)
-{
- int i;
- char *r = resbuf;
-
- for (i = 0; i < 8; i++)
- set_uint32 (r + i * sizeof ctx->state[0], SWAP (ctx->state[i]));
-
- return resbuf;
-}
-
-void *
-sha224_read_ctx (const struct sha256_ctx *ctx, void *resbuf)
-{
- int i;
- char *r = resbuf;
-
- for (i = 0; i < 7; i++)
- set_uint32 (r + i * sizeof ctx->state[0], SWAP (ctx->state[i]));
-
- return resbuf;
-}
-
-/* Process the remaining bytes in the internal buffer and the usual
- prolog according to the standard and write the result to RESBUF. */
-static void
-sha256_conclude_ctx (struct sha256_ctx *ctx)
-{
- /* Take yet unprocessed bytes into account. */
- size_t bytes = ctx->buflen;
- size_t size = (bytes < 56) ? 64 / 4 : 64 * 2 / 4;
-
- /* Now count remaining bytes. */
- ctx->total[0] += bytes;
- if (ctx->total[0] < bytes)
- ++ctx->total[1];
-
- /* Put the 64-bit file length in *bits* at the end of the buffer.
- Use set_uint32 rather than a simple assignment, to avoid risk of
- unaligned access. */
- set_uint32 ((char *) &ctx->buffer[size - 2],
- SWAP ((ctx->total[1] << 3) | (ctx->total[0] >> 29)));
- set_uint32 ((char *) &ctx->buffer[size - 1],
- SWAP (ctx->total[0] << 3));
-
- memcpy (&((char *) ctx->buffer)[bytes], fillbuf, (size - 2) * 4 - bytes);
-
- /* Process last bytes. */
- sha256_process_block (ctx->buffer, size * 4, ctx);
-}
-
-void *
-sha256_finish_ctx (struct sha256_ctx *ctx, void *resbuf)
-{
- sha256_conclude_ctx (ctx);
- return sha256_read_ctx (ctx, resbuf);
-}
-
-void *
-sha224_finish_ctx (struct sha256_ctx *ctx, void *resbuf)
-{
- sha256_conclude_ctx (ctx);
- return sha224_read_ctx (ctx, resbuf);
-}
-
-/* Compute SHA256 message digest for LEN bytes beginning at BUFFER. The
- result is always in little endian byte order, so that a byte-wise
- output yields to the wanted ASCII representation of the message
- digest. */
-void *
-sha256_buffer (const char *buffer, size_t len, void *resblock)
-{
- struct sha256_ctx ctx;
-
- /* Initialize the computation context. */
- sha256_init_ctx (&ctx);
-
- /* Process whole buffer but last len % 64 bytes. */
- sha256_process_bytes (buffer, len, &ctx);
-
- /* Put result in desired memory area. */
- return sha256_finish_ctx (&ctx, resblock);
-}
-
-void *
-sha224_buffer (const char *buffer, size_t len, void *resblock)
-{
- struct sha256_ctx ctx;
-
- /* Initialize the computation context. */
- sha224_init_ctx (&ctx);
-
- /* Process whole buffer but last len % 64 bytes. */
- sha256_process_bytes (buffer, len, &ctx);
-
- /* Put result in desired memory area. */
- return sha224_finish_ctx (&ctx, resblock);
-}
-
-void
-sha256_process_bytes (const void *buffer, size_t len, struct sha256_ctx *ctx)
-{
- /* When we already have some bits in our internal buffer concatenate
- both inputs first. */
- if (ctx->buflen != 0)
- {
- size_t left_over = ctx->buflen;
- size_t add = 128 - left_over > len ? len : 128 - left_over;
-
- memcpy (&((char *) ctx->buffer)[left_over], buffer, add);
- ctx->buflen += add;
-
- if (ctx->buflen > 64)
- {
- sha256_process_block (ctx->buffer, ctx->buflen & ~63, ctx);
-
- ctx->buflen &= 63;
- /* The regions in the following copy operation cannot overlap,
- because ctx->buflen < 64 ≤ (left_over + add) & ~63. */
- memcpy (ctx->buffer,
- &((char *) ctx->buffer)[(left_over + add) & ~63],
- ctx->buflen);
- }
-
- buffer = (const char *) buffer + add;
- len -= add;
- }
-
- /* Process available complete blocks. */
- if (len >= 64)
- {
-#if !(_STRING_ARCH_unaligned || _STRING_INLINE_unaligned)
-# define UNALIGNED_P(p) ((uintptr_t) (p) % alignof (uint32_t) != 0)
- if (UNALIGNED_P (buffer))
- while (len > 64)
- {
- sha256_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx);
- buffer = (const char *) buffer + 64;
- len -= 64;
- }
- else
-#endif
- {
- sha256_process_block (buffer, len & ~63, ctx);
- buffer = (const char *) buffer + (len & ~63);
- len &= 63;
- }
- }
-
- /* Move remaining bytes in internal buffer. */
- if (len > 0)
- {
- size_t left_over = ctx->buflen;
-
- memcpy (&((char *) ctx->buffer)[left_over], buffer, len);
- left_over += len;
- if (left_over >= 64)
- {
- sha256_process_block (ctx->buffer, 64, ctx);
- left_over -= 64;
- /* The regions in the following copy operation cannot overlap,
- because left_over ≤ 64. */
- memcpy (ctx->buffer, &ctx->buffer[16], left_over);
- }
- ctx->buflen = left_over;
- }
-}
-
-/* --- Code below is the primary difference between sha1.c and sha256.c --- */
-
-/* SHA256 round constants */
-#define K(I) sha256_round_constants[I]
-static const uint32_t sha256_round_constants[64] = {
- 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
- 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
- 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
- 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
- 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
- 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
- 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
- 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,
- 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
- 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
- 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
- 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
- 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
- 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
- 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
- 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL,
-};
-
-/* Round functions. */
-#define F2(A,B,C) ( ( A & B ) | ( C & ( A | B ) ) )
-#define F1(E,F,G) ( G ^ ( E & ( F ^ G ) ) )
-
-/* Process LEN bytes of BUFFER, accumulating context into CTX.
- It is assumed that LEN % 64 == 0.
- Most of this code comes from GnuPG's cipher/sha1.c. */
-
-void
-sha256_process_block (const void *buffer, size_t len, struct sha256_ctx *ctx)
-{
- const uint32_t *words = buffer;
- size_t nwords = len / sizeof (uint32_t);
- const uint32_t *endp = words + nwords;
- uint32_t x[16];
- uint32_t a = ctx->state[0];
- uint32_t b = ctx->state[1];
- uint32_t c = ctx->state[2];
- uint32_t d = ctx->state[3];
- uint32_t e = ctx->state[4];
- uint32_t f = ctx->state[5];
- uint32_t g = ctx->state[6];
- uint32_t h = ctx->state[7];
- uint32_t lolen = len;
-
- /* First increment the byte count. FIPS PUB 180-2 specifies the possible
- length of the file up to 2^64 bits. Here we only compute the
- number of bytes. Do a double word increment. */
- ctx->total[0] += lolen;
- ctx->total[1] += (len >> 31 >> 1) + (ctx->total[0] < lolen);
-
-#define rol(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
-#define S0(x) (rol(x,25)^rol(x,14)^(x>>3))
-#define S1(x) (rol(x,15)^rol(x,13)^(x>>10))
-#define SS0(x) (rol(x,30)^rol(x,19)^rol(x,10))
-#define SS1(x) (rol(x,26)^rol(x,21)^rol(x,7))
-
-#define M(I) ( tm = S1(x[(I-2)&0x0f]) + x[(I-7)&0x0f] \
- + S0(x[(I-15)&0x0f]) + x[I&0x0f] \
- , x[I&0x0f] = tm )
-
-#define R(A,B,C,D,E,F,G,H,K,M) do { t0 = SS0(A) + F2(A,B,C); \
- t1 = H + SS1(E) \
- + F1(E,F,G) \
- + K \
- + M; \
- D += t1; H = t0 + t1; \
- } while(0)
-
- while (words < endp)
- {
- uint32_t tm;
- uint32_t t0, t1;
- int t;
- /* FIXME: see sha1.c for a better implementation. */
- for (t = 0; t < 16; t++)
- {
- x[t] = SWAP (*words);
- words++;
- }
-
- R( a, b, c, d, e, f, g, h, K( 0), x[ 0] );
- R( h, a, b, c, d, e, f, g, K( 1), x[ 1] );
- R( g, h, a, b, c, d, e, f, K( 2), x[ 2] );
- R( f, g, h, a, b, c, d, e, K( 3), x[ 3] );
- R( e, f, g, h, a, b, c, d, K( 4), x[ 4] );
- R( d, e, f, g, h, a, b, c, K( 5), x[ 5] );
- R( c, d, e, f, g, h, a, b, K( 6), x[ 6] );
- R( b, c, d, e, f, g, h, a, K( 7), x[ 7] );
- R( a, b, c, d, e, f, g, h, K( 8), x[ 8] );
- R( h, a, b, c, d, e, f, g, K( 9), x[ 9] );
- R( g, h, a, b, c, d, e, f, K(10), x[10] );
- R( f, g, h, a, b, c, d, e, K(11), x[11] );
- R( e, f, g, h, a, b, c, d, K(12), x[12] );
- R( d, e, f, g, h, a, b, c, K(13), x[13] );
- R( c, d, e, f, g, h, a, b, K(14), x[14] );
- R( b, c, d, e, f, g, h, a, K(15), x[15] );
- R( a, b, c, d, e, f, g, h, K(16), M(16) );
- R( h, a, b, c, d, e, f, g, K(17), M(17) );
- R( g, h, a, b, c, d, e, f, K(18), M(18) );
- R( f, g, h, a, b, c, d, e, K(19), M(19) );
- R( e, f, g, h, a, b, c, d, K(20), M(20) );
- R( d, e, f, g, h, a, b, c, K(21), M(21) );
- R( c, d, e, f, g, h, a, b, K(22), M(22) );
- R( b, c, d, e, f, g, h, a, K(23), M(23) );
- R( a, b, c, d, e, f, g, h, K(24), M(24) );
- R( h, a, b, c, d, e, f, g, K(25), M(25) );
- R( g, h, a, b, c, d, e, f, K(26), M(26) );
- R( f, g, h, a, b, c, d, e, K(27), M(27) );
- R( e, f, g, h, a, b, c, d, K(28), M(28) );
- R( d, e, f, g, h, a, b, c, K(29), M(29) );
- R( c, d, e, f, g, h, a, b, K(30), M(30) );
- R( b, c, d, e, f, g, h, a, K(31), M(31) );
- R( a, b, c, d, e, f, g, h, K(32), M(32) );
- R( h, a, b, c, d, e, f, g, K(33), M(33) );
- R( g, h, a, b, c, d, e, f, K(34), M(34) );
- R( f, g, h, a, b, c, d, e, K(35), M(35) );
- R( e, f, g, h, a, b, c, d, K(36), M(36) );
- R( d, e, f, g, h, a, b, c, K(37), M(37) );
- R( c, d, e, f, g, h, a, b, K(38), M(38) );
- R( b, c, d, e, f, g, h, a, K(39), M(39) );
- R( a, b, c, d, e, f, g, h, K(40), M(40) );
- R( h, a, b, c, d, e, f, g, K(41), M(41) );
- R( g, h, a, b, c, d, e, f, K(42), M(42) );
- R( f, g, h, a, b, c, d, e, K(43), M(43) );
- R( e, f, g, h, a, b, c, d, K(44), M(44) );
- R( d, e, f, g, h, a, b, c, K(45), M(45) );
- R( c, d, e, f, g, h, a, b, K(46), M(46) );
- R( b, c, d, e, f, g, h, a, K(47), M(47) );
- R( a, b, c, d, e, f, g, h, K(48), M(48) );
- R( h, a, b, c, d, e, f, g, K(49), M(49) );
- R( g, h, a, b, c, d, e, f, K(50), M(50) );
- R( f, g, h, a, b, c, d, e, K(51), M(51) );
- R( e, f, g, h, a, b, c, d, K(52), M(52) );
- R( d, e, f, g, h, a, b, c, K(53), M(53) );
- R( c, d, e, f, g, h, a, b, K(54), M(54) );
- R( b, c, d, e, f, g, h, a, K(55), M(55) );
- R( a, b, c, d, e, f, g, h, K(56), M(56) );
- R( h, a, b, c, d, e, f, g, K(57), M(57) );
- R( g, h, a, b, c, d, e, f, K(58), M(58) );
- R( f, g, h, a, b, c, d, e, K(59), M(59) );
- R( e, f, g, h, a, b, c, d, K(60), M(60) );
- R( d, e, f, g, h, a, b, c, K(61), M(61) );
- R( c, d, e, f, g, h, a, b, K(62), M(62) );
- R( b, c, d, e, f, g, h, a, K(63), M(63) );
-
- a = ctx->state[0] += a;
- b = ctx->state[1] += b;
- c = ctx->state[2] += c;
- d = ctx->state[3] += d;
- e = ctx->state[4] += e;
- f = ctx->state[5] += f;
- g = ctx->state[6] += g;
- h = ctx->state[7] += h;
- }
-}
-
-#endif
-
-/*
- * Hey Emacs!
- * Local Variables:
- * coding: utf-8
- * End:
- */
diff --git a/gl/sha256.h b/gl/sha256.h
deleted file mode 100644
index 533173a..0000000
--- a/gl/sha256.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/* Declarations of functions and data types used for SHA256 and SHA224 sum
- library functions.
- Copyright (C) 2005-2006, 2008-2022 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/>. */
-
-#ifndef SHA256_H
-# define SHA256_H 1
-
-# include <stdio.h>
-# include <stdint.h>
-
-# if HAVE_OPENSSL_SHA256
-# ifndef OPENSSL_API_COMPAT
-# define OPENSSL_API_COMPAT 0x10101000L /* FIXME: Use OpenSSL 1.1+ API. */
-# endif
-# include <openssl/sha.h>
-# endif
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-enum { SHA224_DIGEST_SIZE = 224 / 8 };
-enum { SHA256_DIGEST_SIZE = 256 / 8 };
-
-# if HAVE_OPENSSL_SHA256
-# define GL_OPENSSL_NAME 224
-# include "gl_openssl.h"
-# define GL_OPENSSL_NAME 256
-# include "gl_openssl.h"
-# else
-/* Structure to save state of computation between the single steps. */
-struct sha256_ctx
-{
- uint32_t state[8];
-
- uint32_t total[2];
- size_t buflen; /* ≥ 0, ≤ 128 */
- uint32_t buffer[32]; /* 128 bytes; the first buflen bytes are in use */
-};
-
-/* Initialize structure containing state of computation. */
-extern void sha256_init_ctx (struct sha256_ctx *ctx);
-extern void sha224_init_ctx (struct sha256_ctx *ctx);
-
-/* Starting with the result of former calls of this function (or the
- initialization function update the context for the next LEN bytes
- starting at BUFFER.
- It is necessary that LEN is a multiple of 64!!! */
-extern void sha256_process_block (const void *buffer, size_t len,
- struct sha256_ctx *ctx);
-
-/* Starting with the result of former calls of this function (or the
- initialization function update the context for the next LEN bytes
- starting at BUFFER.
- It is NOT required that LEN is a multiple of 64. */
-extern void sha256_process_bytes (const void *buffer, size_t len,
- struct sha256_ctx *ctx);
-
-/* Process the remaining bytes in the buffer and put result from CTX
- in first 32 (28) bytes following RESBUF. The result is always in little
- endian byte order, so that a byte-wise output yields to the wanted
- ASCII representation of the message digest. */
-extern void *sha256_finish_ctx (struct sha256_ctx *ctx, void *restrict resbuf);
-extern void *sha224_finish_ctx (struct sha256_ctx *ctx, void *restrict resbuf);
-
-
-/* Put result from CTX in first 32 (28) bytes following RESBUF. The result is
- always in little endian byte order, so that a byte-wise output yields
- to the wanted ASCII representation of the message digest. */
-extern void *sha256_read_ctx (const struct sha256_ctx *ctx,
- void *restrict resbuf);
-extern void *sha224_read_ctx (const struct sha256_ctx *ctx,
- void *restrict resbuf);
-
-
-/* Compute SHA256 (SHA224) message digest for LEN bytes beginning at BUFFER.
- The result is always in little endian byte order, so that a byte-wise
- output yields to the wanted ASCII representation of the message
- digest. */
-extern void *sha256_buffer (const char *buffer, size_t len,
- void *restrict resblock);
-extern void *sha224_buffer (const char *buffer, size_t len,
- void *restrict resblock);
-
-# endif
-
-/* Compute SHA256 (SHA224) message digest for bytes read from STREAM.
- STREAM is an open file stream. Regular files are handled more efficiently.
- The contents of STREAM from its current position to its end will be read.
- The case that the last operation on STREAM was an 'ungetc' is not supported.
- The resulting message digest number will be written into the 32 (28) bytes
- beginning at RESBLOCK. */
-extern int sha256_stream (FILE *stream, void *resblock);
-extern int sha224_stream (FILE *stream, void *resblock);
-
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif
-
-/*
- * Hey Emacs!
- * Local Variables:
- * coding: utf-8
- * End:
- */
diff --git a/gl/stdckdint.h b/gl/stdckdint.h
new file mode 100644
index 0000000..8eeac90
--- /dev/null
+++ b/gl/stdckdint.h
@@ -0,0 +1,38 @@
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* stdckdint.h -- checked integer arithmetic
+
+ Copyright 2022 Free Software Foundation, Inc.
+
+ This program 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 program 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/>. */
+
+#ifndef _GL_STDCKDINT_H
+#define _GL_STDCKDINT_H
+
+#include "intprops-internal.h"
+
+#include <stdbool.h>
+
+/* Store into *R the low-order bits of A + B, A - B, A * B, respectively.
+ Return 1 if the result overflows, 0 otherwise.
+ A, B, and *R can have any integer type other than char, bool, a
+ bit-precise integer type, or an enumeration type.
+
+ These are like the standard macros introduced in C23, except that
+ arguments should not have side effects. */
+
+#define ckd_add(r, a, b) ((bool) _GL_INT_ADD_WRAPV (a, b, r))
+#define ckd_sub(r, a, b) ((bool) _GL_INT_SUBTRACT_WRAPV (a, b, r))
+#define ckd_mul(r, a, b) ((bool) _GL_INT_MULTIPLY_WRAPV (a, b, r))
+
+#endif /* _GL_STDCKDINT_H */
diff --git a/gl/stdio-impl.h b/gl/stdio-impl.h
deleted file mode 100644
index ed32e69..0000000
--- a/gl/stdio-impl.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/* Implementation details of FILE streams.
- Copyright (C) 2007-2008, 2010-2022 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/>. */
-
-/* Many stdio implementations have the same logic and therefore can share
- the same implementation of stdio extension API, except that some fields
- have different naming conventions, or their access requires some casts. */
-
-/* Glibc 2.28 made _IO_UNBUFFERED and _IO_IN_BACKUP private. For now, work
- around this problem by defining them ourselves. FIXME: Do not rely on glibc
- internals. */
-#if defined _IO_EOF_SEEN
-# if !defined _IO_UNBUFFERED
-# define _IO_UNBUFFERED 0x2
-# endif
-# if !defined _IO_IN_BACKUP
-# define _IO_IN_BACKUP 0x100
-# endif
-#endif
-
-/* BSD stdio derived implementations. */
-
-#if defined __NetBSD__ /* NetBSD */
-/* Get __NetBSD_Version__. */
-# include <sys/param.h>
-#endif
-
-#include <errno.h> /* For detecting Plan9. */
-
-#if defined __sferror || defined __DragonFly__ || defined __ANDROID__
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
-
-# if defined __DragonFly__ /* DragonFly */
- /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/lib/libc/stdio/priv_stdio.h>. */
-# define fp_ ((struct { struct __FILE_public pub; \
- struct { unsigned char *_base; int _size; } _bf; \
- void *cookie; \
- void *_close; \
- void *_read; \
- void *_seek; \
- void *_write; \
- struct { unsigned char *_base; int _size; } _ub; \
- int _ur; \
- unsigned char _ubuf[3]; \
- unsigned char _nbuf[1]; \
- struct { unsigned char *_base; int _size; } _lb; \
- int _blksize; \
- fpos_t _offset; \
- /* More fields, not relevant here. */ \
- } *) fp)
- /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/include/stdio.h>. */
-# define _p pub._p
-# define _flags pub._flags
-# define _r pub._r
-# define _w pub._w
-# elif defined __ANDROID__ /* Android */
-# ifdef __LP64__
-# define _gl_flags_file_t int
-# else
-# define _gl_flags_file_t short
-# endif
- /* Up to this commit from 2015-10-12
- <https://android.googlesource.com/platform/bionic.git/+/f0141dfab10a4b332769d52fa76631a64741297a>
- the innards of FILE were public, and fp_ub could be defined like for OpenBSD,
- see <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/fileext.h>
- and <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/local.h>.
- After this commit, the innards of FILE are hidden. */
-# define fp_ ((struct { unsigned char *_p; \
- int _r; \
- int _w; \
- _gl_flags_file_t _flags; \
- _gl_flags_file_t _file; \
- struct { unsigned char *_base; size_t _size; } _bf; \
- int _lbfsize; \
- void *_cookie; \
- void *_close; \
- void *_read; \
- void *_seek; \
- void *_write; \
- struct { unsigned char *_base; size_t _size; } _ext; \
- unsigned char *_up; \
- int _ur; \
- unsigned char _ubuf[3]; \
- unsigned char _nbuf[1]; \
- struct { unsigned char *_base; size_t _size; } _lb; \
- int _blksize; \
- fpos_t _offset; \
- /* More fields, not relevant here. */ \
- } *) fp)
-# else
-# define fp_ fp
-# 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>
- 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
- {
- struct __sbuf _ub; /* ungetc buffer */
- /* More fields, not relevant here. */
- };
-# define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub
-# elif defined __ANDROID__ /* Android */
- struct __sfileext
- {
- struct { unsigned char *_base; size_t _size; } _ub; /* ungetc buffer */
- /* More fields, not relevant here. */
- };
-# define fp_ub ((struct __sfileext *) fp_->_ext._base)->_ub
-# else /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin */
-# define fp_ub fp_->_ub
-# endif
-
-# define HASUB(fp) (fp_ub._base != NULL)
-
-# if defined __ANDROID__ /* Android */
- /* Needed after this commit from 2016-01-25
- <https://android.googlesource.com/platform/bionic.git/+/e70e0e9267d069bf56a5078c99307e08a7280de7> */
-# ifndef __SEOF
-# define __SLBF 1
-# define __SNBF 2
-# define __SRD 4
-# define __SWR 8
-# define __SRW 0x10
-# define __SEOF 0x20
-# define __SERR 0x40
-# endif
-# ifndef __SOFF
-# define __SOFF 0x1000
-# endif
-# endif
-
-#endif
-
-
-/* SystemV derived implementations. */
-
-#ifdef __TANDEM /* NonStop Kernel */
-# ifndef _IOERR
-/* These values were determined by the program 'stdioext-flags' at
- <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>. */
-# define _IOERR 0x40
-# define _IOREAD 0x80
-# define _IOWRT 0x4
-# define _IORW 0x100
-# endif
-#endif
-
-#if defined _IOERR
-
-# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */
-# define fp_ ((struct { unsigned char *_ptr; \
- unsigned char *_base; \
- unsigned char *_end; \
- long _cnt; \
- int _file; \
- unsigned int _flag; \
- } *) fp)
-# elif defined __VMS /* OpenVMS */
-# define fp_ ((struct _iobuf *) fp)
-# else
-# define fp_ fp
-# endif
-
-# if defined _SCO_DS || (defined __SCO_VERSION__ || defined __sysv5__) /* OpenServer 5, OpenServer 6, UnixWare 7 */
-# define _cnt __cnt
-# define _ptr __ptr
-# define _base __base
-# define _flag __flag
-# endif
-
-#elif defined _WIN32 && ! defined __CYGWIN__ /* newer Windows with MSVC */
-
-/* <stdio.h> does not define the innards of FILE any more. */
-# define WINDOWS_OPAQUE_FILE
-
-struct _gl_real_FILE
-{
- /* Note: Compared to older Windows and to mingw, it has the fields
- _base and _cnt swapped. */
- unsigned char *_ptr;
- unsigned char *_base;
- int _cnt;
- int _flag;
- int _file;
- int _charbuf;
- int _bufsiz;
-};
-# define fp_ ((struct _gl_real_FILE *) fp)
-
-/* These values were determined by a program similar to the one at
- <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>. */
-# define _IOREAD 0x1
-# define _IOWRT 0x2
-# define _IORW 0x4
-# define _IOEOF 0x8
-# define _IOERR 0x10
-
-#endif
diff --git a/gl/sys-limits.h b/gl/sys-limits.h
deleted file mode 100644
index d154f0b..0000000
--- a/gl/sys-limits.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* System call limits
-
- Copyright 2018-2022 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/>. */
-
-#ifndef _GL_SYS_LIMITS_H
-#define _GL_SYS_LIMITS_H
-
-#include <limits.h>
-
-/* Maximum number of bytes to read or write in a single system call.
- This can be useful for system calls like sendfile on GNU/Linux,
- which do not handle more than MAX_RW_COUNT bytes correctly.
- The Linux kernel MAX_RW_COUNT is at least INT_MAX >> 20 << 20,
- where the 20 comes from the Hexagon port with 1 MiB pages; use that
- as an approximation, as the exact value may not be available to us.
-
- Using this also works around a serious Linux bug before 2.6.16; see
- <https://bugzilla.redhat.com/show_bug.cgi?id=612839>.
-
- Using this also works around a Tru64 5.1 bug, where attempting
- to read INT_MAX bytes fails with errno == EINVAL. See
- <https://lists.gnu.org/r/bug-gnu-utils/2002-04/msg00010.html>.
-
- Using this is likely to work around similar bugs in other operating
- systems. */
-
-enum { SYS_BUFSIZE_MAX = INT_MAX >> 20 << 20 };
-
-#endif
More information about the Commits
mailing list