diff options
author | Colin Watson <cjwatson@debian.org> | 2022-02-04 15:11:47 +0000 |
---|---|---|
committer | Colin Watson <cjwatson@debian.org> | 2022-02-04 15:11:47 +0000 |
commit | 828b489c68a5a022c106656cfdff19bb9b584eec (patch) | |
tree | 7225919cd6e445d94080fa108a1a6b05fb890cf7 /lib | |
parent | a2d4ffce13a855f29a63bac2099ebe0f5a4e50bd (diff) | |
parent | bfe34108bc20e9d75e3f08bfc8305e4f4cd632a9 (diff) |
Import man-db_2.10.0.orig.tar.xz
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Makefile.am | 11 | ||||
-rw-r--r-- | lib/Makefile.in | 832 | ||||
-rw-r--r-- | lib/README | 18 | ||||
-rw-r--r-- | lib/appendstr.c | 6 | ||||
-rw-r--r-- | lib/appendstr.h | 24 | ||||
-rw-r--r-- | lib/cleanup.c | 4 | ||||
-rw-r--r-- | lib/debug.c | 9 | ||||
-rw-r--r-- | lib/debug.h | 32 | ||||
-rw-r--r-- | lib/encodings.c | 189 | ||||
-rw-r--r-- | lib/encodings.h | 2 | ||||
-rw-r--r-- | lib/fatal.c | 48 | ||||
-rw-r--r-- | lib/fatal.h | 26 | ||||
-rw-r--r-- | lib/glcontainers.c | 5 | ||||
-rw-r--r-- | lib/glcontainers.h | 36 | ||||
-rw-r--r-- | lib/mp.h | 483 | ||||
-rw-r--r-- | lib/orderfiles.c | 13 | ||||
-rw-r--r-- | lib/pathsearch.c | 15 | ||||
-rw-r--r-- | lib/sandbox.c | 82 | ||||
-rw-r--r-- | lib/sandbox.h | 2 | ||||
-rw-r--r-- | lib/security.c | 25 | ||||
-rw-r--r-- | lib/tempfile.c | 4 | ||||
-rw-r--r-- | lib/tempfile.h | 24 | ||||
-rw-r--r-- | lib/util.c | 11 | ||||
-rw-r--r-- | lib/util.h | 31 | ||||
-rw-r--r-- | lib/wordfnmatch.c | 1 | ||||
-rw-r--r-- | lib/xregcomp.c | 7 |
26 files changed, 1321 insertions, 619 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am index e5bd626c..475fea04 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -25,24 +25,28 @@ dist_noinst_DATA = README AM_CFLAGS = $(WARN_CFLAGS) libman_la_CPPFLAGS = \ - -I$(top_builddir)/include \ + -I$(top_srcdir)/include \ -I$(top_srcdir)/gl/lib \ -I$(top_builddir)/gl/lib \ -DLOCALEDIR=\"$(localedir)\" \ - $(libpipeline_CFLAGS) \ $(libseccomp_CFLAGS) libman_la_SOURCES = \ appendstr.c \ + appendstr.h \ cleanup.c \ cleanup.h \ debug.c \ + debug.h \ encodings.c \ encodings.h \ + fatal.c \ + fatal.h \ glcontainers.c \ glcontainers.h \ linelength.c \ linelength.h \ + mp.h \ orderfiles.c \ orderfiles.h \ pathsearch.c \ @@ -52,7 +56,9 @@ libman_la_SOURCES = \ security.c \ security.h \ tempfile.c \ + tempfile.h \ util.c \ + util.h \ wordfnmatch.c \ wordfnmatch.h \ xregcomp.c \ @@ -64,5 +70,4 @@ libman_la_LIBADD = ../gl/lib/libgnu.la $(LTLIBOBJS) \ libman_la_LDFLAGS = \ -avoid-version -release $(VERSION) -rpath $(pkglibdir) \ -no-undefined \ - $(libpipeline_LIBS) \ $(libseccomp_LIBS) diff --git a/lib/Makefile.in b/lib/Makefile.in index 872757c6..3aa38d11 100644 --- a/lib/Makefile.in +++ b/lib/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.3 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -121,13 +121,14 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \ $(top_srcdir)/gl/m4/asm-underscore.m4 \ $(top_srcdir)/gl/m4/btowc.m4 \ $(top_srcdir)/gl/m4/builtin-expect.m4 \ + $(top_srcdir)/gl/m4/calloc.m4 \ $(top_srcdir)/gl/m4/canonicalize.m4 \ $(top_srcdir)/gl/m4/chdir-long.m4 $(top_srcdir)/gl/m4/chown.m4 \ $(top_srcdir)/gl/m4/clock_time.m4 $(top_srcdir)/gl/m4/close.m4 \ $(top_srcdir)/gl/m4/closedir.m4 $(top_srcdir)/gl/m4/codeset.m4 \ - $(top_srcdir)/gl/m4/ctype.m4 $(top_srcdir)/gl/m4/d-ino.m4 \ + $(top_srcdir)/gl/m4/ctype_h.m4 $(top_srcdir)/gl/m4/d-ino.m4 \ $(top_srcdir)/gl/m4/d-type.m4 $(top_srcdir)/gl/m4/dirent_h.m4 \ - $(top_srcdir)/gl/m4/dirfd.m4 $(top_srcdir)/gl/m4/dirname.m4 \ + $(top_srcdir)/gl/m4/dirfd.m4 \ $(top_srcdir)/gl/m4/double-slash-root.m4 \ $(top_srcdir)/gl/m4/dup.m4 $(top_srcdir)/gl/m4/dup2.m4 \ $(top_srcdir)/gl/m4/eealloc.m4 $(top_srcdir)/gl/m4/environ.m4 \ @@ -142,8 +143,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \ $(top_srcdir)/gl/m4/flexmember.m4 \ $(top_srcdir)/gl/m4/float_h.m4 $(top_srcdir)/gl/m4/flock.m4 \ $(top_srcdir)/gl/m4/fnmatch.m4 \ - $(top_srcdir)/gl/m4/fnmatch_h.m4 $(top_srcdir)/gl/m4/fstat.m4 \ - $(top_srcdir)/gl/m4/fstatat.m4 $(top_srcdir)/gl/m4/futimens.m4 \ + $(top_srcdir)/gl/m4/fnmatch_h.m4 $(top_srcdir)/gl/m4/free.m4 \ + $(top_srcdir)/gl/m4/fstat.m4 $(top_srcdir)/gl/m4/fstatat.m4 \ $(top_srcdir)/gl/m4/getcwd-abort-bug.m4 \ $(top_srcdir)/gl/m4/getcwd-path-max.m4 \ $(top_srcdir)/gl/m4/getcwd.m4 $(top_srcdir)/gl/m4/getdelim.m4 \ @@ -153,10 +154,10 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \ $(top_srcdir)/gl/m4/getopt.m4 \ $(top_srcdir)/gl/m4/getpagesize.m4 \ $(top_srcdir)/gl/m4/getprogname.m4 \ + $(top_srcdir)/gl/m4/getrandom.m4 \ $(top_srcdir)/gl/m4/gettext.m4 $(top_srcdir)/gl/m4/gettime.m4 \ $(top_srcdir)/gl/m4/gettimeofday.m4 \ - $(top_srcdir)/gl/m4/glibc21.m4 $(top_srcdir)/gl/m4/glob.m4 \ - $(top_srcdir)/gl/m4/glob_h.m4 \ + $(top_srcdir)/gl/m4/glob.m4 $(top_srcdir)/gl/m4/glob_h.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/host-cpu-c-abi.m4 \ @@ -178,10 +179,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \ $(top_srcdir)/gl/m4/locale-ja.m4 \ $(top_srcdir)/gl/m4/locale-zh.m4 \ $(top_srcdir)/gl/m4/locale_h.m4 \ - $(top_srcdir)/gl/m4/localeconv.m4 \ - $(top_srcdir)/gl/m4/localtime-buffer.m4 \ - $(top_srcdir)/gl/m4/lock.m4 $(top_srcdir)/gl/m4/lstat.m4 \ - $(top_srcdir)/gl/m4/ltoptions.m4 \ + $(top_srcdir)/gl/m4/localeconv.m4 $(top_srcdir)/gl/m4/lock.m4 \ + $(top_srcdir)/gl/m4/lstat.m4 $(top_srcdir)/gl/m4/ltoptions.m4 \ $(top_srcdir)/gl/m4/ltsugar.m4 \ $(top_srcdir)/gl/m4/ltversion.m4 \ $(top_srcdir)/gl/m4/lt~obsolete.m4 \ @@ -206,16 +205,19 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \ $(top_srcdir)/gl/m4/open-cloexec.m4 \ $(top_srcdir)/gl/m4/open-slash.m4 $(top_srcdir)/gl/m4/open.m4 \ $(top_srcdir)/gl/m4/openat.m4 $(top_srcdir)/gl/m4/opendir.m4 \ - $(top_srcdir)/gl/m4/pathmax.m4 $(top_srcdir)/gl/m4/po.m4 \ - $(top_srcdir)/gl/m4/printf.m4 $(top_srcdir)/gl/m4/progtest.m4 \ + $(top_srcdir)/gl/m4/pathmax.m4 $(top_srcdir)/gl/m4/pipe.m4 \ + $(top_srcdir)/gl/m4/po.m4 $(top_srcdir)/gl/m4/printf.m4 \ + $(top_srcdir)/gl/m4/progtest.m4 \ $(top_srcdir)/gl/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/gl/m4/raise.m4 $(top_srcdir)/gl/m4/rawmemchr.m4 \ $(top_srcdir)/gl/m4/readdir.m4 $(top_srcdir)/gl/m4/readlink.m4 \ - $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/regex.m4 \ - $(top_srcdir)/gl/m4/rename.m4 $(top_srcdir)/gl/m4/renameat.m4 \ + $(top_srcdir)/gl/m4/realloc.m4 \ + $(top_srcdir)/gl/m4/reallocarray.m4 \ + $(top_srcdir)/gl/m4/regex.m4 $(top_srcdir)/gl/m4/rename.m4 \ + $(top_srcdir)/gl/m4/renameat.m4 \ $(top_srcdir)/gl/m4/rewinddir.m4 $(top_srcdir)/gl/m4/rmdir.m4 \ - $(top_srcdir)/gl/m4/same.m4 $(top_srcdir)/gl/m4/save-cwd.m4 \ - $(top_srcdir)/gl/m4/select.m4 $(top_srcdir)/gl/m4/setenv.m4 \ + $(top_srcdir)/gl/m4/save-cwd.m4 $(top_srcdir)/gl/m4/select.m4 \ + $(top_srcdir)/gl/m4/setenv.m4 \ $(top_srcdir)/gl/m4/setlocale_null.m4 \ $(top_srcdir)/gl/m4/sigaction.m4 \ $(top_srcdir)/gl/m4/signal_h.m4 \ @@ -225,7 +227,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \ $(top_srcdir)/gl/m4/sockets.m4 $(top_srcdir)/gl/m4/socklen.m4 \ $(top_srcdir)/gl/m4/ssize_t.m4 \ $(top_srcdir)/gl/m4/stat-time.m4 $(top_srcdir)/gl/m4/stat.m4 \ - $(top_srcdir)/gl/m4/std-gnu11.m4 \ $(top_srcdir)/gl/m4/stdalign.m4 $(top_srcdir)/gl/m4/stdarg.m4 \ $(top_srcdir)/gl/m4/stdbool.m4 $(top_srcdir)/gl/m4/stddef_h.m4 \ $(top_srcdir)/gl/m4/stdint.m4 $(top_srcdir)/gl/m4/stdint_h.m4 \ @@ -240,6 +241,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \ $(top_srcdir)/gl/m4/strsep.m4 \ $(top_srcdir)/gl/m4/sys_file_h.m4 \ $(top_srcdir)/gl/m4/sys_ioctl_h.m4 \ + $(top_srcdir)/gl/m4/sys_random_h.m4 \ $(top_srcdir)/gl/m4/sys_select_h.m4 \ $(top_srcdir)/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/gl/m4/sys_stat_h.m4 \ @@ -267,6 +269,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/man-arg-automatic-create.m4 \ $(top_srcdir)/gl/m4/xalloc.m4 $(top_srcdir)/gl/m4/xgetcwd.m4 \ $(top_srcdir)/gl/m4/xsize.m4 $(top_srcdir)/gl/m4/xstrndup.m4 \ $(top_srcdir)/gl/m4/xvasprintf.m4 \ + $(top_srcdir)/gl/m4/year2038.m4 \ $(top_srcdir)/gl/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) @@ -307,7 +310,7 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)" LTLIBRARIES = $(pkglib_LTLIBRARIES) libman_la_DEPENDENCIES = ../gl/lib/libgnu.la $(LTLIBOBJS) am_libman_la_OBJECTS = libman_la-appendstr.lo libman_la-cleanup.lo \ - libman_la-debug.lo libman_la-encodings.lo \ + libman_la-debug.lo libman_la-encodings.lo libman_la-fatal.lo \ libman_la-glcontainers.lo libman_la-linelength.lo \ libman_la-orderfiles.lo libman_la-pathsearch.lo \ libman_la-sandbox.lo libman_la-security.lo \ @@ -340,6 +343,7 @@ am__depfiles_remade = ./$(DEPDIR)/libman_la-appendstr.Plo \ ./$(DEPDIR)/libman_la-cleanup.Plo \ ./$(DEPDIR)/libman_la-debug.Plo \ ./$(DEPDIR)/libman_la-encodings.Plo \ + ./$(DEPDIR)/libman_la-fatal.Plo \ ./$(DEPDIR)/libman_la-glcontainers.Plo \ ./$(DEPDIR)/libman_la-linelength.Plo \ ./$(DEPDIR)/libman_la-orderfiles.Plo \ @@ -394,8 +398,6 @@ am__define_uniq_tagged_files = \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -423,6 +425,8 @@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DBLIBS = @DBLIBS@ DBTYPE = @DBTYPE@ @@ -442,6 +446,7 @@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ @@ -449,319 +454,389 @@ FNMATCH_H = @FNMATCH_H@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ -GLIBC21 = @GLIBC21@ GLOB_H = @GLOB_H@ +GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ +GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ +GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ +GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ +GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ +GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ +GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ +GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ +GL_GNULIB_BIND = @GL_GNULIB_BIND@ +GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ +GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ +GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ +GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ +GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ +GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ +GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ +GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ +GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ +GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ +GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ +GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ +GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ +GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ +GL_GNULIB_DUP = @GL_GNULIB_DUP@ +GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ +GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ +GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ +GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ +GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ +GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ +GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ +GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ +GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ +GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ +GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ +GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ +GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ +GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ +GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ +GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ +GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ +GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ +GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ +GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ +GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ +GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ +GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ +GL_GNULIB_FFS = @GL_GNULIB_FFS@ +GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ +GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ +GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ +GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ +GL_GNULIB_FLOCK = @GL_GNULIB_FLOCK@ +GL_GNULIB_FNMATCH = @GL_GNULIB_FNMATCH@ +GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ +GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ +GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ +GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ +GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ +GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ +GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ +GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ +GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ +GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ +GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ +GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ +GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ +GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ +GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ +GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ +GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ +GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ +GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ +GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ +GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ +GL_GNULIB_GETC = @GL_GNULIB_GETC@ +GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ +GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ +GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ +GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ +GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ +GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ +GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ +GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ +GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ +GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ +GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ +GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ +GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ +GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ +GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ +GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ +GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ +GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@ +GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ +GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ +GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ +GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ +GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ +GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ +GL_GNULIB_GLOB = @GL_GNULIB_GLOB@ +GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ +GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ +GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ +GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ +GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ +GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ +GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ +GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ +GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ +GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ +GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ +GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ +GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ +GL_GNULIB_LINK = @GL_GNULIB_LINK@ +GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ +GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ +GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ +GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ +GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ +GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ +GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ +GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ +GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ +GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ +GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ +GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ +GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ +GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ +GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ +GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ +GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ +GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ +GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ +GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ +GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ +GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ +GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ +GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ +GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ +GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ +GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ +GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ +GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ +GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ +GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ +GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ +GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ +GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ +GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ +GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ +GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ +GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ +GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ +GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ +GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ +GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ +GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ +GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ +GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ +GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ +GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ +GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ +GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ +GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ +GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ +GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ +GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ +GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ +GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ +GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ +GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ +GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ +GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ +GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ +GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ +GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ +GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ +GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ +GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ +GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ +GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ +GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ +GL_GNULIB_MDA_UTIME = @GL_GNULIB_MDA_UTIME@ +GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ +GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ +GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ +GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ +GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ +GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ +GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ +GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ +GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ +GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ +GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ +GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ +GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ +GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ +GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ +GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ +GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ +GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ +GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ +GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ +GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ +GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ +GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ +GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ +GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ +GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ +GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ +GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ +GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ +GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ +GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ +GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ +GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ +GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ +GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ +GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ +GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ +GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ +GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ +GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ +GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ +GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ +GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ +GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ +GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ +GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ +GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ +GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ +GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ +GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ +GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ +GL_GNULIB_READ = @GL_GNULIB_READ@ +GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ +GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ +GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ +GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ +GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ +GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ +GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ +GL_GNULIB_RECV = @GL_GNULIB_RECV@ +GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ +GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ +GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ +GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ +GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ +GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ +GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ +GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ +GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ +GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ +GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ +GL_GNULIB_SEND = @GL_GNULIB_SEND@ +GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ +GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ +GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ +GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ +GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ +GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ +GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ +GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ +GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ +GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ +GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ +GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ +GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ +GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ +GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ +GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ +GL_GNULIB_STAT = @GL_GNULIB_STAT@ +GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ +GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ +GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ +GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ +GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ +GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ +GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ +GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ +GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ +GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ +GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ +GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ +GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ +GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ +GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ +GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ +GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ +GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ +GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ +GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ +GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ +GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ +GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ +GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ +GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ +GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ +GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ +GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ +GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ +GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ +GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ +GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ +GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ +GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ +GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ +GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ +GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ +GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ +GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ +GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ +GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ +GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ +GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ +GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ +GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ +GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ +GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ +GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ +GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ +GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ +GL_GNULIB_UTIME = @GL_GNULIB_UTIME@ +GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ +GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ +GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ +GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ +GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ +GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ +GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ +GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ +GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ +GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ +GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ +GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ +GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ +GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ +GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ +GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ +GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ +GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ +GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ +GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ +GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ +GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ +GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ +GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ +GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ +GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ +GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ +GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ +GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ +GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ +GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ +GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ +GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ +GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ +GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ +GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ +GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ +GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ +GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ +GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ +GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ +GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ +GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ +GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ +GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ +GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ +GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ +GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ +GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ +GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ +GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ -GNULIB_ACCEPT = @GNULIB_ACCEPT@ -GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ -GNULIB_ACCESS = @GNULIB_ACCESS@ -GNULIB_ALPHASORT = @GNULIB_ALPHASORT@ -GNULIB_ATOLL = @GNULIB_ATOLL@ -GNULIB_BIND = @GNULIB_BIND@ -GNULIB_BTOWC = @GNULIB_BTOWC@ -GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ -GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ -GNULIB_CHDIR = @GNULIB_CHDIR@ -GNULIB_CHOWN = @GNULIB_CHOWN@ -GNULIB_CLOSE = @GNULIB_CLOSE@ -GNULIB_CLOSEDIR = @GNULIB_CLOSEDIR@ -GNULIB_CONNECT = @GNULIB_CONNECT@ -GNULIB_COPY_FILE_RANGE = @GNULIB_COPY_FILE_RANGE@ -GNULIB_CREAT = @GNULIB_CREAT@ -GNULIB_CTIME = @GNULIB_CTIME@ -GNULIB_DIRFD = @GNULIB_DIRFD@ -GNULIB_DPRINTF = @GNULIB_DPRINTF@ -GNULIB_DUP = @GNULIB_DUP@ -GNULIB_DUP2 = @GNULIB_DUP2@ -GNULIB_DUP3 = @GNULIB_DUP3@ -GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ -GNULIB_ENVIRON = @GNULIB_ENVIRON@ -GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ -GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ -GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ -GNULIB_FCHDIR = @GNULIB_FCHDIR@ -GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ -GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ -GNULIB_FCLOSE = @GNULIB_FCLOSE@ -GNULIB_FCNTL = @GNULIB_FCNTL@ -GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ -GNULIB_FDOPEN = @GNULIB_FDOPEN@ -GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@ -GNULIB_FFLUSH = @GNULIB_FFLUSH@ -GNULIB_FFS = @GNULIB_FFS@ -GNULIB_FFSL = @GNULIB_FFSL@ -GNULIB_FFSLL = @GNULIB_FFSLL@ -GNULIB_FGETC = @GNULIB_FGETC@ -GNULIB_FGETS = @GNULIB_FGETS@ -GNULIB_FLOCK = @GNULIB_FLOCK@ -GNULIB_FNMATCH = @GNULIB_FNMATCH@ -GNULIB_FOPEN = @GNULIB_FOPEN@ -GNULIB_FPRINTF = @GNULIB_FPRINTF@ -GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ -GNULIB_FPURGE = @GNULIB_FPURGE@ -GNULIB_FPUTC = @GNULIB_FPUTC@ -GNULIB_FPUTS = @GNULIB_FPUTS@ -GNULIB_FREAD = @GNULIB_FREAD@ -GNULIB_FREOPEN = @GNULIB_FREOPEN@ -GNULIB_FSCANF = @GNULIB_FSCANF@ -GNULIB_FSEEK = @GNULIB_FSEEK@ -GNULIB_FSEEKO = @GNULIB_FSEEKO@ -GNULIB_FSTAT = @GNULIB_FSTAT@ -GNULIB_FSTATAT = @GNULIB_FSTATAT@ -GNULIB_FSYNC = @GNULIB_FSYNC@ -GNULIB_FTELL = @GNULIB_FTELL@ -GNULIB_FTELLO = @GNULIB_FTELLO@ -GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ -GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ -GNULIB_FWRITE = @GNULIB_FWRITE@ -GNULIB_GETC = @GNULIB_GETC@ -GNULIB_GETCHAR = @GNULIB_GETCHAR@ -GNULIB_GETCWD = @GNULIB_GETCWD@ -GNULIB_GETDELIM = @GNULIB_GETDELIM@ -GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ -GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ -GNULIB_GETENTROPY = @GNULIB_GETENTROPY@ -GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ -GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ -GNULIB_GETLINE = @GNULIB_GETLINE@ -GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ -GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ -GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ -GNULIB_GETOPT_POSIX = @GNULIB_GETOPT_POSIX@ -GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ -GNULIB_GETPASS = @GNULIB_GETPASS@ -GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ -GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ -GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ -GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ -GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ -GNULIB_GLOB = @GNULIB_GLOB@ -GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ -GNULIB_GRANTPT = @GNULIB_GRANTPT@ -GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ -GNULIB_IMAXABS = @GNULIB_IMAXABS@ -GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ -GNULIB_IOCTL = @GNULIB_IOCTL@ -GNULIB_ISATTY = @GNULIB_ISATTY@ -GNULIB_ISBLANK = @GNULIB_ISBLANK@ -GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ -GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ -GNULIB_ISWDIGIT = @GNULIB_ISWDIGIT@ -GNULIB_ISWXDIGIT = @GNULIB_ISWXDIGIT@ -GNULIB_LCHMOD = @GNULIB_LCHMOD@ -GNULIB_LCHOWN = @GNULIB_LCHOWN@ -GNULIB_LINK = @GNULIB_LINK@ -GNULIB_LINKAT = @GNULIB_LINKAT@ -GNULIB_LISTEN = @GNULIB_LISTEN@ -GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ -GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ -GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ -GNULIB_LSEEK = @GNULIB_LSEEK@ -GNULIB_LSTAT = @GNULIB_LSTAT@ -GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ -GNULIB_MBRLEN = @GNULIB_MBRLEN@ -GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ -GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ -GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ -GNULIB_MBSCHR = @GNULIB_MBSCHR@ -GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ -GNULIB_MBSINIT = @GNULIB_MBSINIT@ -GNULIB_MBSLEN = @GNULIB_MBSLEN@ -GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ -GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ -GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ -GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ -GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ -GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ -GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ -GNULIB_MBSSEP = @GNULIB_MBSSEP@ -GNULIB_MBSSPN = @GNULIB_MBSSPN@ -GNULIB_MBSSTR = @GNULIB_MBSSTR@ -GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ -GNULIB_MBTOWC = @GNULIB_MBTOWC@ -GNULIB_MEMCHR = @GNULIB_MEMCHR@ -GNULIB_MEMMEM = @GNULIB_MEMMEM@ -GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ -GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ -GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ -GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ -GNULIB_MKFIFO = @GNULIB_MKFIFO@ -GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ -GNULIB_MKNOD = @GNULIB_MKNOD@ -GNULIB_MKNODAT = @GNULIB_MKNODAT@ -GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ -GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ -GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ -GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ -GNULIB_MKTIME = @GNULIB_MKTIME@ -GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ -GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ -GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ -GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ -GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ -GNULIB_OPEN = @GNULIB_OPEN@ -GNULIB_OPENAT = @GNULIB_OPENAT@ -GNULIB_OPENDIR = @GNULIB_OPENDIR@ -GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ -GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ -GNULIB_PCLOSE = @GNULIB_PCLOSE@ -GNULIB_PERROR = @GNULIB_PERROR@ -GNULIB_PIPE = @GNULIB_PIPE@ -GNULIB_PIPE2 = @GNULIB_PIPE2@ -GNULIB_POPEN = @GNULIB_POPEN@ -GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ -GNULIB_PREAD = @GNULIB_PREAD@ -GNULIB_PRINTF = @GNULIB_PRINTF@ -GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ -GNULIB_PSELECT = @GNULIB_PSELECT@ -GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ -GNULIB_PTSNAME = @GNULIB_PTSNAME@ -GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ -GNULIB_PUTC = @GNULIB_PUTC@ -GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ -GNULIB_PUTENV = @GNULIB_PUTENV@ -GNULIB_PUTS = @GNULIB_PUTS@ -GNULIB_PWRITE = @GNULIB_PWRITE@ -GNULIB_QSORT_R = @GNULIB_QSORT_R@ -GNULIB_RAISE = @GNULIB_RAISE@ -GNULIB_RANDOM = @GNULIB_RANDOM@ -GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ -GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ -GNULIB_READ = @GNULIB_READ@ -GNULIB_READDIR = @GNULIB_READDIR@ -GNULIB_READLINK = @GNULIB_READLINK@ -GNULIB_READLINKAT = @GNULIB_READLINKAT@ -GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ -GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ -GNULIB_REALPATH = @GNULIB_REALPATH@ -GNULIB_RECV = @GNULIB_RECV@ -GNULIB_RECVFROM = @GNULIB_RECVFROM@ -GNULIB_REMOVE = @GNULIB_REMOVE@ -GNULIB_RENAME = @GNULIB_RENAME@ -GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ -GNULIB_REWINDDIR = @GNULIB_REWINDDIR@ -GNULIB_RMDIR = @GNULIB_RMDIR@ -GNULIB_RPMATCH = @GNULIB_RPMATCH@ -GNULIB_SCANDIR = @GNULIB_SCANDIR@ -GNULIB_SCANF = @GNULIB_SCANF@ -GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ -GNULIB_SELECT = @GNULIB_SELECT@ -GNULIB_SEND = @GNULIB_SEND@ -GNULIB_SENDTO = @GNULIB_SENDTO@ -GNULIB_SETENV = @GNULIB_SETENV@ -GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ -GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ -GNULIB_SETLOCALE_NULL = @GNULIB_SETLOCALE_NULL@ -GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ -GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ -GNULIB_SIGACTION = @GNULIB_SIGACTION@ -GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ -GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ -GNULIB_SLEEP = @GNULIB_SLEEP@ -GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ -GNULIB_SOCKET = @GNULIB_SOCKET@ -GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ -GNULIB_STAT = @GNULIB_STAT@ -GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ -GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ -GNULIB_STPCPY = @GNULIB_STPCPY@ -GNULIB_STPNCPY = @GNULIB_STPNCPY@ -GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ -GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ -GNULIB_STRDUP = @GNULIB_STRDUP@ -GNULIB_STRERROR = @GNULIB_STRERROR@ -GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ -GNULIB_STRFTIME = @GNULIB_STRFTIME@ -GNULIB_STRNCAT = @GNULIB_STRNCAT@ -GNULIB_STRNDUP = @GNULIB_STRNDUP@ -GNULIB_STRNLEN = @GNULIB_STRNLEN@ -GNULIB_STRPBRK = @GNULIB_STRPBRK@ -GNULIB_STRPTIME = @GNULIB_STRPTIME@ -GNULIB_STRSEP = @GNULIB_STRSEP@ -GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ -GNULIB_STRSTR = @GNULIB_STRSTR@ -GNULIB_STRTOD = @GNULIB_STRTOD@ -GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ -GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ -GNULIB_STRTOLD = @GNULIB_STRTOLD@ -GNULIB_STRTOLL = @GNULIB_STRTOLL@ -GNULIB_STRTOULL = @GNULIB_STRTOULL@ -GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ -GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ -GNULIB_SYMLINK = @GNULIB_SYMLINK@ -GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ -GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ -GNULIB_TIMEGM = @GNULIB_TIMEGM@ -GNULIB_TIME_R = @GNULIB_TIME_R@ -GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ -GNULIB_TMPFILE = @GNULIB_TMPFILE@ -GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ -GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ -GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ -GNULIB_TZSET = @GNULIB_TZSET@ -GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ -GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ -GNULIB_UNLINK = @GNULIB_UNLINK@ -GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ -GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ -GNULIB_UNSETENV = @GNULIB_UNSETENV@ -GNULIB_USLEEP = @GNULIB_USLEEP@ -GNULIB_UTIME = @GNULIB_UTIME@ -GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ -GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ -GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ -GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ -GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ -GNULIB_VFSCANF = @GNULIB_VFSCANF@ -GNULIB_VPRINTF = @GNULIB_VPRINTF@ -GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ -GNULIB_VSCANF = @GNULIB_VSCANF@ -GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ -GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ -GNULIB_WCPCPY = @GNULIB_WCPCPY@ -GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ -GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ -GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ -GNULIB_WCSCAT = @GNULIB_WCSCAT@ -GNULIB_WCSCHR = @GNULIB_WCSCHR@ -GNULIB_WCSCMP = @GNULIB_WCSCMP@ -GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ -GNULIB_WCSCPY = @GNULIB_WCSCPY@ -GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ -GNULIB_WCSDUP = @GNULIB_WCSDUP@ -GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ -GNULIB_WCSLEN = @GNULIB_WCSLEN@ -GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ -GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ -GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ -GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ -GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ -GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ -GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ -GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ -GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ -GNULIB_WCSSPN = @GNULIB_WCSSPN@ -GNULIB_WCSSTR = @GNULIB_WCSSTR@ -GNULIB_WCSTOK = @GNULIB_WCSTOK@ -GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ -GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ -GNULIB_WCTOB = @GNULIB_WCTOB@ -GNULIB_WCTOMB = @GNULIB_WCTOMB@ -GNULIB_WCTRANS = @GNULIB_WCTRANS@ -GNULIB_WCTYPE = @GNULIB_WCTYPE@ -GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ -GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ -GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ -GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ -GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ -GNULIB_WMEMPCPY = @GNULIB_WMEMPCPY@ -GNULIB_WMEMSET = @GNULIB_WMEMSET@ -GNULIB_WRITE = @GNULIB_WRITE@ -GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ +HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ATOLL = @HAVE_ATOLL@ @@ -773,13 +848,18 @@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ +HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ +HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ @@ -812,14 +892,15 @@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ -HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ @@ -850,8 +931,10 @@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GLOB = @HAVE_GLOB@ HAVE_GLOB_H = @HAVE_GLOB_H@ HAVE_GLOB_PATTERN_P = @HAVE_GLOB_PATTERN_P@ @@ -882,7 +965,6 @@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ -HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ @@ -905,6 +987,7 @@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_PREAD = @HAVE_PREAD@ @@ -933,7 +1016,9 @@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ +HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ @@ -947,13 +1032,16 @@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ @@ -971,15 +1059,17 @@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ +HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ -HAVE_TZSET = @HAVE_TZSET@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ @@ -1065,6 +1155,7 @@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ LIB_GETLOGIN = @LIB_GETLOGIN@ +LIB_GETRANDOM = @LIB_GETRANDOM@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ @@ -1077,6 +1168,7 @@ LINGUAS = @LINGUAS@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ @@ -1088,7 +1180,6 @@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANDIR_LAYOUT = @MANDIR_LAYOUT@ MANIFEST_TOOL = @MANIFEST_TOOL@ @@ -1120,6 +1211,7 @@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ @@ -1154,6 +1246,7 @@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ +NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ @@ -1187,17 +1280,19 @@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ -PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ +REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_BTOWC = @REPLACE_BTOWC@ -REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ +REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ +REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ @@ -1205,6 +1300,13 @@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXECL = @REPLACE_EXECL@ +REPLACE_EXECLE = @REPLACE_EXECLE@ +REPLACE_EXECLP = @REPLACE_EXECLP@ +REPLACE_EXECV = @REPLACE_EXECV@ +REPLACE_EXECVE = @REPLACE_EXECVE@ +REPLACE_EXECVP = @REPLACE_EXECVP@ +REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ @@ -1213,10 +1315,13 @@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FNMATCH = @REPLACE_FNMATCH@ REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ @@ -1236,6 +1341,8 @@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ +REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GLOB = @REPLACE_GLOB@ REPLACE_GLOB_PATTERN_P = @REPLACE_GLOB_PATTERN_P@ @@ -1256,7 +1363,8 @@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ -REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ +REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ @@ -1268,7 +1376,9 @@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ @@ -1281,6 +1391,7 @@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ @@ -1296,7 +1407,9 @@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ -REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ +REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ +REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ @@ -1317,6 +1430,7 @@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ @@ -1327,7 +1441,11 @@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ +REPLACE_STRTOLL = @REPLACE_STRTOLL@ +REPLACE_STRTOUL = @REPLACE_STRTOUL@ +REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ @@ -1378,6 +1496,7 @@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_U SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TBL_X_FORMAT = @TBL_X_FORMAT@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ TRANS_APROPOS = @TRANS_APROPOS@ TRANS_APROPOS_UPPER = @TRANS_APROPOS_UPPER@ TRANS_CATMAN = @TRANS_CATMAN@ @@ -1407,7 +1526,6 @@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ -UTIME_H = @UTIME_H@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ @@ -1439,13 +1557,11 @@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ -bunzip2 = @bunzip2@ bzip2 = @bzip2@ cache_top_owner = @cache_top_owner@ cat = @cat@ col = @col@ compress = @compress@ -compress_ext = @compress_ext@ compressor = @compressor@ config_file = @config_file@ config_file_basename = @config_file_basename@ @@ -1457,14 +1573,15 @@ docdir = @docdir@ dvidir = @dvidir@ eqn = @eqn@ exec_prefix = @exec_prefix@ +gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ grap = @grap@ grep = @grep@ -gunzip = @gunzip@ gzip = @gzip@ host = @host@ host_alias = @host_alias@ @@ -1518,11 +1635,6 @@ top_srcdir = @top_srcdir@ tr = @tr@ troff = @troff@ troff_as_troff_input = @troff_as_troff_input@ -uncompress = @uncompress@ -unlzip = @unlzip@ -unlzma = @unlzma@ -unxz = @unxz@ -unzstd = @unzstd@ vgrind = @vgrind@ xz = @xz@ zstd = @zstd@ @@ -1530,24 +1642,28 @@ pkglib_LTLIBRARIES = libman.la dist_noinst_DATA = README AM_CFLAGS = $(WARN_CFLAGS) libman_la_CPPFLAGS = \ - -I$(top_builddir)/include \ + -I$(top_srcdir)/include \ -I$(top_srcdir)/gl/lib \ -I$(top_builddir)/gl/lib \ -DLOCALEDIR=\"$(localedir)\" \ - $(libpipeline_CFLAGS) \ $(libseccomp_CFLAGS) libman_la_SOURCES = \ appendstr.c \ + appendstr.h \ cleanup.c \ cleanup.h \ debug.c \ + debug.h \ encodings.c \ encodings.h \ + fatal.c \ + fatal.h \ glcontainers.c \ glcontainers.h \ linelength.c \ linelength.h \ + mp.h \ orderfiles.c \ orderfiles.h \ pathsearch.c \ @@ -1557,7 +1673,9 @@ libman_la_SOURCES = \ security.c \ security.h \ tempfile.c \ + tempfile.h \ util.c \ + util.h \ wordfnmatch.c \ wordfnmatch.h \ xregcomp.c \ @@ -1569,14 +1687,13 @@ libman_la_LIBADD = ../gl/lib/libgnu.la $(LTLIBOBJS) \ libman_la_LDFLAGS = \ -avoid-version -release $(VERSION) -rpath $(pkglibdir) \ -no-undefined \ - $(libpipeline_LIBS) \ $(libseccomp_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -1600,9 +1717,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +$(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): @@ -1654,6 +1771,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-cleanup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-debug.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-encodings.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-fatal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-glcontainers.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-linelength.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libman_la-orderfiles.Plo@am__quote@ # am--include-marker @@ -1720,6 +1838,13 @@ libman_la-encodings.lo: encodings.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libman_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libman_la-encodings.lo `test -f 'encodings.c' || echo '$(srcdir)/'`encodings.c +libman_la-fatal.lo: fatal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libman_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libman_la-fatal.lo -MD -MP -MF $(DEPDIR)/libman_la-fatal.Tpo -c -o libman_la-fatal.lo `test -f 'fatal.c' || echo '$(srcdir)/'`fatal.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libman_la-fatal.Tpo $(DEPDIR)/libman_la-fatal.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fatal.c' object='libman_la-fatal.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libman_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libman_la-fatal.lo `test -f 'fatal.c' || echo '$(srcdir)/'`fatal.c + libman_la-glcontainers.lo: glcontainers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libman_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libman_la-glcontainers.lo -MD -MP -MF $(DEPDIR)/libman_la-glcontainers.Tpo -c -o libman_la-glcontainers.lo `test -f 'glcontainers.c' || echo '$(srcdir)/'`glcontainers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libman_la-glcontainers.Tpo $(DEPDIR)/libman_la-glcontainers.Plo @@ -1847,7 +1972,6 @@ cscopelist-am: $(am__tagged_files) distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am @@ -1928,6 +2052,7 @@ distclean: distclean-am -rm -f ./$(DEPDIR)/libman_la-cleanup.Plo -rm -f ./$(DEPDIR)/libman_la-debug.Plo -rm -f ./$(DEPDIR)/libman_la-encodings.Plo + -rm -f ./$(DEPDIR)/libman_la-fatal.Plo -rm -f ./$(DEPDIR)/libman_la-glcontainers.Plo -rm -f ./$(DEPDIR)/libman_la-linelength.Plo -rm -f ./$(DEPDIR)/libman_la-orderfiles.Plo @@ -1987,6 +2112,7 @@ maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libman_la-cleanup.Plo -rm -f ./$(DEPDIR)/libman_la-debug.Plo -rm -f ./$(DEPDIR)/libman_la-encodings.Plo + -rm -f ./$(DEPDIR)/libman_la-fatal.Plo -rm -f ./$(DEPDIR)/libman_la-glcontainers.Plo -rm -f ./$(DEPDIR)/libman_la-linelength.Plo -rm -f ./$(DEPDIR)/libman_la-orderfiles.Plo @@ -1,21 +1,21 @@ -These library source files have various authors but are all covered by -either the GNU General Public License or the GNU Lesser General Public -License, and are freely distributable under their terms and conditions. +These library source files have various authors and specific licenses, +but may all be used as part of a complete work that is distributed under +the terms of the GNU General Public License version 2 or later. -See the files ../docs/COPYING and ../docs/COPYING.LIB for relevant -information. +See the files ../COPYING and ../COPYING.LIB for relevant information. -appendstr.c author - Markus Armbruster +appendstr.* author - Markus Armbruster cleanup.* author - Markus Armbruster, Colin Watson -debug.c author - Colin Watson +debug.* author - Colin Watson encodings.* author - Colin Watson glcontainers.* author - Colin Watson linelength.* author - Martin Schulze, Jon Tombs, Colin Watson +mp.h author - Simon Tatham orderfiles.* author - Colin Watson pathsearch.* author - Colin Watson sandbox.* author - Colin Watson security.* author - John W. Eaton, Wilf., Colin Watson -tempfile.c author - Colin Watson -util.c author - John W. Eaton, Wilf., Colin Watson +tempfile.* author - Colin Watson +util.* author - John W. Eaton, Wilf., Colin Watson wordfnmatch.* author - Colin Watson xregcomp.* author - Colin Watson diff --git a/lib/appendstr.c b/lib/appendstr.c index ef07ce88..21cdae1f 100644 --- a/lib/appendstr.c +++ b/lib/appendstr.c @@ -23,9 +23,13 @@ #include <string.h> #include <stdarg.h> +#include "xalloc.h" + #include "manconfig.h" -/* append strings to first argument, which is realloced to the correct size +#include "appendstr.h" + +/* append strings to first argument, which is realloced to the correct size first arg may be NULL */ char *appendstr (char *str, ...) { diff --git a/lib/appendstr.h b/lib/appendstr.h new file mode 100644 index 00000000..30b18b81 --- /dev/null +++ b/lib/appendstr.h @@ -0,0 +1,24 @@ +/* appendstr.h -- interface to appending to a dynamically allocated string + * + * Copyright (C) 1994 Markus Armbruster + * Copyright (C) 2022 Colin Watson + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Library Public License + * as published by the Free Software Foundation; either version 2, 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING.LIB. If not, write + * to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA + * 02139, USA. + */ + +#include "attribute.h" + +NODISCARD extern char *appendstr (char *, ...) ATTRIBUTE_SENTINEL (); diff --git a/lib/cleanup.c b/lib/cleanup.c index cf8aec1c..6c7c18ae 100644 --- a/lib/cleanup.c +++ b/lib/cleanup.c @@ -30,6 +30,8 @@ #include <unistd.h> #include <string.h> +#include "xalloc.h" + #include "manconfig.h" /* for FATAL */ #include "cleanup.h" @@ -215,7 +217,7 @@ push_cleanup (cleanup_fun fun, void *arg, int sigsafe) } else { new_stack = xnmalloc (nslots+1, sizeof (slot)); } - + if (!new_stack) return -1; stack = new_stack; ++nslots; diff --git a/lib/debug.c b/lib/debug.c index 53cefe9d..d55d8105 100644 --- a/lib/debug.c +++ b/lib/debug.c @@ -1,5 +1,6 @@ /* * debug.c: debugging messages + * * Copyright (C) 2007 Colin Watson. * * This file is part of man-db. @@ -30,8 +31,12 @@ #include <string.h> #include <errno.h> +#include "attribute.h" + #include "manconfig.h" +#include "debug.h" + bool debug_level = false; void init_debug (void) @@ -41,8 +46,8 @@ void init_debug (void) debug_level = true; } -static void ATTRIBUTE_FORMAT_PRINTF (1, 0) vdebug (const char *message, - va_list args) +static void ATTRIBUTE_FORMAT ((__printf__, 1, 0)) vdebug (const char *message, + va_list args) { if (debug_level) vfprintf (stderr, message, args); diff --git a/lib/debug.h b/lib/debug.h new file mode 100644 index 00000000..1421eea0 --- /dev/null +++ b/lib/debug.h @@ -0,0 +1,32 @@ +/* + * debug.h: interface to debugging messages + * + * Copyright (C) 2007-2022 Colin Watson. + * + * This file is part of man-db. + * + * man-db is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * man-db 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with man-db; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <stdbool.h> + +#include "attribute.h" + +extern bool debug_level; /* shows whether -d issued */ +extern void init_debug (void); +extern void debug (const char *message, ...) + ATTRIBUTE_FORMAT ((__printf__, 1, 2)); +extern void debug_error (const char *message, ...) + ATTRIBUTE_FORMAT ((__printf__, 1, 2)); diff --git a/lib/encodings.c b/lib/encodings.c index e8ad3381..0db5b8c0 100644 --- a/lib/encodings.c +++ b/lib/encodings.c @@ -29,19 +29,22 @@ #include <string.h> #include <stdlib.h> #include <unistd.h> -#include <assert.h> +#include <locale.h> +#include <ctype.h> +#include "attribute.h" #include "gettext.h" #include "localcharset.h" -#include <locale.h> -#include <ctype.h> +#include "xalloc.h" +#include "xstrndup.h" #include "manconfig.h" -#include "pathsearch.h" #include "pipeline.h" +#include "debug.h" #include "encodings.h" +#include "pathsearch.h" /* Due to historical limitations in groff (which may be removed in the @@ -323,59 +326,6 @@ static struct less_charset_entry less_charset_table[] = { static const char fallback_less_charset[] = "iso8859"; -/* Encoding conversions from groff-1.20/src/preproc/preconv/preconv.cpp. - * I've only included those not already recognised by GNU libiconv. - */ -struct conversion_entry { - const char *from; - const char *to; -}; - -static struct conversion_entry conversion_table[] = { - { "chinese-big5", "Big5" }, - { "chinese-euc", "GB2312" }, - { "chinese-iso-8bit", "GB2312" }, - { "cn-gb-2312", "GB2312" }, - { "cp878", "KOI8-R" }, - { "cyrillic-iso-8bit", "ISO-8859-5" }, - { "cyrillic-koi8", "KOI8-R" }, - { "euc-china", "GB2312" }, - { "euc-japan", "EUC-JP" }, - { "euc-japan-1990", "EUC-JP" }, - { "euc-kr", "EUC-KR" }, - { "greek-iso-8bit", "ISO-8859-7" }, - { "iso-latin-1", "ISO-8859-1" }, - { "iso-latin-2", "ISO-8859-2" }, - { "iso-latin-5", "ISO-8859-9" }, - { "iso-latin-7", "ISO-8859-13" }, - { "iso-latin-9", "ISO-8859-15" }, - { "japanese-iso-8bit", "EUC-JP" }, - { "japanese-euc", "EUC-JP" }, - { "jis8", "EUC-JP" }, - { "korean-euc", "EUC-KR" }, - { "korean-iso-8bit", "EUC-KR" }, - { "latin-0", "ISO-8859-15" }, - { "latin-1", "ISO-8859-1" }, - { "latin-2", "ISO-8859-2" }, - { "latin-5", "ISO-8859-9" }, - { "latin-7", "ISO-8859-13" }, - { "mule-utf-16", "UTF-16" }, - { "mule-utf-16be", "UTF-16BE" }, - { "mule-utf-16-be", "UTF-16BE" }, - { "mule-utf-16be-with-signature", "UTF-16" }, - { "mule-utf-16le", "UTF-16LE" }, - { "mule-utf-16-le", "UTF-16LE" }, - { "mule-utf-16le-with-signature", "UTF-16" }, - { "mule-utf-8", "UTF-8" }, - { "utf-16-be", "UTF-16BE" }, - { "utf-16be-with-signature", "UTF-16" }, - { "utf-16-be-with-signature", "UTF-16" }, - { "utf-16-le", "UTF-16LE" }, - { "utf-16le-with-signature", "UTF-16" }, - { "utf-16-le-with-signature", "UTF-16" }, - { NULL, NULL } -}; - const char *groff_preconv = NULL; /* Is the groff "preconv" helper available? If so, return its name. @@ -409,7 +359,7 @@ const char *get_groff_preconv (void) * * The caller should free the returned string when it is finished with it. */ -char * _GL_ATTRIBUTE_MALLOC get_page_encoding (const char *lang) +char * ATTRIBUTE_MALLOC get_page_encoding (const char *lang) { const struct directory_entry *entry; const char *dot; @@ -522,7 +472,8 @@ const char *get_source_encoding (const char *lang) return fallback_source_encoding; } -const char *get_canonical_charset_name (const char *charset) +const char * ATTRIBUTE_NONNULL ((1)) ATTRIBUTE_RETURNS_NONNULL + get_canonical_charset_name (const char *charset) { const struct charset_alias_entry *entry; char *charset_upper = xstrdup (charset); @@ -542,7 +493,7 @@ const char *get_canonical_charset_name (const char *charset) } /* Return the current locale's character set. */ -const char *get_locale_charset (void) +const char * ATTRIBUTE_RETURNS_NONNULL get_locale_charset (void) { const char *charset; char *saved_locale; @@ -562,10 +513,9 @@ const char *get_locale_charset (void) setlocale (LC_CTYPE, saved_locale); free (saved_locale); - if (charset && *charset) - return get_canonical_charset_name (charset); - else - return NULL; + if (!charset || !*charset) + charset = "ANSI_X3.4-1968"; + return get_canonical_charset_name (charset); } /* Find a locale with this character set. This is a non-portable operation, @@ -724,7 +674,7 @@ const char *get_default_device (const char *charset_from_locale, } /* Is this a known *roff device name? */ -bool _GL_ATTRIBUTE_PURE is_roff_device (const char *device) +bool ATTRIBUTE_PURE is_roff_device (const char *device) { const struct device_entry *entry; @@ -784,7 +734,7 @@ const char *get_roff_encoding (const char *device, const char *source_encoding) /* Find the output encoding that this device will produce, or NULL if it * will simply pass through the input encoding. */ -const char * _GL_ATTRIBUTE_PURE get_output_encoding (const char *device) +const char * ATTRIBUTE_PURE get_output_encoding (const char *device) { const struct device_entry *entry; @@ -796,8 +746,7 @@ const char * _GL_ATTRIBUTE_PURE get_output_encoding (const char *device) } /* Return the value of LESSCHARSET appropriate for this locale. */ -const char * _GL_ATTRIBUTE_PURE get_less_charset ( - const char *charset_from_locale) +const char * ATTRIBUTE_PURE get_less_charset (const char *charset_from_locale) { const struct less_charset_entry *entry; @@ -815,8 +764,7 @@ const char * _GL_ATTRIBUTE_PURE get_less_charset ( /* Return the value of JLESSCHARSET appropriate for this locale. May return * NULL. */ -const char * _GL_ATTRIBUTE_PURE get_jless_charset ( - const char *charset_from_locale) +const char * ATTRIBUTE_PURE get_jless_charset (const char *charset_from_locale) { const struct less_charset_entry *entry; @@ -830,104 +778,3 @@ const char * _GL_ATTRIBUTE_PURE get_jless_charset ( return NULL; } - -/* Convert Emacs-style coding tags to ones that libiconv understands. */ -static char *convert_encoding (char *encoding) -{ - size_t encoding_len = strlen (encoding); - const struct conversion_entry *entry; - -#define STRIP(s, l) do { \ - if (encoding_len > (l) && \ - !strcasecmp (encoding + encoding_len - (l), (s))) \ - encoding[encoding_len - (l)] = '\0'; \ -} while (0) - - STRIP ("-dos", 4); - STRIP ("-mac", 4); - STRIP ("-unix", 5); - -#undef STRIP - - for (entry = conversion_table; entry->from; ++entry) - if (!strcasecmp (entry->from, encoding)) { - free (encoding); - return xstrdup (entry->to); - } - - return encoding; -} - -/* Inspect the first line of data in a pipeline for preprocessor encoding - * declarations. - * - * If to_encoding and modified_line are both non-NULL, and if the encoding - * declaration in the input does not match to_encoding, then return an - * encoding declaration line modified to refer to the given to_encoding in - * *modified_line. The caller should free *modified_line. - */ -char *check_preprocessor_encoding (pipeline *p, const char *to_encoding, - char **modified_line) -{ - char *pp_encoding = NULL; - const char *line = pipeline_peekline (p); - const char *directive = NULL, *directive_end, *pp_search; - size_t pp_encoding_len = 0; - - /* Some people use .\" incorrectly. We allow it for encoding - * declarations but not for preprocessor declarations. - */ - if (line && - (STRNEQ (line, PP_COOKIE, 4) || STRNEQ (line, ".\\\" ", 4))) { - const char *newline = strchr (line, '\n'); - - directive = line + 4; - directive_end = newline ? newline : strchr (directive, '\0'); - pp_search = memmem (directive, directive_end - directive, - "-*-", 3); - } - - if (directive && pp_search) { - pp_search += 3; - while (pp_search && pp_search < directive_end && *pp_search) { - while (*pp_search == ' ') - ++pp_search; - if (STRNEQ (pp_search, "coding:", 7)) { - const char *pp_encoding_allow; - pp_search += 7; - while (*pp_search == ' ') - ++pp_search; - pp_encoding_allow = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz" - "0123456789-_/:.()"; - pp_encoding_len = strspn (pp_search, - pp_encoding_allow); - pp_encoding = xstrndup (pp_search, - pp_encoding_len); - pp_encoding = convert_encoding (pp_encoding); - debug ("preprocessor encoding: %s\n", - pp_encoding); - break; - } else { - pp_search = memchr (pp_search, ';', - directive_end - pp_search); - if (pp_search) - ++pp_search; - } - } - } - - if (to_encoding && modified_line && - pp_encoding && strcasecmp (pp_encoding, to_encoding)) { - assert (directive_end); - assert (pp_search); - *modified_line = xasprintf - ("%.*s%s%.*s\n", - (int) (pp_search - line), line, - to_encoding, - (int) (directive_end - (pp_search + pp_encoding_len)), - pp_search + pp_encoding_len); - } - - return pp_encoding; -} diff --git a/lib/encodings.h b/lib/encodings.h index 85346484..6de48f72 100644 --- a/lib/encodings.h +++ b/lib/encodings.h @@ -36,5 +36,3 @@ const char *get_roff_encoding (const char *device, const char *get_output_encoding (const char *device); const char *get_less_charset (const char *locale_charset); const char *get_jless_charset (const char *locale_charset); -char *check_preprocessor_encoding (struct pipeline *p, const char *to_code, - char **modified_line); diff --git a/lib/fatal.c b/lib/fatal.c new file mode 100644 index 00000000..b2b78954 --- /dev/null +++ b/lib/fatal.c @@ -0,0 +1,48 @@ +/* + * fatal.c: fatal error helper + * + * Copyright (C) 2022 Colin Watson. + * + * This file is part of man-db. + * + * man-db is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * man-db 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with man-db; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif /* HAVE_CONFIG_H */ + +#include <stdarg.h> +#include <stdlib.h> + +#include "verror.h" + +#include "manconfig.h" + +#include "fatal.h" + +void fatal (int errnum, const char *format, ...) +{ + va_list ap; + + va_start (ap, format); + verror (FATAL, errnum, format, ap); + va_end (ap); + + /* Never reached, because verror exits if given a non-zero status, + * but the compiler may not be able to prove that. + */ + abort (); +} diff --git a/lib/fatal.h b/lib/fatal.h new file mode 100644 index 00000000..7cc299e9 --- /dev/null +++ b/lib/fatal.h @@ -0,0 +1,26 @@ +/* + * fatal.h: interface to fatal error helper + * + * Copyright (C) 2022 Colin Watson. + * + * This file is part of man-db. + * + * man-db is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * man-db 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with man-db; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "attribute.h" + +_Noreturn void fatal (int errnum, const char *format, ...) + ATTRIBUTE_FORMAT ((__printf__, 2, 3)); diff --git a/lib/glcontainers.c b/lib/glcontainers.c index cbd635cf..4cbe4bae 100644 --- a/lib/glcontainers.c +++ b/lib/glcontainers.c @@ -28,6 +28,7 @@ #include <stdlib.h> #include <string.h> +#include "attribute.h" #include "gl_xlist.h" #include "gl_xmap.h" #include "gl_xset.h" @@ -37,12 +38,12 @@ #include "glcontainers.h" -bool _GL_ATTRIBUTE_PURE string_equals (const void *s1, const void *s2) +bool ATTRIBUTE_PURE string_equals (const void *s1, const void *s2) { return STREQ ((const char *) s1, (const char *) s2); } -size_t _GL_ATTRIBUTE_PURE string_hash (const void *s) +size_t ATTRIBUTE_PURE string_hash (const void *s) { return hash_pjw_bare (s, strlen ((const char *) s)); } diff --git a/lib/glcontainers.h b/lib/glcontainers.h index a60bf2e3..56ae0993 100644 --- a/lib/glcontainers.h +++ b/lib/glcontainers.h @@ -30,6 +30,8 @@ #include "gl_map.h" #include "gl_set.h" +#include "mp.h" + /* These types are compatible with those required by Gnulib container * initialisation. */ @@ -48,27 +50,19 @@ gl_set_t new_string_set (gl_set_implementation_t implementation); /* Iterator macros. */ -#define GL_LIST_FOREACH_START(list, item) \ - do { \ - gl_list_iterator_t list##_iter = gl_list_iterator (list); \ - gl_list_node_t list##_node; \ - while (gl_list_iterator_next (&list##_iter, \ - (const void **) &item, \ - &list##_node)) - -#define GL_LIST_FOREACH_END(list) \ - gl_list_iterator_free (&list##_iter); \ - } while (0) - -#define GL_MAP_FOREACH_START(map, key, value) \ - do { \ - gl_map_iterator_t map##_iter = gl_map_iterator (map); \ - while (gl_map_iterator_next (&map##_iter, \ - (const void **) &key, \ - (const void **) &value)) +#define GL_LIST_FOREACH(list, item) \ + MPP_DECLARE (1, gl_list_iterator_t list##_iter = gl_list_iterator (list)) \ + MPP_DECLARE (2, gl_list_node_t list##_node) \ + MPP_WHILE (3, gl_list_iterator_next (&list##_iter, \ + (const void **) &item, \ + &list##_node)) \ + MPP_FINALLY (4, gl_list_iterator_free (&list##_iter)) -#define GL_MAP_FOREACH_END(map) \ - gl_map_iterator_free (&map##_iter); \ - } while (0) +#define GL_MAP_FOREACH(map, key, value) \ + MPP_DECLARE (1, gl_map_iterator_t map##_iter = gl_map_iterator (map)) \ + MPP_WHILE (2, gl_map_iterator_next (&map##_iter, \ + (const void **) &key, \ + (const void **) &value)) \ + MPP_FINALLY (3, gl_map_iterator_free (&map##_iter)) #endif /* MAN_GLCONTAINERS_H */ diff --git a/lib/mp.h b/lib/mp.h new file mode 100644 index 00000000..df31eaed --- /dev/null +++ b/lib/mp.h @@ -0,0 +1,483 @@ +/* + * mp.h: header file providing macros for 'metaprogramming' custom + * loop constructions in standard C. + * + * Accompanies the article on the web at + * https://www.chiark.greenend.org.uk/~sgtatham/mp/ + */ + +/* + * mp.h is copyright 2012 Simon Tatham. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * $Id$ + */ + +/* + * Macros beginning with 'MPI_' are internal to this header file, and + * intended only to be used by other macros defined _in_ this header + * file. Do not refer to them externally. + */ + +/* Standard trickery to allow us to macro-expand and then token-paste */ +#define MPI_TOKPASTEINNER(x,y) x ## y +#define MPI_TOKPASTE(x,y) MPI_TOKPASTEINNER(x,y) + +/* Method of constructing line-unique labels */ +#define MPI_LABEL(id1,id2) \ + MPI_TOKPASTE(MPI_LABEL_ ## id1 ## _ ## id2 ## _, __LINE__) + +/* + * Macros beginning with 'MPP_' and 'MPS_' are building blocks + * intended for metaprogrammers to make useful control constructions + * from. + * + * The prefixes distinguish their syntactic role. MPP_ macros are + * statement _prefixes_; you would typically build a custom control + * structure by defining a macro expanding to a sequence of them. MPS_ + * macros are actual statements, which you might use in the various + * parameters of MPP_ macros that are expected to be statement-shaped. + */ + +/* + * Safety considerations: + * + * - All of these macros are C89-safe, except for MPP_DECLARE if you + * pass an actual declaration and not just an assignment, since + * that one relies on the C99 (and C++) extension of being able to + * write a declaration in the initialisation clause of a for + * statement. + * + * - None of these macros uses switch, so case labels from a switch + * outside the whole lot may be written inside the suffixed + * statement/block. + * + * - All of these constructions use 'goto' with labels constructed + * programmatically, using __LINE__ to make them unique between + * multiple invocations of the same loop macro. So don't put two + * loop macros defined using these building blocks on the same + * source line. + * + * - All of these constructions can be prefixed to something that is + * syntactically a single C statement, and generate something that + * is also a single C statement. So they're if-else safe - you can + * use an unbraced one of these constructs followed by an unbraced + * statement within the then-clause of an outer if, and the else + * will still bind to what it looks as if it ought to. + * + * - Controlling what happens if the user writes a 'break' in the + * suffixed statement is unavoidably rather fiddly. The macros + * below fall into a few categories: + * + * + naturally transparent to 'break' (MPP_BEFORE, MPP_IF). Macros + * of this type will not affect the semantics of 'break' in the + * suffixed statement at all - it will terminate the next + * innermost loop or switch outside the construction. + * + * + artificially transparent to 'break', by means of deliberately + * catching and 'rethrowing' it. (MPP_BREAK_{THROW,CATCH}; + * MPP_BREAK_HANDLER; MPP_FINALLY.) These macros will propagate + * a break outwards to the next containing loop, but in order to + * do so they require that there _be_ a next containing loop, + * since their expansion can't avoid including a break statement + * which they themselves do not wrap in a loop. So you should + * only use these when you know there is a containing loop (e.g. + * because MPP_WHILE or MPP_DO_WHILE precedes them in your + * construction). + * + * + loop constructions. (MPP_WHILE and MPP_DO_WHILE). These + * macros give 'break' the obvious semantics of terminating the + * loop they define. + * + * + break-unsafe macros, which have to include a C looping + * construction to do something not essentially loopy, and hence + * have the unfortunate side effect of causing 'break' to only + * terminate the suffixed statement itself. On the other hand, + * they can be used in contexts where there is no surrounding + * loop at all (which is why I don't just fix them to contain a + * built-in MPP_BREAK_{THROW,CATCH}). + * + * If you are using these macros to build a looping construct, then + * you will probably include an MPP_WHILE or MPP_DO_WHILE in your + * stack, and you'll want 'break' to terminate that. So you just + * need to be sure that break is correctly propagated from the + * suffixed statement back to that loop, which you can do by + * sticking to the break-transparent macros where possible and + * using MPP_BREAK_{THROW,CATCH} to bypass any break-unsafe macro + * such as MPP_DECLARE that you might need to use. Having done + * that, 'break' will do what the user expects. + * + * But if you're using the macros to wrap some context around a + * statement you still intend to be executed only once, there will + * be unavoidable side effects on 'break': you can't use the + * artificially break-unsafe macros because the user might use your + * construction in a context with no surrounding loop at all, so + * you must stick to the naturally break-transparent and the + * break-unsafe, and there aren't enough of the former to be really + * useful. So you must just live with 'break' acquiring unhelpful + * behaviour inside such a macro. + * + * - Almost none of these macros is transparent to 'continue'. The + * naturally break-transparent MPP_BEFORE is, but none of the rest + * can possibly be, because as soon as you include any loop + * construction in the stuff being prefixed to a statement, you + * introduce the invariant that 'continue' is equivalent to jumping + * to the end of the suffixed statement or block. This is not too + * bad if you're defining a custom loop construction (it was quite + * likely the behaviour you wanted for continue anyway), but if you + * were trying to use MPP_DECLARE and/or MPP_BEFORE_AND_AFTER to + * wrap a statement in some context but still only execute it once, + * you'd have to be aware of that limitation. + * + * - MPP_FINALLY and MPP_BREAK_HANDLER can only catch non-local exits + * from the block _by break_. They are not true C++ try/finally, so + * they can't catch other kinds of exit such as return, goto, + * longjmp or exit. + * + * - Finally, it almost goes without saying, but don't forget that + * snippets of code you use as parameters to these macros must + * avoid using commas not contained inside parentheses, or else the + * C preprocessor will consider the comma to end that macro + * parameter and start the next one. If there is any reason you + * really need an unbracketed comma, you can work around this by + * one of two methods: + * - define a macro that expands to a comma ('#define COMMA ,') + * and then use that macro in place of commas in your macro + * argument. It won't be expanded to an actual comma until after + * the argument-separation has finished. + * - if you're allowed to use C99, define a variadic macro that + * expands to its unmodified input argument list ('#define + * WRAP(...) __VA_ARGS__') and then enclose comma-using code in + * WRAP(). Again, this will protect the commas for just long + * enough. + */ + +/* + * MPP_BEFORE: run the code given in the argument 'before' and then + * the suffixed statement. + * + * 'before' should have the syntactic form of one or more declarations + * and statements, except that a trailing semicolon may be omitted. + * Any declarations will be in scope only within 'before', not within + * the suffixed statement. + * + * This macro, unusually among the collection, is naturally + * transparent to 'break' and also transparent to 'continue'. + */ +#define MPP_BEFORE(labid,before) \ + if (1) { \ + before; \ + goto MPI_LABEL(labid, body); \ + } else \ + MPI_LABEL(labid, body): + +/* + * MPP_AFTER: run the suffixed statement, and then the code given in + * the argument 'after'. + * + * 'after' should have the syntactic form of one or more declarations + * and statements, except that a trailing semicolon may be omitted. + * Any declaration in 'after' will be in scope only within 'after'. + * + * This macro is break-unsafe - it causes a 'break' to terminate the + * suffixed statement only. If you need different behaviour, you can + * use MPP_BREAK_CATCH and MPP_BREAK_THROW to pass a break past it - + * but beware that in that case the 'after' clause will not be + * executed, so MPP_FINALLY or MPP_BREAK_HANDLER may be useful too. + */ +#define MPP_AFTER(labid,after) \ + if (1) \ + goto MPI_LABEL(labid, body); \ + else \ + while (1) \ + if (1) { \ + after; \ + break; \ + } else \ + MPI_LABEL(labid, body): + +/* + * MPP_DECLARE: run the 'declaration' argument before the suffixed + * statement. The argument may have the form of either a C expression + * (e.g. an assignment) or a declaration; if the latter, it will be in + * scope within the suffixed statement. + * + * This macro is break-unsafe - it causes a 'break' to terminate the + * suffixed statement only. If you need different behaviour, you can + * use MPP_BREAK_CATCH and MPP_BREAK_THROW to pass a break past it. + */ +#define MPP_DECLARE(labid, declaration) \ + if (0) \ + ; \ + else \ + for (declaration;;) \ + if (1) { \ + goto MPI_LABEL(labid, body); \ + MPI_LABEL(labid, done): break; \ + } else \ + while (1) \ + if (1) \ + goto MPI_LABEL(labid, done); \ + else \ + MPI_LABEL(labid, body): +/* (The 'if(0) ; else' at the start of the above is just in case we + * encounter an old-style compiler that considers variables declared + * in for statements to have scope extending beyond the for statement. + * Putting another layer outside the 'for' ensures that the variable's + * scope is constrained to _that_ layer even if not to the for itself, + * and it doesn't leak into the calling scope. */ + +/* + * MPP_WHILE: run the suffixed statement within a 'while (condition)' + * loop. + * + * In fact, just writing 'while (condition)' works fine for this, but + * it's nice to make it look like the rest of these macros! + * + * This macro defines an actual loop, and 'break' in the suffixed + * statement terminates that loop as you would expect. + */ +#define MPP_WHILE(labid, condition) \ + while (condition) + +/* + * MPP_DO_WHILE: run the suffixed statement within a loop with the + * semantics of 'do suffixed-statement while (condition)'. + * + * This macro defines an actual loop, and 'break' in the suffixed + * statement terminates that loop as you would expect. + */ +#define MPP_DO_WHILE(labid, condition) \ + if (1) \ + goto MPI_LABEL(labid, body); \ + else \ + while (condition) \ + MPI_LABEL(labid, body): + +/* + * MPP_IF: run the suffixed statement only if 'condition' is true. + * + * This macro is naturally transparent to 'break' and also transparent + * to 'continue'. + */ +#define MPP_IF(labid, condition) \ + if (!(condition)) \ + ; \ + else + +/* + * MPP_BREAK_THROW and MPP_BREAK_CATCH: propagate 'break' control flow + * transfers past other prefixes that mess about with them. + * + * Write an MPP_BREAK_CATCH, then other metaprogramming prefixes from + * this collection, and then an MPP_BREAK_THROW with the same label + * id. If the statement following the MPP_BREAK_THROW terminates by + * 'break', then the effect will be as if the MPP_BREAK_CATCH had + * terminated by 'break', regardless of how the in-between prefixes + * would have handled a 'break'. + * + * These macros are artificially transparent to 'break': they pass + * break through, but include a 'break' statement at the top level of + * MPP_BREAK_CATCH, so that must always be contained inside some loop + * or switch construction. + * + * We also provide MPS_BREAK_THROW, which is a statement-type macro + * that manufactures a break event and passes it to a specified + * MPP_BREAK_CATCH. + */ +#define MPP_BREAK_CATCH(labid) \ + if (0) \ + MPI_LABEL(labid, catch): break; \ + else + +#define MPP_BREAK_THROW(labid) \ + if (1) { \ + goto MPI_LABEL(labid, body); \ + MPI_LABEL(labid, finish):; \ + } else \ + while (1) \ + if (1) \ + goto MPI_LABEL(labid, catch); \ + else \ + while (1) \ + if (1) \ + goto MPI_LABEL(labid, finish); \ + else \ + MPI_LABEL(labid, body): + +#define MPS_BREAK_THROW(labid) goto MPI_LABEL(labid, catch) + +/* + * MPP_BREAK_HANDLER: handle a 'break' in the suffixed statement by + * executing the provided handler code and then terminating as if by + * break. + * + * 'handler' should have the syntactic form of one or more + * declarations and statements, except that a trailing semicolon may + * be omitted. + * + * This macro is artificially transparent to 'break': it passes break + * through, but includes a 'break' statement at the top level, so it + * must always be contained inside some loop or switch construction. + */ +#define MPP_BREAK_HANDLER(labid, handler) \ + if (1) { \ + goto MPI_LABEL(labid, body); \ + MPI_LABEL(labid, break): \ + {handler;} \ + break; \ + MPI_LABEL(labid, finish):; \ + } else \ + while (1) \ + if (1) \ + goto MPI_LABEL(labid, break); \ + else \ + while (1) \ + if (1) \ + goto MPI_LABEL(labid, finish); \ + else \ + MPI_LABEL(labid, body): + +/* + * MPP_FINALLY: execute the suffixed statement, and execute the + * provided 'finally' clause after it finishes. If it terminates by + * 'break', execute the same 'finally' clause but propagate the break + * to the containing statement. + * + * 'finally' should have the syntactic form of one or more + * declarations and statements, except that a trailing semicolon may + * be omitted. + * + * The 'finally' argument will be double-expanded. Of course it'll + * only be executed once in any given run, so that's not a concern for + * function side effects, but don't do anything fiddly like declaring + * a static variable to which you return a pointer and then expecting + * the pointer to be the same no matter which copy of 'finally' it + * came from. + * + * This macro is artificially transparent to 'break': it passes break + * through, but includes a 'break' statement at the top level, so it + * must always be contained inside some loop or switch construction. + */ +#define MPP_FINALLY(labid, finally) \ + if (1) { \ + goto MPI_LABEL(labid, body); \ + MPI_LABEL(labid, break): \ + {finally;} \ + break; \ + MPI_LABEL(labid, finish): \ + {finally;} \ + } else \ + while (1) \ + if (1) \ + goto MPI_LABEL(labid, break); \ + else \ + while (1) \ + if (1) \ + goto MPI_LABEL(labid, finish); \ + else \ + MPI_LABEL(labid, body): + +/* + * MPP_BREAK_STOP: handle a 'break' in the suffixed statement by + * executing the provided handler code and then terminating as if + * normally. + * + * 'handler' should have the syntactic form of one or more + * declarations and statements, except that a trailing semicolon may + * be omitted. + */ +#define MPP_BREAK_STOP(labid, handler) \ + if (1) { \ + goto MPI_LABEL(labid, body); \ + MPI_LABEL(labid, break): \ + {handler;} \ + MPI_LABEL(labid, finish):; \ + } else \ + while (1) \ + if (1) \ + goto MPI_LABEL(labid, break); \ + else \ + while (1) \ + if (1) \ + goto MPI_LABEL(labid, finish); \ + else \ + MPI_LABEL(labid, body): + +/* + * MPP_ELSE_ACCEPT, MPS_MAIN_INVOKE, MPS_ELSE_INVOKE: arrange to + * accept an optional 'else' clause after the suffixed statement, and + * provide two statement macros which jump to the main clause and the + * else clause. The main (non-else) clause will be be executed in the + * default case, and can be invoked again using MPS_MAIN_INVOKE; + * MPS_ELSE_INVOKE will invoke the else clause. + * + * Like MPP_BREAK_THROW and MPP_BREAK_CATCH, these macros should be + * used in groups with the same label id, so as to match them up to + * each other. MPS_ELSE_INVOKE and MPS_MAIN_INVOKE will go to the + * appropriate clauses corresponding to the MPP_ELSE_ACCEPT with the + * same id. + */ +#define MPP_ELSE_ACCEPT(labid) \ + if (1) \ + goto MPI_LABEL(labid, body); \ + else \ + MPI_LABEL(labid, else): \ + if (0) \ + MPI_LABEL(labid, body): + +#define MPS_MAIN_INVOKE(labid) \ + goto MPI_LABEL(labid, body) + +#define MPS_ELSE_INVOKE(labid) \ + goto MPI_LABEL(labid, else) + +/* + * MPP_ELSE_GENERAL: like MPP_ELSE_ACCEPT, but also lets you provide a + * snippet of code that will be run after the else clause terminates + * and one which will be run after the else clause breaks. + * + * You can use MPS_MAIN_INVOKE and MPS_ELSE_INVOKE with this as well + * as with MPP_ELSE_ACCEPT. + * + * Will mess up what happens after the main body, so you'll probably + * want to follow this macro with others such as MPP_AFTER and + * something to catch break in the main body too. + */ +#define MPP_ELSE_GENERAL(labid, after, breakhandler) \ + if (1) \ + goto MPI_LABEL(labid, body); \ + else \ + while (1) \ + if (1) { \ + {breakhandler;} \ + break; \ + } else \ + while (1) \ + if (1) { \ + {after;} \ + break; \ + } else \ + MPI_LABEL(labid, else): \ + if (0) \ + MPI_LABEL(labid, body): diff --git a/lib/orderfiles.c b/lib/orderfiles.c index bc12c88a..05bafe9e 100644 --- a/lib/orderfiles.c +++ b/lib/orderfiles.c @@ -44,10 +44,12 @@ #include <string.h> #include <unistd.h> +#include "attribute.h" #include "gl_hash_map.h" #include "gl_rbtree_list.h" #include "gl_xlist.h" #include "gl_xmap.h" +#include "xalloc.h" #include "manconfig.h" @@ -104,7 +106,7 @@ void order_files (const char *dir, gl_list_t *basenamesp) physical_offsets = gl_map_create_empty (GL_HASH_MAP, string_equals, string_hash, NULL, plain_free); sorted_basenames = new_string_list (GL_RBTREE_LIST, false); - GL_LIST_FOREACH_START (basenames, name) { + GL_LIST_FOREACH (basenames, name) { struct { struct fiemap fiemap; struct fiemap_extent extent; @@ -134,7 +136,7 @@ void order_files (const char *dir, gl_list_t *basenamesp) close (fd); gl_sortedlist_add (sorted_basenames, compare_physical_offsets, xstrdup (name)); - } GL_LIST_FOREACH_END (basenames); + } gl_map_free (physical_offsets); physical_offsets = NULL; close (dir_fd); @@ -160,18 +162,19 @@ void order_files (const char *dir, gl_list_t *basenamesp) /* While we can't actually order the files, we can at least ask the * kernel to preload them. */ - GL_LIST_FOREACH_START (basenames, name) { + GL_LIST_FOREACH (basenames, name) { int fd = openat (dir_fd, name, O_RDONLY | O_NONBLOCK); if (fd >= 0) { posix_fadvise (fd, 0, 0, POSIX_FADV_WILLNEED); close (fd); } - } GL_LIST_FOREACH_END (basenames); + } close (dir_fd); } #else -void order_files (const char *dir _GL_UNUSED, gl_list_t *basenamesp _GL_UNUSED) +void order_files (const char *dir MAYBE_UNUSED, + gl_list_t *basenamesp MAYBE_UNUSED) { } #endif diff --git a/lib/pathsearch.c b/lib/pathsearch.c index c733c3a7..34eac082 100644 --- a/lib/pathsearch.c +++ b/lib/pathsearch.c @@ -24,6 +24,8 @@ # include "config.h" #endif /* HAVE_CONFIG_H */ +#include <assert.h> +#include <errno.h> #include <stdbool.h> #include <string.h> #include <stdlib.h> @@ -32,10 +34,16 @@ #include <sys/stat.h> #include <unistd.h> +#include "gettext.h" +#define _(String) gettext (String) + +#include "xalloc.h" #include "xgetcwd.h" #include "xvasprintf.h" #include "manconfig.h" + +#include "fatal.h" #include "pathsearch.h" static bool pathsearch (const char *name, const mode_t bits) @@ -70,10 +78,14 @@ static bool pathsearch (const char *name, const mode_t bits) if (!*element) { if (!cwd) cwd = xgetcwd (); + if (!cwd) + fatal (errno, + _("can't determine current directory")); element = cwd; } filename = xasprintf ("%s/%s", element, name); + assert (filename); if (stat (filename, &st) == -1) { free (filename); continue; @@ -116,6 +128,9 @@ bool directory_on_path (const char *dir) if (!*element) { if (!cwd) cwd = xgetcwd (); + if (!cwd) + fatal (errno, + _("can't determine current directory")); element = cwd; } diff --git a/lib/sandbox.c b/lib/sandbox.c index d934a0f9..bfda5e30 100644 --- a/lib/sandbox.c +++ b/lib/sandbox.c @@ -1,6 +1,6 @@ /* * sandbox.c: Process sandboxing - * + * * Copyright (C) 2017 Colin Watson. * * This file is part of man-db. @@ -63,10 +63,14 @@ # include <seccomp.h> #endif /* HAVE_LIBSECCOMP */ -#include "manconfig.h" +#include "attribute.h" +#include "xalloc.h" +#include "xstrndup.h" -#include "error.h" +#include "manconfig.h" +#include "debug.h" +#include "fatal.h" #include "sandbox.h" struct man_sandbox { @@ -190,7 +194,13 @@ static bool can_load_seccomp (void) if (nr == __NR_SCMP_ERROR) \ break; \ if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, nr, 0) < 0) \ - error (FATAL, errno, "can't add seccomp rule"); \ + fatal (errno, "can't add seccomp rule"); \ + } while (0) + +#define SC_ALLOW_PERMISSIVE(name) \ + do { \ + if (permissive) \ + SC_ALLOW (name); \ } while (0) #define SC_ALLOW_ARG_1(name, cmp1) \ @@ -199,7 +209,7 @@ static bool can_load_seccomp (void) if (nr == __NR_SCMP_ERROR) \ break; \ if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, nr, 1, cmp1) < 0) \ - error (FATAL, errno, "can't add seccomp rule"); \ + fatal (errno, "can't add seccomp rule"); \ } while (0) #define SC_ALLOW_ARG_2(name, cmp1, cmp2) \ @@ -209,7 +219,7 @@ static bool can_load_seccomp (void) break; \ if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, nr, \ 2, cmp1, cmp2) < 0) \ - error (FATAL, errno, "can't add seccomp rule"); \ + fatal (errno, "can't add seccomp rule"); \ } while (0) /* Create a seccomp filter. @@ -231,10 +241,13 @@ static scmp_filter_ctx make_seccomp_filter (int permissive) #endif /* O_TMPFILE */ ; + if (!can_load_seccomp ()) + return NULL; + debug ("initialising seccomp filter (permissive: %d)\n", permissive); ctx = seccomp_init (SCMP_ACT_ERRNO (ENOSYS)); if (!ctx) - error (FATAL, errno, "can't initialise seccomp filter"); + fatal (errno, "can't initialise seccomp filter"); /* Allow sibling architectures for x86, since people sometimes mix * and match architectures there for performance reasons. @@ -362,16 +375,16 @@ static scmp_filter_ctx make_seccomp_filter (int permissive) SC_ALLOW ("fstatfs64"); SC_ALLOW ("ftruncate"); SC_ALLOW ("ftruncate64"); - if (permissive) SC_ALLOW ("futimesat"); + SC_ALLOW_PERMISSIVE ("futimesat"); SC_ALLOW ("getcwd"); SC_ALLOW ("getdents"); SC_ALLOW ("getdents64"); - if (permissive) SC_ALLOW ("link"); - if (permissive) SC_ALLOW ("linkat"); + SC_ALLOW_PERMISSIVE ("link"); + SC_ALLOW_PERMISSIVE ("linkat"); SC_ALLOW ("lstat"); SC_ALLOW ("lstat64"); - if (permissive) SC_ALLOW ("mkdir"); - if (permissive) SC_ALLOW ("mkdirat"); + SC_ALLOW_PERMISSIVE ("mkdir"); + SC_ALLOW_PERMISSIVE ("mkdirat"); SC_ALLOW ("mmap"); SC_ALLOW ("mmap2"); SC_ALLOW ("munmap"); @@ -410,24 +423,24 @@ static scmp_filter_ctx make_seccomp_filter (int permissive) } SC_ALLOW ("readlink"); SC_ALLOW ("readlinkat"); - if (permissive) SC_ALLOW ("rename"); - if (permissive) SC_ALLOW ("renameat"); - if (permissive) SC_ALLOW ("renameat2"); - if (permissive) SC_ALLOW ("rmdir"); + SC_ALLOW_PERMISSIVE ("rename"); + SC_ALLOW_PERMISSIVE ("renameat"); + SC_ALLOW_PERMISSIVE ("renameat2"); + SC_ALLOW_PERMISSIVE ("rmdir"); SC_ALLOW ("stat"); SC_ALLOW ("stat64"); SC_ALLOW ("statfs"); SC_ALLOW ("statfs64"); SC_ALLOW ("statx"); - if (permissive) SC_ALLOW ("symlink"); - if (permissive) SC_ALLOW ("symlinkat"); - if (permissive) SC_ALLOW ("truncate"); - if (permissive) SC_ALLOW ("truncateat"); - if (permissive) SC_ALLOW ("unlink"); - if (permissive) SC_ALLOW ("unlinkat"); - if (permissive) SC_ALLOW ("utime"); - if (permissive) SC_ALLOW ("utimensat"); - if (permissive) SC_ALLOW ("utimes"); + SC_ALLOW_PERMISSIVE ("symlink"); + SC_ALLOW_PERMISSIVE ("symlinkat"); + SC_ALLOW_PERMISSIVE ("truncate"); + SC_ALLOW_PERMISSIVE ("truncateat"); + SC_ALLOW_PERMISSIVE ("unlink"); + SC_ALLOW_PERMISSIVE ("unlinkat"); + SC_ALLOW_PERMISSIVE ("utime"); + SC_ALLOW_PERMISSIVE ("utimensat"); + SC_ALLOW_PERMISSIVE ("utimes"); /* systemd: SystemCallFilter=@io-event */ SC_ALLOW ("_newselect"); @@ -584,12 +597,14 @@ static void _sandbox_load (man_sandbox *sandbox, int permissive) { if (can_load_seccomp ()) { scmp_filter_ctx ctx; - debug ("loading seccomp filter (permissive: %d)\n", - permissive); if (permissive) ctx = sandbox->permissive_ctx; else ctx = sandbox->ctx; + if (!ctx) + return; + debug ("loading seccomp filter (permissive: %d)\n", + permissive); if (seccomp_load (ctx) < 0) { if (errno == EINVAL || errno == EFAULT) { /* The kernel doesn't give us particularly @@ -606,14 +621,13 @@ static void _sandbox_load (man_sandbox *sandbox, int permissive) { /* Don't try this again. */ seccomp_filter_unavailable = 1; } else - error (FATAL, errno, - "can't load seccomp filter"); + fatal (errno, "can't load seccomp filter"); } } } #else /* !HAVE_LIBSECCOMP */ -static void _sandbox_load (man_sandbox *sandbox _GL_UNUSED, - int permissive _GL_UNUSED) +static void _sandbox_load (man_sandbox *sandbox MAYBE_UNUSED, + int permissive MAYBE_UNUSED) { } #endif /* HAVE_LIBSECCOMP */ @@ -641,8 +655,10 @@ void sandbox_free (void *data) { man_sandbox *sandbox = data; #ifdef HAVE_LIBSECCOMP - seccomp_release (sandbox->ctx); - seccomp_release (sandbox->permissive_ctx); + if (sandbox->ctx) + seccomp_release (sandbox->ctx); + if (sandbox->permissive_ctx) + seccomp_release (sandbox->permissive_ctx); #endif /* HAVE_LIBSECCOMP */ free (sandbox); diff --git a/lib/sandbox.h b/lib/sandbox.h index a838e0e4..cb482ec2 100644 --- a/lib/sandbox.h +++ b/lib/sandbox.h @@ -1,6 +1,6 @@ /* * sandbox.h: Interface to process sandboxing - * + * * Copyright (C) 2017 Colin Watson. * * This file is part of man-db. diff --git a/lib/security.c b/lib/security.c index 55f2d85d..676e6d79 100644 --- a/lib/security.c +++ b/lib/security.c @@ -1,6 +1,6 @@ /* - * security.c: Routines to aid secure uid operations - * + * security.c: Routines to aid secure uid operations + * * Copyright (C) 1994, 1995 Graeme W. Wilford. (Wilf.) * Copyright (C) 2001, 2003, 2004, 2007, 2010, 2011 Colin Watson. * @@ -20,7 +20,7 @@ * along with man-db; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * - * Mon Aug 8 20:35:30 BST 1994 Wilf. (G.Wilford@ee.surrey.ac.uk) + * Mon Aug 8 20:35:30 BST 1994 Wilf. (G.Wilford@ee.surrey.ac.uk) */ #ifdef HAVE_CONFIG_H @@ -35,15 +35,18 @@ #include <errno.h> #include <sys/types.h> +#include "attribute.h" +#include "error.h" #include "gettext.h" #define _(String) gettext (String) #include "manconfig.h" -#include "error.h" -#include "cleanup.h" #include "pipeline.h" +#include "cleanup.h" +#include "debug.h" +#include "fatal.h" #include "security.h" #ifdef MAN_OWNER @@ -76,7 +79,7 @@ static int priv_drop_count = 0; static void gripe_set_euid (void) { - error (FATAL, errno, _("can't set effective uid")); + fatal (errno, _("can't set effective uid")); } #endif /* MAN_OWNER */ @@ -95,7 +98,7 @@ void init_security (void) #endif /* MAN_OWNER */ } -bool _GL_ATTRIBUTE_PURE running_setuid (void) +bool ATTRIBUTE_PURE running_setuid (void) { #ifdef MAN_OWNER return ruid != euid; @@ -122,8 +125,8 @@ struct passwd *get_man_owner (void) } #endif /* MAN_OWNER */ -/* - * function to gain user privs by either (a) dropping effective privs +/* + * function to gain user privs by either (a) dropping effective privs * completely (saved ids) or (b) reversing euid w/ uid. * Ignore if superuser. */ @@ -143,7 +146,7 @@ void drop_effective_privs (void) #endif /* MAN_OWNER */ } -/* +/* * function to (re)gain setuid privs by (a) setting euid from suid or (b) * (re)reversing uid w/ euid. Ignore if superuser. */ @@ -169,7 +172,7 @@ void regain_effective_privs (void) } /* Pipeline command pre-exec hook to permanently drop privileges. */ -void drop_privs (void *data _GL_UNUSED) +void drop_privs (void *data MAYBE_UNUSED) { #ifdef MAN_OWNER if (idpriv_drop ()) diff --git a/lib/tempfile.c b/lib/tempfile.c index 91ee0fb1..f4a291c1 100644 --- a/lib/tempfile.c +++ b/lib/tempfile.c @@ -24,6 +24,7 @@ # include "config.h" #endif /* HAVE_CONFIG_H */ +#include <assert.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -32,6 +33,8 @@ #include "manconfig.h" +#include "tempfile.h" + static const char *path_search (void) { const char *dir = NULL; @@ -73,6 +76,7 @@ char *create_tempdir (const char *template) if (!dir) return NULL; created_dirname = xasprintf ("%s/%sXXXXXX", dir, template); + assert (created_dirname); if (!mkdtemp (created_dirname)) return NULL; return created_dirname; diff --git a/lib/tempfile.h b/lib/tempfile.h new file mode 100644 index 00000000..1a4a64ce --- /dev/null +++ b/lib/tempfile.h @@ -0,0 +1,24 @@ +/* tempfile.h: interface to temporary directory creation + * + * Copyright (C) 2001-2022 Colin Watson. + * + * This file is part of man-db. + * + * man-db is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * man-db 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with man-db; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "attribute.h" + +NODISCARD extern char *create_tempdir (const char *template); @@ -35,6 +35,7 @@ # include "config.h" #endif /* HAVE_CONFIG_H */ +#include <assert.h> #include <string.h> #include <stdlib.h> #include <stdio.h> @@ -44,16 +45,21 @@ #include <unistd.h> #include <locale.h> +#include "attribute.h" #include "stat-time.h" #include "timespec.h" +#include "xalloc.h" +#include "xstrndup.h" #include "xvasprintf.h" #include "gettext.h" #include "manconfig.h" +#include "debug.h" #include "error.h" #include "pipeline.h" +#include "util.h" /* * Does file a have a different timestamp to file b? @@ -163,6 +169,7 @@ int remove_directory (const char *directory, int recurse) if (STREQ (entry->d_name, ".") || STREQ (entry->d_name, "..")) continue; path = xasprintf ("%s/%s", directory, entry->d_name); + assert (path); if (stat (path, &st) == -1) { free (path); closedir (handle); @@ -193,7 +200,7 @@ int remove_directory (const char *directory, int recurse) /* Returns an allocated copy of s, with leading and trailing spaces * removed. */ -char * _GL_ATTRIBUTE_MALLOC trim_spaces (const char *s) +char * ATTRIBUTE_MALLOC trim_spaces (const char *s) { int length; while (*s == ' ') @@ -211,7 +218,7 @@ char *lang_dir (const char *filename) const char *sm; /* the second "/man?/" dir */ ld = xstrdup (""); - if (!filename) + if (!filename) return ld; /* Check whether filename is in a man page hierarchy. */ diff --git a/lib/util.h b/lib/util.h new file mode 100644 index 00000000..48c98440 --- /dev/null +++ b/lib/util.h @@ -0,0 +1,31 @@ +/* + * util.h + * + * Copyright (C) 1990, 1991 John W. Eaton. + * Copyright (C) 1994, 1995 Graeme W. Wilford. (Wilf.) + * Copyright (C) 2001-2022 Colin Watson. + * + * This file is part of man-db. + * + * man-db is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * man-db 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with man-db; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +extern int is_changed (const char *fa, const char *fb); +extern int is_directory (const char *path); +extern char *escape_shell (const char *unesc); +extern int remove_directory (const char *directory, int recurse); +extern char *trim_spaces (const char *s); +extern char *lang_dir (const char *filename); +extern void init_locale (void); diff --git a/lib/wordfnmatch.c b/lib/wordfnmatch.c index 613035b2..b073a88d 100644 --- a/lib/wordfnmatch.c +++ b/lib/wordfnmatch.c @@ -29,6 +29,7 @@ #include <ctype.h> #include "fnmatch.h" +#include "xalloc.h" #include "manconfig.h" diff --git a/lib/xregcomp.c b/lib/xregcomp.c index cd6ed9de..d8e1f180 100644 --- a/lib/xregcomp.c +++ b/lib/xregcomp.c @@ -24,6 +24,8 @@ # include "config.h" #endif /* HAVE_CONFIG_H */ +#include <stddef.h> + #include "regex.h" #include "gettext.h" @@ -32,7 +34,8 @@ #include "manconfig.h" -#include "error.h" +#include "fatal.h" +#include "xalloc.h" #include "xregcomp.h" void xregcomp (regex_t *preg, const char *regex, int cflags) @@ -44,6 +47,6 @@ void xregcomp (regex_t *preg, const char *regex, int cflags) errstrsize = regerror (err, preg, NULL, 0); errstr = xmalloc (errstrsize); regerror (err, preg, errstr, errstrsize); - error (FATAL, 0, _("fatal: regex `%s': %s"), regex, errstr); + fatal (0, _("fatal: regex `%s': %s"), regex, errstr); } } |