summaryrefslogtreecommitdiff
path: root/macros/texinfo/texinfo/info
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-11-09 03:02:50 +0000
committerNorbert Preining <norbert@preining.info>2022-11-09 03:02:50 +0000
commit5de83ec843cdc88e6adc42b1fe3f0ec48c52b7f3 (patch)
treeb49f7c180396c8ef389c8fd519370b6d03f4e100 /macros/texinfo/texinfo/info
parent118cb5bbc5236bf86ca1088b9b3bae04c7b09beb (diff)
CTAN sync 202211090302
Diffstat (limited to 'macros/texinfo/texinfo/info')
-rw-r--r--macros/texinfo/texinfo/info/Makefile.am9
-rw-r--r--macros/texinfo/texinfo/info/Makefile.in768
-rw-r--r--macros/texinfo/texinfo/info/dir.c18
-rw-r--r--macros/texinfo/texinfo/info/display.c3
-rw-r--r--macros/texinfo/texinfo/info/display.h4
-rw-r--r--macros/texinfo/texinfo/info/doc.h2
-rw-r--r--macros/texinfo/texinfo/info/dribble.c2
-rw-r--r--macros/texinfo/texinfo/info/dribble.h2
-rw-r--r--macros/texinfo/texinfo/info/echo-area.c5
-rw-r--r--macros/texinfo/texinfo/info/echo-area.h2
-rw-r--r--macros/texinfo/texinfo/info/filesys.c7
-rw-r--r--macros/texinfo/texinfo/info/filesys.h2
-rw-r--r--macros/texinfo/texinfo/info/footnotes.c46
-rw-r--r--macros/texinfo/texinfo/info/footnotes.h2
-rw-r--r--macros/texinfo/texinfo/info/indices.c29
-rw-r--r--macros/texinfo/texinfo/info/indices.h2
-rw-r--r--macros/texinfo/texinfo/info/info-utils.h145
-rw-r--r--macros/texinfo/texinfo/info/info.c64
-rw-r--r--macros/texinfo/texinfo/info/info.h6
-rw-r--r--macros/texinfo/texinfo/info/infodoc.c27
-rw-r--r--macros/texinfo/texinfo/info/infokey.c2
-rw-r--r--macros/texinfo/texinfo/info/infomap.c2
-rw-r--r--macros/texinfo/texinfo/info/infomap.h2
-rw-r--r--macros/texinfo/texinfo/info/infopath.c7
-rw-r--r--macros/texinfo/texinfo/info/m-x.c6
-rw-r--r--macros/texinfo/texinfo/info/makedoc.c2
-rw-r--r--macros/texinfo/texinfo/info/man.c93
-rw-r--r--macros/texinfo/texinfo/info/man.h3
-rw-r--r--macros/texinfo/texinfo/info/nodemenu.c4
-rw-r--r--macros/texinfo/texinfo/info/nodes.c5
-rw-r--r--macros/texinfo/texinfo/info/nodes.h2
-rw-r--r--macros/texinfo/texinfo/info/pcterm.c2
-rw-r--r--macros/texinfo/texinfo/info/pseudotty.c2
-rw-r--r--macros/texinfo/texinfo/info/scan.c (renamed from macros/texinfo/texinfo/info/info-utils.c)479
-rw-r--r--macros/texinfo/texinfo/info/scan.h76
-rw-r--r--macros/texinfo/texinfo/info/search.c4
-rw-r--r--macros/texinfo/texinfo/info/search.h2
-rw-r--r--macros/texinfo/texinfo/info/session.c109
-rw-r--r--macros/texinfo/texinfo/info/session.h2
-rw-r--r--macros/texinfo/texinfo/info/signals.c2
-rw-r--r--macros/texinfo/texinfo/info/signals.h2
-rw-r--r--macros/texinfo/texinfo/info/t/README13
-rw-r--r--macros/texinfo/texinfo/info/t/index-completing.sh4
-rwxr-xr-xmacros/texinfo/texinfo/info/t/index-paren.sh21
-rw-r--r--macros/texinfo/texinfo/info/t/infodir/index-paren.infobin0 -> 90 bytes
-rw-r--r--macros/texinfo/texinfo/info/t/where-dir-file.sh2
-rw-r--r--macros/texinfo/texinfo/info/tag.c5
-rw-r--r--macros/texinfo/texinfo/info/tag.h4
-rw-r--r--macros/texinfo/texinfo/info/termdep.h2
-rw-r--r--macros/texinfo/texinfo/info/terminal.c2
-rw-r--r--macros/texinfo/texinfo/info/terminal.h2
-rw-r--r--macros/texinfo/texinfo/info/tilde.c2
-rw-r--r--macros/texinfo/texinfo/info/tilde.h2
-rw-r--r--macros/texinfo/texinfo/info/util.c437
-rw-r--r--macros/texinfo/texinfo/info/util.h77
-rw-r--r--macros/texinfo/texinfo/info/variables.c6
-rw-r--r--macros/texinfo/texinfo/info/variables.h3
-rw-r--r--macros/texinfo/texinfo/info/window.c5
-rw-r--r--macros/texinfo/texinfo/info/window.h2
59 files changed, 1407 insertions, 1135 deletions
diff --git a/macros/texinfo/texinfo/info/Makefile.am b/macros/texinfo/texinfo/info/Makefile.am
index 73c6d250a4..35596b10ad 100644
--- a/macros/texinfo/texinfo/info/Makefile.am
+++ b/macros/texinfo/texinfo/info/Makefile.am
@@ -1,4 +1,3 @@
-# $Id$
# Makefile.am for texinfo/info.
#
# Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012,
@@ -33,11 +32,12 @@ EXTRA_DIST = pcterm.c
ginfo_SOURCES = dir.c display.c display.h doc.h dribble.c dribble.h \
echo-area.c echo-area.h \
filesys.c filesys.h footnotes.c footnotes.h indices.c indices.h \
- info-utils.c info-utils.h info.c info.h infodoc.c infokey.c \
+ info.c info.h infodoc.c infokey.c \
infomap.c infomap.h infopath.c m-x.c man.c man.h nodemenu.c \
- nodes.c nodes.h search.c search.h session.c session.h signals.c signals.h \
+ nodes.c nodes.h scan.c scan.h \
+ search.c search.h session.c session.h signals.c signals.h \
tag.c tag.h termdep.h terminal.c terminal.h tilde.c tilde.h \
- variables.c variables.h window.c window.h
+ util.c util.h variables.c variables.h window.c window.h
nodist_ginfo_SOURCES = doc.c funs.h
# The files `doc.c' and `funs.h' are created by ./makedoc run over the
@@ -143,6 +143,7 @@ TESTS = \
t/index-completing.sh \
t/split-index.sh \
t/index-long-nodeline.sh \
+ t/index-paren.sh \
t/empty-infopath.sh \
t/menu-sequence.sh \
t/relative-reference.sh \
diff --git a/macros/texinfo/texinfo/info/Makefile.in b/macros/texinfo/texinfo/info/Makefile.in
index d8962c1e27..92450a0d2c 100644
--- a/macros/texinfo/texinfo/info/Makefile.in
+++ b/macros/texinfo/texinfo/info/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,
@@ -14,7 +14,6 @@
@SET_MAKE@
-# $Id$
# Makefile.am for texinfo/info.
#
# Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012,
@@ -111,8 +110,11 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/00gnulib.m4 \
$(top_srcdir)/gnulib/m4/absolute-header.m4 \
$(top_srcdir)/gnulib/m4/alloca.m4 \
$(top_srcdir)/gnulib/m4/argz.m4 \
+ $(top_srcdir)/gnulib/m4/assert_h.m4 \
$(top_srcdir)/gnulib/m4/btowc.m4 \
$(top_srcdir)/gnulib/m4/builtin-expect.m4 \
+ $(top_srcdir)/gnulib/m4/c-bool.m4 \
+ $(top_srcdir)/gnulib/m4/calloc.m4 \
$(top_srcdir)/gnulib/m4/close.m4 \
$(top_srcdir)/gnulib/m4/codeset.m4 \
$(top_srcdir)/gnulib/m4/double-slash-root.m4 \
@@ -127,6 +129,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/00gnulib.m4 \
$(top_srcdir)/gnulib/m4/fcntl.m4 \
$(top_srcdir)/gnulib/m4/fcntl_h.m4 \
$(top_srcdir)/gnulib/m4/float_h.m4 \
+ $(top_srcdir)/gnulib/m4/free.m4 \
$(top_srcdir)/gnulib/m4/fstat.m4 \
$(top_srcdir)/gnulib/m4/getdtablesize.m4 \
$(top_srcdir)/gnulib/m4/getopt.m4 \
@@ -171,6 +174,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/00gnulib.m4 \
$(top_srcdir)/gnulib/m4/memchr.m4 \
$(top_srcdir)/gnulib/m4/mempcpy.m4 \
$(top_srcdir)/gnulib/m4/memrchr.m4 \
+ $(top_srcdir)/gnulib/m4/minmax.m4 \
$(top_srcdir)/gnulib/m4/mmap-anon.m4 \
$(top_srcdir)/gnulib/m4/mode_t.m4 \
$(top_srcdir)/gnulib/m4/msvc-inval.m4 \
@@ -188,6 +192,8 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/00gnulib.m4 \
$(top_srcdir)/gnulib/m4/printf.m4 \
$(top_srcdir)/gnulib/m4/progtest.m4 \
$(top_srcdir)/gnulib/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/gnulib/m4/realloc.m4 \
+ $(top_srcdir)/gnulib/m4/reallocarray.m4 \
$(top_srcdir)/gnulib/m4/regex.m4 \
$(top_srcdir)/gnulib/m4/setlocale_null.m4 \
$(top_srcdir)/gnulib/m4/size_max.m4 \
@@ -195,7 +201,6 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/00gnulib.m4 \
$(top_srcdir)/gnulib/m4/stat-time.m4 \
$(top_srcdir)/gnulib/m4/stat.m4 \
$(top_srcdir)/gnulib/m4/stdarg.m4 \
- $(top_srcdir)/gnulib/m4/stdbool.m4 \
$(top_srcdir)/gnulib/m4/stddef_h.m4 \
$(top_srcdir)/gnulib/m4/stdint.m4 \
$(top_srcdir)/gnulib/m4/stdint_h.m4 \
@@ -229,6 +234,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/00gnulib.m4 \
$(top_srcdir)/gnulib/m4/wint_t.m4 \
$(top_srcdir)/gnulib/m4/xalloc.m4 \
$(top_srcdir)/gnulib/m4/xsize.m4 \
+ $(top_srcdir)/gnulib/m4/year2038.m4 \
$(top_srcdir)/gnulib/m4/zzgnulib.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -241,12 +247,12 @@ am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
am_ginfo_OBJECTS = dir.$(OBJEXT) display.$(OBJEXT) dribble.$(OBJEXT) \
echo-area.$(OBJEXT) filesys.$(OBJEXT) footnotes.$(OBJEXT) \
- indices.$(OBJEXT) info-utils.$(OBJEXT) info.$(OBJEXT) \
- infodoc.$(OBJEXT) infokey.$(OBJEXT) infomap.$(OBJEXT) \
- infopath.$(OBJEXT) m-x.$(OBJEXT) man.$(OBJEXT) \
- nodemenu.$(OBJEXT) nodes.$(OBJEXT) search.$(OBJEXT) \
- session.$(OBJEXT) signals.$(OBJEXT) tag.$(OBJEXT) \
- terminal.$(OBJEXT) tilde.$(OBJEXT) variables.$(OBJEXT) \
+ indices.$(OBJEXT) info.$(OBJEXT) infodoc.$(OBJEXT) \
+ infokey.$(OBJEXT) infomap.$(OBJEXT) infopath.$(OBJEXT) \
+ m-x.$(OBJEXT) man.$(OBJEXT) nodemenu.$(OBJEXT) nodes.$(OBJEXT) \
+ scan.$(OBJEXT) search.$(OBJEXT) session.$(OBJEXT) \
+ signals.$(OBJEXT) tag.$(OBJEXT) terminal.$(OBJEXT) \
+ tilde.$(OBJEXT) util.$(OBJEXT) variables.$(OBJEXT) \
window.$(OBJEXT)
nodist_ginfo_OBJECTS = doc.$(OBJEXT)
ginfo_OBJECTS = $(am_ginfo_OBJECTS) $(nodist_ginfo_OBJECTS)
@@ -287,15 +293,16 @@ am__depfiles_remade = ./$(DEPDIR)/dir.Po ./$(DEPDIR)/display.Po \
./$(DEPDIR)/doc.Po ./$(DEPDIR)/dribble.Po \
./$(DEPDIR)/echo-area.Po ./$(DEPDIR)/filesys.Po \
./$(DEPDIR)/footnotes.Po ./$(DEPDIR)/indices.Po \
- ./$(DEPDIR)/info-utils.Po ./$(DEPDIR)/info.Po \
- ./$(DEPDIR)/infodoc.Po ./$(DEPDIR)/infokey.Po \
- ./$(DEPDIR)/infomap.Po ./$(DEPDIR)/infopath.Po \
- ./$(DEPDIR)/m-x.Po ./$(DEPDIR)/makedoc.Po ./$(DEPDIR)/man.Po \
+ ./$(DEPDIR)/info.Po ./$(DEPDIR)/infodoc.Po \
+ ./$(DEPDIR)/infokey.Po ./$(DEPDIR)/infomap.Po \
+ ./$(DEPDIR)/infopath.Po ./$(DEPDIR)/m-x.Po \
+ ./$(DEPDIR)/makedoc.Po ./$(DEPDIR)/man.Po \
./$(DEPDIR)/nodemenu.Po ./$(DEPDIR)/nodes.Po \
- ./$(DEPDIR)/pseudotty.Po ./$(DEPDIR)/search.Po \
- ./$(DEPDIR)/session.Po ./$(DEPDIR)/signals.Po \
- ./$(DEPDIR)/tag.Po ./$(DEPDIR)/terminal.Po \
- ./$(DEPDIR)/tilde.Po ./$(DEPDIR)/variables.Po \
+ ./$(DEPDIR)/pseudotty.Po ./$(DEPDIR)/scan.Po \
+ ./$(DEPDIR)/search.Po ./$(DEPDIR)/session.Po \
+ ./$(DEPDIR)/signals.Po ./$(DEPDIR)/tag.Po \
+ ./$(DEPDIR)/terminal.Po ./$(DEPDIR)/tilde.Po \
+ ./$(DEPDIR)/util.Po ./$(DEPDIR)/variables.Po \
./$(DEPDIR)/window.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
@@ -336,8 +343,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__tty_colors_dummy = \
mgn= red= grn= lgn= blu= brg= std=; \
am__color_tests=no
@@ -557,6 +562,7 @@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
AR = @AR@
ARFLAGS = @ARFLAGS@
ARGZ_H = @ARGZ_H@
+ASSERT_H = @ASSERT_H@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
@@ -572,6 +578,8 @@ CFLAGS = @CFLAGS@
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
@@ -589,342 +597,354 @@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
ERRNO_H = @ERRNO_H@
ESLINT = @ESLINT@
+ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FLOAT_H = @FLOAT_H@
GAWK = @GAWK@
GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
GETOPT_H = @GETOPT_H@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+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_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+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_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_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_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+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_ISATTY = @GL_GNULIB_ISATTY@
+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_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_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_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_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_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_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+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_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+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_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_ACCESS = @GNULIB_ACCESS@
-GNULIB_ALIGNED_ALLOC = @GNULIB_ALIGNED_ALLOC@
-GNULIB_ATOLL = @GNULIB_ATOLL@
-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_COPY_FILE_RANGE = @GNULIB_COPY_FILE_RANGE@
-GNULIB_CREAT = @GNULIB_CREAT@
-GNULIB_CTIME = @GNULIB_CTIME@
-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_EXECL = @GNULIB_EXECL@
-GNULIB_EXECLE = @GNULIB_EXECLE@
-GNULIB_EXECLP = @GNULIB_EXECLP@
-GNULIB_EXECV = @GNULIB_EXECV@
-GNULIB_EXECVE = @GNULIB_EXECVE@
-GNULIB_EXECVP = @GNULIB_EXECVP@
-GNULIB_EXECVPE = @GNULIB_EXECVPE@
-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_FFLUSH = @GNULIB_FFLUSH@
-GNULIB_FFS = @GNULIB_FFS@
-GNULIB_FFSL = @GNULIB_FFSL@
-GNULIB_FFSLL = @GNULIB_FFSLL@
-GNULIB_FGETC = @GNULIB_FGETC@
-GNULIB_FGETS = @GNULIB_FGETS@
-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_FREE_POSIX = @GNULIB_FREE_POSIX@
-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_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
-GNULIB_GETUMASK = @GNULIB_GETUMASK@
-GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
-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_ISATTY = @GNULIB_ISATTY@
-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_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_MDA_ACCESS = @GNULIB_MDA_ACCESS@
-GNULIB_MDA_CHDIR = @GNULIB_MDA_CHDIR@
-GNULIB_MDA_CHMOD = @GNULIB_MDA_CHMOD@
-GNULIB_MDA_CLOSE = @GNULIB_MDA_CLOSE@
-GNULIB_MDA_CREAT = @GNULIB_MDA_CREAT@
-GNULIB_MDA_DUP = @GNULIB_MDA_DUP@
-GNULIB_MDA_DUP2 = @GNULIB_MDA_DUP2@
-GNULIB_MDA_ECVT = @GNULIB_MDA_ECVT@
-GNULIB_MDA_EXECL = @GNULIB_MDA_EXECL@
-GNULIB_MDA_EXECLE = @GNULIB_MDA_EXECLE@
-GNULIB_MDA_EXECLP = @GNULIB_MDA_EXECLP@
-GNULIB_MDA_EXECV = @GNULIB_MDA_EXECV@
-GNULIB_MDA_EXECVE = @GNULIB_MDA_EXECVE@
-GNULIB_MDA_EXECVP = @GNULIB_MDA_EXECVP@
-GNULIB_MDA_EXECVPE = @GNULIB_MDA_EXECVPE@
-GNULIB_MDA_FCLOSEALL = @GNULIB_MDA_FCLOSEALL@
-GNULIB_MDA_FCVT = @GNULIB_MDA_FCVT@
-GNULIB_MDA_FDOPEN = @GNULIB_MDA_FDOPEN@
-GNULIB_MDA_FILENO = @GNULIB_MDA_FILENO@
-GNULIB_MDA_GCVT = @GNULIB_MDA_GCVT@
-GNULIB_MDA_GETCWD = @GNULIB_MDA_GETCWD@
-GNULIB_MDA_GETPID = @GNULIB_MDA_GETPID@
-GNULIB_MDA_GETW = @GNULIB_MDA_GETW@
-GNULIB_MDA_ISATTY = @GNULIB_MDA_ISATTY@
-GNULIB_MDA_LSEEK = @GNULIB_MDA_LSEEK@
-GNULIB_MDA_MEMCCPY = @GNULIB_MDA_MEMCCPY@
-GNULIB_MDA_MKDIR = @GNULIB_MDA_MKDIR@
-GNULIB_MDA_MKTEMP = @GNULIB_MDA_MKTEMP@
-GNULIB_MDA_OPEN = @GNULIB_MDA_OPEN@
-GNULIB_MDA_PUTENV = @GNULIB_MDA_PUTENV@
-GNULIB_MDA_PUTW = @GNULIB_MDA_PUTW@
-GNULIB_MDA_READ = @GNULIB_MDA_READ@
-GNULIB_MDA_RMDIR = @GNULIB_MDA_RMDIR@
-GNULIB_MDA_STRDUP = @GNULIB_MDA_STRDUP@
-GNULIB_MDA_SWAB = @GNULIB_MDA_SWAB@
-GNULIB_MDA_TEMPNAM = @GNULIB_MDA_TEMPNAM@
-GNULIB_MDA_TZSET = @GNULIB_MDA_TZSET@
-GNULIB_MDA_UMASK = @GNULIB_MDA_UMASK@
-GNULIB_MDA_UNLINK = @GNULIB_MDA_UNLINK@
-GNULIB_MDA_WCSDUP = @GNULIB_MDA_WCSDUP@
-GNULIB_MDA_WRITE = @GNULIB_MDA_WRITE@
-GNULIB_MEMCHR = @GNULIB_MEMCHR@
-GNULIB_MEMMEM = @GNULIB_MEMMEM@
-GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
-GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
-GNULIB_MKDIR = @GNULIB_MKDIR@
-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_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_MEMALIGN = @GNULIB_POSIX_MEMALIGN@
-GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
-GNULIB_PREAD = @GNULIB_PREAD@
-GNULIB_PRINTF = @GNULIB_PRINTF@
-GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
-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_RANDOM = @GNULIB_RANDOM@
-GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
-GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
-GNULIB_READ = @GNULIB_READ@
-GNULIB_READLINK = @GNULIB_READLINK@
-GNULIB_READLINKAT = @GNULIB_READLINKAT@
-GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@
-GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
-GNULIB_REALPATH = @GNULIB_REALPATH@
-GNULIB_REMOVE = @GNULIB_REMOVE@
-GNULIB_RENAME = @GNULIB_RENAME@
-GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
-GNULIB_RMDIR = @GNULIB_RMDIR@
-GNULIB_RPMATCH = @GNULIB_RPMATCH@
-GNULIB_SCANF = @GNULIB_SCANF@
-GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@
-GNULIB_SETENV = @GNULIB_SETENV@
-GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
-GNULIB_SETLOCALE = @GNULIB_SETLOCALE@
-GNULIB_SETLOCALE_NULL = @GNULIB_SETLOCALE_NULL@
-GNULIB_SIGABBREV_NP = @GNULIB_SIGABBREV_NP@
-GNULIB_SIGDESCR_NP = @GNULIB_SIGDESCR_NP@
-GNULIB_SLEEP = @GNULIB_SLEEP@
-GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
-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_STRERRORNAME_NP = @GNULIB_STRERRORNAME_NP@
-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_TIMESPEC_GET = @GNULIB_TIMESPEC_GET@
-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_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_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
@@ -1100,8 +1120,10 @@ 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_STRVERSCMP = @HAVE_STRVERSCMP@
@@ -1115,6 +1137,7 @@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
HAVE_TIMEGM = @HAVE_TIMEGM@
HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
HAVE_UNISTD_H = @HAVE_UNISTD_H@
HAVE_UNLINKAT = @HAVE_UNLINKAT@
@@ -1165,9 +1188,9 @@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
HAVE_WMEMSET = @HAVE_WMEMSET@
HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
-HAVE__BOOL = @HAVE__BOOL@
HAVE__EXIT = @HAVE__EXIT@
HELP2MAN = @HELP2MAN@
+HOST_IS_WINDOWS_VARIABLE = @HOST_IS_WINDOWS_VARIABLE@
INCLUDE_NEXT = @INCLUDE_NEXT@
INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
INSTALL = @INSTALL@
@@ -1218,6 +1241,8 @@ MODERNIZR = @MODERNIZR@
MSGFMT = @MSGFMT@
MSGMERGE = @MSGMERGE@
MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
@@ -1287,10 +1312,13 @@ 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_CHMOD = @REPLACE_CHMOD@
REPLACE_CHOWN = @REPLACE_CHOWN@
REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
REPLACE_CREAT = @REPLACE_CREAT@
REPLACE_CTIME = @REPLACE_CTIME@
REPLACE_DPRINTF = @REPLACE_DPRINTF@
@@ -1313,6 +1341,7 @@ REPLACE_FDOPEN = @REPLACE_FDOPEN@
REPLACE_FFLUSH = @REPLACE_FFLUSH@
REPLACE_FFSLL = @REPLACE_FFSLL@
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@
@@ -1335,6 +1364,7 @@ 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_GMTIME = @REPLACE_GMTIME@
REPLACE_INITSTATE = @REPLACE_INITSTATE@
REPLACE_ISATTY = @REPLACE_ISATTY@
@@ -1351,7 +1381,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@
@@ -1390,7 +1421,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@
@@ -1421,7 +1454,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_SYMLINK = @REPLACE_SYMLINK@
@@ -1459,7 +1496,7 @@ SHELL = @SHELL@
SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
STDARG_H = @STDARG_H@
-STDBOOL_H = @STDBOOL_H@
+STDCKDINT_H = @STDCKDINT_H@
STDDEF_H = @STDDEF_H@
STDINT_H = @STDINT_H@
STRIP = @STRIP@
@@ -1516,8 +1553,10 @@ docdir = @docdir@
dvidir = @dvidir@
enable_xs = @enable_xs@
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@
@@ -1565,11 +1604,12 @@ EXTRA_DIST = pcterm.c $(TESTS) $(XFAIL_TESTS) t/README t/infodir \
ginfo_SOURCES = dir.c display.c display.h doc.h dribble.c dribble.h \
echo-area.c echo-area.h \
filesys.c filesys.h footnotes.c footnotes.h indices.c indices.h \
- info-utils.c info-utils.h info.c info.h infodoc.c infokey.c \
+ info.c info.h infodoc.c infokey.c \
infomap.c infomap.h infopath.c m-x.c man.c man.h nodemenu.c \
- nodes.c nodes.h search.c search.h session.c session.h signals.c signals.h \
+ nodes.c nodes.h scan.c scan.h \
+ search.c search.h session.c session.h signals.c signals.h \
tag.c tag.h termdep.h terminal.c terminal.h tilde.c tilde.h \
- variables.c variables.h window.c window.h
+ util.c util.h variables.c variables.h window.c window.h
nodist_ginfo_SOURCES = doc.c funs.h
@@ -1655,6 +1695,7 @@ TESTS = \
t/index-completing.sh \
t/split-index.sh \
t/index-long-nodeline.sh \
+ t/index-paren.sh \
t/empty-infopath.sh \
t/menu-sequence.sh \
t/relative-reference.sh \
@@ -1790,7 +1831,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filesys.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/footnotes.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indices.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info-utils.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infodoc.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infokey.Po@am__quote@ # am--include-marker
@@ -1802,12 +1842,14 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nodemenu.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nodes.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pseudotty.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scan.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/search.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/session.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signals.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tag.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/terminal.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tilde.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/variables.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/window.Po@am__quote@ # am--include-marker
@@ -2444,6 +2486,13 @@ t/index-long-nodeline.sh.log: t/index-long-nodeline.sh
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+t/index-paren.sh.log: t/index-paren.sh
+ @p='t/index-paren.sh'; \
+ b='t/index-paren.sh'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
t/empty-infopath.sh.log: t/empty-infopath.sh
@p='t/empty-infopath.sh'; \
b='t/empty-infopath.sh'; \
@@ -2633,7 +2682,6 @@ t/help.sh.log: t/help.sh
@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
-
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
@@ -2731,7 +2779,6 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/filesys.Po
-rm -f ./$(DEPDIR)/footnotes.Po
-rm -f ./$(DEPDIR)/indices.Po
- -rm -f ./$(DEPDIR)/info-utils.Po
-rm -f ./$(DEPDIR)/info.Po
-rm -f ./$(DEPDIR)/infodoc.Po
-rm -f ./$(DEPDIR)/infokey.Po
@@ -2743,12 +2790,14 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/nodemenu.Po
-rm -f ./$(DEPDIR)/nodes.Po
-rm -f ./$(DEPDIR)/pseudotty.Po
+ -rm -f ./$(DEPDIR)/scan.Po
-rm -f ./$(DEPDIR)/search.Po
-rm -f ./$(DEPDIR)/session.Po
-rm -f ./$(DEPDIR)/signals.Po
-rm -f ./$(DEPDIR)/tag.Po
-rm -f ./$(DEPDIR)/terminal.Po
-rm -f ./$(DEPDIR)/tilde.Po
+ -rm -f ./$(DEPDIR)/util.Po
-rm -f ./$(DEPDIR)/variables.Po
-rm -f ./$(DEPDIR)/window.Po
-rm -f Makefile
@@ -2804,7 +2853,6 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/filesys.Po
-rm -f ./$(DEPDIR)/footnotes.Po
-rm -f ./$(DEPDIR)/indices.Po
- -rm -f ./$(DEPDIR)/info-utils.Po
-rm -f ./$(DEPDIR)/info.Po
-rm -f ./$(DEPDIR)/infodoc.Po
-rm -f ./$(DEPDIR)/infokey.Po
@@ -2816,12 +2864,14 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/nodemenu.Po
-rm -f ./$(DEPDIR)/nodes.Po
-rm -f ./$(DEPDIR)/pseudotty.Po
+ -rm -f ./$(DEPDIR)/scan.Po
-rm -f ./$(DEPDIR)/search.Po
-rm -f ./$(DEPDIR)/session.Po
-rm -f ./$(DEPDIR)/signals.Po
-rm -f ./$(DEPDIR)/tag.Po
-rm -f ./$(DEPDIR)/terminal.Po
-rm -f ./$(DEPDIR)/tilde.Po
+ -rm -f ./$(DEPDIR)/util.Po
-rm -f ./$(DEPDIR)/variables.Po
-rm -f ./$(DEPDIR)/window.Po
-rm -f Makefile
diff --git a/macros/texinfo/texinfo/info/dir.c b/macros/texinfo/texinfo/info/dir.c
index d92e4ce3fd..7eb5e80ef2 100644
--- a/macros/texinfo/texinfo/info/dir.c
+++ b/macros/texinfo/texinfo/info/dir.c
@@ -1,6 +1,6 @@
/* dir.c -- how to build a special "dir" node from "localdir" files.
- Copyright 1993-2020 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,7 +18,7 @@
Originally written by Brian Fox. */
#include "info.h"
-#include "info-utils.h"
+#include "scan.h"
#include "filesys.h"
#include "tilde.h"
@@ -89,7 +89,7 @@ build_dir_node (void)
/* Space for an appended compressed file extension, like ".gz". */
#define PADDING "XXXXXXXXX"
- len = asprintf (&fullpath, "%s/dir%s", this_dir, PADDING);
+ len = xasprintf (&fullpath, "%s/dir%s", this_dir, PADDING);
fullpath[len - strlen(PADDING)] = '\0';
result = info_check_compressed (fullpath, &finfo);
@@ -248,16 +248,12 @@ dir_entry_of_infodir (char *label, char *searchdir)
NODE *dir_node;
REFERENCE *entry;
- len = asprintf (&dir_fullpath, "%s/dir%s", searchdir, PADDING);
+ if (IS_ABSOLUTE(searchdir))
+ len = xasprintf (&dir_fullpath, "%s/dir%s", searchdir, PADDING);
+ else
+ len = xasprintf (&dir_fullpath, "./%s/dir%s", searchdir, PADDING);
dir_fullpath[len - strlen(PADDING)] = '\0';
- if (!IS_ABSOLUTE(dir_fullpath))
- {
- char *tmp;
- asprintf (&tmp, "./%s", dir_fullpath);
- free (dir_fullpath);
- dir_fullpath = tmp;
- }
result = info_check_compressed (dir_fullpath, &dummy);
if (!result)
{
diff --git a/macros/texinfo/texinfo/info/display.c b/macros/texinfo/texinfo/info/display.c
index 4b8c932448..5a30ca4747 100644
--- a/macros/texinfo/texinfo/info/display.c
+++ b/macros/texinfo/texinfo/info/display.c
@@ -1,6 +1,6 @@
/* display.c -- How to display Info windows.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -20,6 +20,7 @@
#include "info.h"
#include "display.h"
#include "session.h"
+#include "util.h"
#include "tag.h"
#include "signals.h"
#include "variables.h"
diff --git a/macros/texinfo/texinfo/info/display.h b/macros/texinfo/texinfo/info/display.h
index df9dcbb978..7c596be166 100644
--- a/macros/texinfo/texinfo/info/display.h
+++ b/macros/texinfo/texinfo/info/display.h
@@ -1,6 +1,6 @@
/* display.h -- How the display in Info is done.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@
#ifndef INFO_DISPLAY_H
#define INFO_DISPLAY_H
-#include "info-utils.h"
+#include "scan.h"
#include "terminal.h"
typedef struct {
diff --git a/macros/texinfo/texinfo/info/doc.h b/macros/texinfo/texinfo/info/doc.h
index 931237fd87..26ed41f80c 100644
--- a/macros/texinfo/texinfo/info/doc.h
+++ b/macros/texinfo/texinfo/info/doc.h
@@ -1,6 +1,6 @@
/* doc.h -- Structures associating function pointers with documentation.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/dribble.c b/macros/texinfo/texinfo/info/dribble.c
index bf6cac2f29..413dd70dcf 100644
--- a/macros/texinfo/texinfo/info/dribble.c
+++ b/macros/texinfo/texinfo/info/dribble.c
@@ -1,6 +1,6 @@
/* dribble.c -- dribble files for Info.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/dribble.h b/macros/texinfo/texinfo/info/dribble.h
index 41274982e5..75507290d2 100644
--- a/macros/texinfo/texinfo/info/dribble.h
+++ b/macros/texinfo/texinfo/info/dribble.h
@@ -1,6 +1,6 @@
/* dribble.h -- Functions and vars declared in dribble.c.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/echo-area.c b/macros/texinfo/texinfo/info/echo-area.c
index 89296a7118..f485e43f76 100644
--- a/macros/texinfo/texinfo/info/echo-area.c
+++ b/macros/texinfo/texinfo/info/echo-area.c
@@ -1,6 +1,6 @@
/* echo-area.c -- how to read a line in the echo area.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -20,7 +20,8 @@
#include "info.h"
#include "session.h"
#include "display.h"
-#include "info-utils.h"
+#include "scan.h"
+#include "util.h"
#include "echo-area.h"
/* Non-zero means that C-g was used to quit reading input. */
diff --git a/macros/texinfo/texinfo/info/echo-area.h b/macros/texinfo/texinfo/info/echo-area.h
index 6af6d90ec0..33e4eabf35 100644
--- a/macros/texinfo/texinfo/info/echo-area.h
+++ b/macros/texinfo/texinfo/info/echo-area.h
@@ -1,6 +1,6 @@
/* echo-area.h -- Functions used in reading information from the echo area.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/filesys.c b/macros/texinfo/texinfo/info/filesys.c
index 3def765757..99497bbfb0 100644
--- a/macros/texinfo/texinfo/info/filesys.c
+++ b/macros/texinfo/texinfo/info/filesys.c
@@ -1,6 +1,6 @@
/* filesys.c -- filesystem specific functions.
- Copyright 1993-2021 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -67,6 +67,7 @@ static COMPRESSION_ALIST compress_suffixes[] = {
{ ".z", "gunzip" },
{ ".lzma", "unlzma" },
{ ".Z", "uncompress" },
+ { ".zst", "unzstd --rm -q" },
{ ".Y", "unyabba" },
#ifdef __MSDOS__
{ "gz", "gunzip" },
@@ -104,7 +105,7 @@ info_find_fullpath (char *partial, struct stat *finfo)
fullpath = info_add_extension (0, partial, finfo);
}
- /* Tilde expansion. FIXME: Not needed, because done by shell. */
+ /* Tilde expansion. Could come from user input in echo area. */
else if (partial[0] == '~')
{
partial = tilde_expand_word (partial);
@@ -164,7 +165,7 @@ info_file_find_next_in_path (char *filename, int *path_index, struct stat *finfo
{
/* Prefix "./" to it. */
char *s;
- asprintf (&s, "%s%s", "./", with_extension);
+ xasprintf (&s, "%s%s", "./", with_extension);
free (with_extension);
return s;
}
diff --git a/macros/texinfo/texinfo/info/filesys.h b/macros/texinfo/texinfo/info/filesys.h
index 4018b7c91f..10173b87e3 100644
--- a/macros/texinfo/texinfo/info/filesys.h
+++ b/macros/texinfo/texinfo/info/filesys.h
@@ -1,6 +1,6 @@
/* filesys.h -- external declarations for filesys.c.
- Copyright 1993-2020 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/footnotes.c b/macros/texinfo/texinfo/info/footnotes.c
index eeedc667e5..4eddc2478b 100644
--- a/macros/texinfo/texinfo/info/footnotes.c
+++ b/macros/texinfo/texinfo/info/footnotes.c
@@ -1,6 +1,6 @@
/* footnotes.c -- Some functions for manipulating footnotes.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,7 +19,8 @@
#include "info.h"
#include "session.h"
-#include "info-utils.h"
+#include "scan.h"
+#include "util.h"
#include "footnotes.h"
/* Nonzero means attempt to show footnotes when displaying a new window. */
@@ -119,7 +120,7 @@ make_footnotes_node (NODE *node)
char *header;
long text_start = fn_start;
- asprintf (&header,
+ xasprintf (&header,
"*** Footnotes appearing in the node '%s' ***\n",
node->nodename);
@@ -248,31 +249,26 @@ info_get_or_remove_footnotes (WINDOW *window)
DECLARE_INFO_COMMAND (info_show_footnotes,
_("Show the footnotes associated with this node in another window"))
{
- /* A negative argument means just make the window go away. */
- if (count < 0)
- {
- WINDOW *fn_win = find_footnotes_window ();
+ /* Make the window go away if it is already showing. */
+ WINDOW *fn_win = find_footnotes_window ();
- /* If there is an old footnotes window, and it isn't the only window
- on the screen, delete it. */
- if (fn_win && windows->next)
+ /* If there is an old footnotes window, and it isn't the only window
+ on the screen, delete it. */
+ if (fn_win && windows->next)
+ {
info_delete_window_internal (fn_win);
- }
- else
- {
- int result;
+ return;
+ }
- result = info_get_or_remove_footnotes (window);
- switch (result)
- {
- case FN_UNFOUND:
- info_error ("%s", msg_no_foot_node);
- break;
+ switch (info_get_or_remove_footnotes (window))
+ {
+ case FN_UNFOUND:
+ info_error ("%s", msg_no_foot_node);
+ break;
- case FN_UNABLE:
- info_error ("%s", msg_win_too_small);
- break;
- }
- }
+ case FN_UNABLE:
+ info_error ("%s", msg_win_too_small);
+ break;
+ }
}
diff --git a/macros/texinfo/texinfo/info/footnotes.h b/macros/texinfo/texinfo/info/footnotes.h
index 61107d74a9..a0e75eacab 100644
--- a/macros/texinfo/texinfo/info/footnotes.h
+++ b/macros/texinfo/texinfo/info/footnotes.h
@@ -1,6 +1,6 @@
/* footnotes.h -- Some functions for manipulating footnotes.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/indices.c b/macros/texinfo/texinfo/info/indices.c
index 6f5ef8a1f1..349775b1d2 100644
--- a/macros/texinfo/texinfo/info/indices.c
+++ b/macros/texinfo/texinfo/info/indices.c
@@ -1,6 +1,6 @@
/* indices.c -- deal with an Info file index.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,7 +18,8 @@
Originally written by Brian Fox. */
#include "info.h"
-#include "info-utils.h"
+#include "scan.h"
+#include "util.h"
#include "session.h"
#include "echo-area.h"
#include "indices.h"
@@ -32,7 +33,7 @@ int show_index_match = 1;
static REFERENCE **index_index = NULL;
/* The offset of the most recently selected index element. */
-static int index_offset = 0;
+static int index_offset = -1;
/* Whether we are doing initial index search. */
static int index_initial = 0;
@@ -263,7 +264,7 @@ DECLARE_INFO_COMMAND (info_index_search,
/* If the search failed, return the index offset to where it belongs. */
if (index_offset == old_offset)
- index_offset = 0;
+ index_offset = -1;
}
/* Return true if ENT->label matches "S( <[0-9]+>)?", where S stands
@@ -338,7 +339,7 @@ next_index_match (FILE_BUFFER *fb, char *string, int offset, int dir,
if (i < 0 || !index_index[i])
{
- offset = 0;
+ offset = -1;
index_initial = 1;
}
}
@@ -355,7 +356,7 @@ next_index_match (FILE_BUFFER *fb, char *string, int offset, int dir,
if (i < 0 || !index_index[i])
{
- offset = 0;
+ offset = -1;
index_initial = 0;
index_partial = 1;
}
@@ -471,11 +472,11 @@ DECLARE_INFO_COMMAND (info_next_index_match,
/* If that failed, print an error. */
if (!result)
{
- info_error (index_offset > 0 ?
+ info_error (index_offset >= 0 ?
_("No more index entries containing '%s'") :
_("No index entries containing '%s'"),
index_search);
- index_offset = 0;
+ index_offset = -1;
return;
}
@@ -651,9 +652,9 @@ DECLARE_INFO_COMMAND (info_index_apropos,
struct text_buffer message;
if (index_search)
- asprintf (&prompt, "%s [%s]: ", _("Index apropos"), index_search);
+ xasprintf (&prompt, "%s [%s]: ", _("Index apropos"), index_search);
else
- asprintf (&prompt, "%s: ", _("Index apropos"));
+ xasprintf (&prompt, "%s: ", _("Index apropos"));
line = info_read_in_echo_area (prompt);
free (prompt);
@@ -824,7 +825,7 @@ create_virtual_index (FILE_BUFFER *file_buffer, char *index_search)
cnt = 0;
- index_offset = 0;
+ index_offset = -1;
index_initial = 0;
index_partial = 0;
while (1)
@@ -849,7 +850,7 @@ create_virtual_index (FILE_BUFFER *file_buffer, char *index_search)
}
node = info_create_node ();
- asprintf (&node->nodename, "Index for '%s'", index_search);
+ xasprintf (&node->nodename, "Index for '%s'", index_search);
node->fullpath = file_buffer->filename;
node->contents = text_buffer_base (&text);
node->nodelen = text_buffer_off (&text) - 1;
@@ -886,9 +887,9 @@ DECLARE_INFO_COMMAND (info_virtual_index,
/* Default to last search if there is one. */
if (index_search)
- asprintf (&prompt, "%s [%s]: ", _("Index topic"), index_search);
+ xasprintf (&prompt, "%s [%s]: ", _("Index topic"), index_search);
else
- asprintf (&prompt, "%s: ", _("Index topic"));
+ xasprintf (&prompt, "%s: ", _("Index topic"));
line = info_read_maybe_completing (prompt, index_index);
free (prompt);
diff --git a/macros/texinfo/texinfo/info/indices.h b/macros/texinfo/texinfo/info/indices.h
index 4a27c7bbc8..d38927e539 100644
--- a/macros/texinfo/texinfo/info/indices.h
+++ b/macros/texinfo/texinfo/info/indices.h
@@ -1,6 +1,6 @@
/* indices.h -- Functions defined in indices.c.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/info-utils.h b/macros/texinfo/texinfo/info/info-utils.h
deleted file mode 100644
index 75f65de704..0000000000
--- a/macros/texinfo/texinfo/info/info-utils.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/* info-utils.h -- Exported functions and variables from info-utils.c.
-
- Copyright 1993-2019 Free Software Foundation, Inc.
-
- This program 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 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-
- Originally written by Brian Fox. */
-
-#ifndef INFO_UTILS_H
-#define INFO_UTILS_H
-
-#include "nodes.h"
-#include "window.h"
-#include "search.h"
-
-#if HAVE_ICONV
-# include <iconv.h>
-#endif
-
-/* Variable which holds the most recent filename parsed as a result of
- calling info_parse_xxx (). */
-extern char *info_parsed_filename;
-
-/* Variable which holds the most recent nodename parsed as a result of
- calling info_parse_xxx (). */
-extern char *info_parsed_nodename;
-
-/* Parse the filename and nodename out of STRING. */
-void info_parse_node (char *string);
-
-long read_quoted_string (char *start, char *terminator, int lines,
- char **output);
-
-void scan_node_contents (NODE *node, FILE_BUFFER *fb, TAG **tag_ptr);
-
-/* Get the menu entry associated with LABEL in NODE. Return a
- pointer to the reference if found, or NULL. If SLOPPY, accept
- initial substrings and check insensitively to case. */
-REFERENCE *info_get_menu_entry_by_label (NODE *node, char *label,
- int sloppy);
-
-/* A utility function for concatenating REFERENCE **. Returns a new
- REFERENCE ** which is the concatenation of REF1 and REF2. The REF1
- and REF2 arrays are freed, but their contents are not. */
-REFERENCE **info_concatenate_references (REFERENCE **ref1, REFERENCE **ref2);
-
-/* Copy an existing reference into new memory. */
-REFERENCE *info_copy_reference (REFERENCE *src);
-
-/* Copy a list of existing references into new memory. */
-REFERENCE **info_copy_references (REFERENCE **ref1);
-
-/* Free the data associated with a single REF */
-void info_reference_free (REFERENCE *ref);
-
-/* Free the data associated with REFERENCES. */
-void info_free_references (REFERENCE **references);
-
-/* Create new REFERENCE structure. */
-REFERENCE *info_new_reference (char *filename, char *nodename);
-
-/* Search for sequences of whitespace or newlines in STRING, replacing
- all such sequences with just a single space. Remove whitespace from
- start and end of string. */
-void canonicalize_whitespace (char *string);
-
-/* Used with multibyte iterator mbi_iterator_t. */
-#define ITER_SETBYTES(iter,n) ((iter).cur.bytes = n)
-#define ITER_LIMIT(iter) ((iter).limit - (iter).cur.ptr)
-
-int ansi_escape (mbi_iterator_t iter, size_t *plen);
-
-/* Return a pointer to a string which is the printed representation
- of CHARACTER if it were printed at HPOS. */
-char *printed_representation (mbi_iterator_t *iter,
- int *delim, size_t pl_chars,
- size_t *pchars, size_t *pbytes);
-
-FILE_BUFFER *file_buffer_of_window (WINDOW *window);
-
-char *node_printed_rep (NODE *node);
-
-/* Return a pointer to the part of PATHNAME that simply defines the file. */
-char *filename_non_directory (char *pathname);
-
-/* Return non-zero if NODE is one especially created by Info. */
-int internal_info_node_p (NODE *node);
-
-/* Make NODE appear to be one especially created by Info, and give it NAME. */
-void name_internal_node (NODE *node, char *name);
-
-/* Return the window displaying NAME, the name of an internally created
- Info window. */
-WINDOW *get_internal_info_window (char *name);
-
-struct text_buffer
-{
- char *base;
- size_t size;
- size_t off;
-};
-
-#define MIN_TEXT_BUF_ALLOC 512
-
-void text_buffer_init (struct text_buffer *buf);
-void text_buffer_free (struct text_buffer *buf);
-void text_buffer_alloc (struct text_buffer *buf, size_t len);
-size_t text_buffer_vprintf (struct text_buffer *buf, const char *format,
- va_list ap);
-size_t text_buffer_space_left (struct text_buffer *buf);
-#if HAVE_ICONV
-size_t text_buffer_iconv (struct text_buffer *buf, iconv_t iconv_state,
- ICONV_CONST char **inbuf, size_t *inbytesleft);
-#endif
-size_t text_buffer_add_string (struct text_buffer *buf, const char *str,
- size_t len);
-size_t text_buffer_fill (struct text_buffer *buf, int c, size_t len);
-void text_buffer_add_char (struct text_buffer *buf, int c);
-size_t text_buffer_printf (struct text_buffer *buf, const char *format, ...);
-#define text_buffer_reset(buf) ((buf)->off = 0)
-#define text_buffer_base(buf) ((buf)->base)
-#define text_buffer_off(buf) ((buf)->off)
-
-struct info_namelist_entry;
-int info_namelist_add (struct info_namelist_entry **ptop, const char *name);
-void info_namelist_free (struct info_namelist_entry *top);
-
-#if defined(__MSDOS__) || defined(__MINGW32__)
-int fncmp (const char *fn1, const char *fn2);
-#else
-# define fncmp(s,t) strcmp(s,t)
-#endif
-
-#endif /* not INFO_UTILS_H */
diff --git a/macros/texinfo/texinfo/info/info.c b/macros/texinfo/texinfo/info/info.c
index 072782552b..26713f3e03 100644
--- a/macros/texinfo/texinfo/info/info.c
+++ b/macros/texinfo/texinfo/info/info.c
@@ -1,6 +1,6 @@
/* info.c -- Display nodes of Info files in multiple windows.
- Copyright 1993-2021 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,7 +19,8 @@
#include "info.h"
#include "filesys.h"
-#include "info-utils.h"
+#include "scan.h"
+#include "util.h"
#include "session.h"
#include "indices.h"
#include "dribble.h"
@@ -182,7 +183,7 @@ get_initial_file (int *argc, char ***argv, char **error)
/* Prefix "./" to the filename to prevent a lookup
in INFOPATH. */
char *s;
- asprintf (&s, "%s%s", "./", user_filename);
+ xasprintf (&s, "%s%s", "./", user_filename);
free (user_filename);
user_filename = s;
}
@@ -274,25 +275,24 @@ get_initial_file (int *argc, char ***argv, char **error)
return;
}
else
- asprintf (error, _("No menu item '%s' in node '%s'"),
+ xasprintf (error, _("No menu item '%s' in node '%s'"),
(*argv)[0], "(dir)Top");
}
/* Fall back to loading man page. */
{
- NODE *man_node;
+ int man_exists;
debug (3, ("falling back to manpage node"));
- man_node = get_manpage_node ((*argv)[0]);
- if (man_node)
+ man_exists = check_manpage_node ((*argv)[0]);
+ if (man_exists)
{
add_pointer_to_array
(info_new_reference (MANPAGE_FILE_BUFFER_NAME, (*argv)[0]),
ref_index, ref_list, ref_slots, 2);
initial_file = MANPAGE_FILE_BUFFER_NAME;
- free (man_node);
return;
}
}
@@ -412,7 +412,7 @@ add_initial_nodes (int argc, char **argv, char **error)
if (!node_nodename)
{
free (*error);
- asprintf (error, _("Cannot find node '%s'"),
+ xasprintf (error, _("Cannot find node '%s'"),
user_nodenames[i]);
continue;
}
@@ -860,7 +860,7 @@ main (int argc, char *argv[])
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n\
This is free software: you are free to change and redistribute it.\n\
There is NO WARRANTY, to the extent permitted by law.\n"),
- "2021");
+ "2022");
exit (EXIT_SUCCESS);
}
@@ -1058,11 +1058,14 @@ There is NO WARRANTY, to the extent permitted by law.\n"),
/* --output */
if (user_output_filename)
{
- if (error)
- info_error ("%s", error);
-
preprocess_nodes_p = 0;
dump_nodes_to_file (ref_list, user_output_filename, dump_subnodes);
+
+ if (error)
+ {
+ info_error ("%s", error);
+ exit (1);
+ }
exit (0);
}
@@ -1086,6 +1089,9 @@ There is NO WARRANTY, to the extent permitted by law.\n"),
static void
info_short_help (void)
{
+ /* Note: split usage information up into separate strings when usage
+ revised to make it easier for translators. */
+
printf (_("\
Usage: %s [OPTION]... [MENU-ITEM...]\n\
\n\
@@ -1105,9 +1111,6 @@ Frequently-used options:\n\
-n, --node=NODENAME specify nodes in first visited Info file\n\
-o, --output=FILE output selected nodes to FILE"));
- puts (_("\
- -O, --show-options, --usage go to command-line options node"));
-
#if defined(__MSDOS__) || defined(__MINGW32__)
puts (_("\
-b, --speech-friendly be friendly to speech synthesizers"));
@@ -1128,18 +1131,27 @@ items relative to the initial node visited."));
puts (_("\n\
For a summary of key bindings, type H within Info."));
+ puts ("");
- puts (_("\n\
-Examples:\n\
- info show top-level dir menu\n\
- info info-stnd show the manual for this Info program\n\
- info emacs start at emacs node from top-level dir\n\
- info emacs buffers select buffers menu entry in emacs manual\n\
- info emacs -n Files start at Files node within emacs manual\n\
- info '(emacs)Files' alternative way to start at Files node\n\
- info --show-options emacs start at node with emacs' command line options\n\
+puts (_("\
+Examples:"));
+
+puts (_("\
+ info show top-level dir menu"));
+puts (_("\
+ info info-stnd show the manual for this Info program"));
+puts (_("\
+ info emacs start at emacs node from top-level dir"));
+puts (_("\
+ info emacs buffers select buffers menu entry in emacs manual"));
+puts (_("\
+ info emacs -n Files start at Files node within emacs manual"));
+puts (_("\
+ info '(emacs)Files' alternative way to start at Files node"));
+puts (_("\
info --subnodes -o out.txt emacs\n\
- dump entire emacs manual to out.txt\n\
+ dump entire emacs manual to out.txt"));
+puts (_("\
info -f ./foo.info show file ./foo.info, not searching dir"));
puts ("");
diff --git a/macros/texinfo/texinfo/info/info.h b/macros/texinfo/texinfo/info/info.h
index 0280b3b34e..8082725146 100644
--- a/macros/texinfo/texinfo/info/info.h
+++ b/macros/texinfo/texinfo/info/info.h
@@ -1,6 +1,6 @@
-/* info.h -- Header file which includes all of the other headers.
+/* info.h -- Header file included everywhere
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -32,6 +32,8 @@ typedef char *CFunction ();
#include "mbiter.h"
#include "mbchar.h"
+int xasprintf (char **ptr, const char *template, ...);
+
extern char *program_name;
#if !defined (whitespace)
diff --git a/macros/texinfo/texinfo/info/infodoc.c b/macros/texinfo/texinfo/info/infodoc.c
index b9cb00d1d5..4a3dcf88b5 100644
--- a/macros/texinfo/texinfo/info/infodoc.c
+++ b/macros/texinfo/texinfo/info/infodoc.c
@@ -1,6 +1,6 @@
/* infodoc.c -- functions which build documentation nodes.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,7 +18,8 @@
Originally written by Brian Fox. */
#include "info.h"
-#include "info-utils.h"
+#include "scan.h"
+#include "util.h"
#include "filesys.h"
#include "session.h"
#include "doc.h"
@@ -713,18 +714,24 @@ replace_in_documentation (const char *string, int help_is_only_window_p)
/* Find a key which invokes this function in the info_keymap. */
command = named_function (fun_name);
- free (rep_name);
/* If the internal documentation string fails, there is a
- serious problem with the associated command's documentation.
- We croak so that it can be fixed immediately. */
+ problem with the associated command's documentation (probably
+ in the translation). */
if (!command)
- abort ();
-
- rep = where_is (info_keymap, command);
- if (!rep)
- rep = "N/A";
+ {
+ info_error ("bug: no command <%s>\n", rep_name);
+ sleep (1);
+ rep = "BUG";
+ }
+ else
+ {
+ rep = where_is (info_keymap, command);
+ if (!rep)
+ rep = "N/A";
+ }
replen = strlen (rep);
+ free (rep_name);
if (fmt)
text_buffer_printf (&txtresult, fmt, rep);
diff --git a/macros/texinfo/texinfo/info/infokey.c b/macros/texinfo/texinfo/info/infokey.c
index c6e3d428f0..6798094f9d 100644
--- a/macros/texinfo/texinfo/info/infokey.c
+++ b/macros/texinfo/texinfo/info/infokey.c
@@ -1,6 +1,6 @@
/* infokey.c -- read ~/.infokey
- Copyright 1999-2019 Free Software Foundation, Inc.
+ Copyright 1999-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/infomap.c b/macros/texinfo/texinfo/info/infomap.c
index 3038994992..1d24edb626 100644
--- a/macros/texinfo/texinfo/info/infomap.c
+++ b/macros/texinfo/texinfo/info/infomap.c
@@ -1,6 +1,6 @@
/* infomap.c -- keymaps for Info.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/infomap.h b/macros/texinfo/texinfo/info/infomap.h
index b144023718..b21e5f8eff 100644
--- a/macros/texinfo/texinfo/info/infomap.h
+++ b/macros/texinfo/texinfo/info/infomap.h
@@ -1,6 +1,6 @@
/* infomap.h -- description of a keymap in Info and related functions.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/infopath.c b/macros/texinfo/texinfo/info/infopath.c
index 18806d5404..d48a1588bb 100644
--- a/macros/texinfo/texinfo/info/infopath.c
+++ b/macros/texinfo/texinfo/info/infopath.c
@@ -1,6 +1,6 @@
/* infopath.c -- INFOPATH handling.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,7 +17,8 @@
*/
#include "info.h"
-#include "info-utils.h"
+#include "scan.h"
+#include "util.h"
#include "session.h"
#include "filesys.h"
@@ -198,7 +199,7 @@ infopath_add (char *path)
int idx = 0;
char *dirname;
- while (dirname = extract_colon_unit (path, &idx))
+ while ((dirname = extract_colon_unit (path, &idx)))
{
if (!strcmp ("PATH", dirname))
{
diff --git a/macros/texinfo/texinfo/info/m-x.c b/macros/texinfo/texinfo/info/m-x.c
index 2515eee154..669d999738 100644
--- a/macros/texinfo/texinfo/info/m-x.c
+++ b/macros/texinfo/texinfo/info/m-x.c
@@ -1,6 +1,6 @@
/* m-x.c -- Meta-x minibuffer reader.
- Copyright 1993-2021 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -99,9 +99,9 @@ DECLARE_INFO_COMMAND (info_execute_command,
abort();
if (info_explicit_arg || count != 1)
- asprintf (&prompt, "%d %s ", count, keys);
+ xasprintf (&prompt, "%d %s ", count, keys);
else
- asprintf (&prompt, "%s ", keys);
+ xasprintf (&prompt, "%s ", keys);
/* Ask the completer to read a reference for us. */
line = read_function_name (prompt, window);
diff --git a/macros/texinfo/texinfo/info/makedoc.c b/macros/texinfo/texinfo/info/makedoc.c
index 9626e0d9e9..e7d98d64f9 100644
--- a/macros/texinfo/texinfo/info/makedoc.c
+++ b/macros/texinfo/texinfo/info/makedoc.c
@@ -1,6 +1,6 @@
/* makedoc.c -- make doc.c and funs.h from input files.
- Copyright 1993-2021 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/man.c b/macros/texinfo/texinfo/info/man.c
index 8935f27536..c4877ac860 100644
--- a/macros/texinfo/texinfo/info/man.c
+++ b/macros/texinfo/texinfo/info/man.c
@@ -1,7 +1,6 @@
/* man.c: How to read and format man files.
- Copyright 1995-2019 Free Software Foundation,
- Inc.
+ Copyright 1995-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -32,6 +31,7 @@
#include "nodes.h"
#include "man.h"
#include "variables.h"
+#include "util.h"
#if !defined (_POSIX_VERSION)
#define pid_t int
@@ -56,12 +56,75 @@ static char const * const exec_extensions[] = { "", NULL };
static REFERENCE **xrefs_of_manpage (NODE *node);
static char *read_from_fd (int fd);
static char *get_manpage_contents (char *pagename);
+static char *find_man_formatter (void);
/* We store the contents of retrieved man pages in here. */
static NODE **manpage_nodes = 0;
size_t manpage_node_index = 0;
size_t manpage_node_slots = 0;
+#if PIPE_USE_FORK
+
+/* Check if a man page exists. Use "man -w" for this rather than getting
+ the contents of the man page. This is faster if we are running
+ "info --where" and we don't need the contents. */
+int
+check_manpage_node (char *pagename)
+{
+ pid_t child;
+ int pid_status = 0;
+ NODE *man_node;
+
+ child = fork ();
+ if (child == -1)
+ return 0; /* couldn't fork */
+
+ if (!child)
+ {
+ char *formatter;
+ (void)! freopen (NULL_DEVICE, "w", stdout);
+ (void)! freopen (NULL_DEVICE, "w", stderr);
+ /* avoid "unused result" warning with ! operator */
+ formatter = find_man_formatter();
+ if (!formatter)
+ exit (1);
+ execl (formatter, formatter, "-w", pagename, (void *) 0);
+ exit (2); /* exec failed */
+ }
+ else
+ {
+ wait (&pid_status);
+ }
+
+ if (pid_status != 2)
+ return !pid_status;
+
+ /* Possibly "man -w" wasn't recognized. */
+ man_node = get_manpage_node (pagename);
+ if (man_node)
+ {
+ free (man_node);
+ return 1;
+ }
+ return 0;
+}
+
+#else /* !PIPE_USE_FORK */
+
+int
+check_manpage_node (char *pagename)
+{
+ NODE *man_node = get_manpage_node (pagename);
+ if (man_node)
+ {
+ free (man_node);
+ return 1;
+ }
+ return 0;
+}
+
+#endif /* !PIPE_USE_FORK */
+
NODE *
get_manpage_node (char *pagename)
{
@@ -170,9 +233,17 @@ executable_file_in_path (char *filename, char *path)
static char *
find_man_formatter (void)
{
- char *man_command = getenv ("INFO_MAN_COMMAND");
- return man_command ? man_command :
- executable_file_in_path ("man", getenv ("PATH"));
+ static char *man_formatter;
+ char *man_command;
+
+ if (man_formatter)
+ return man_formatter;
+
+ man_command = getenv ("INFO_MAN_COMMAND");
+ man_formatter = man_command ? man_command
+ : executable_file_in_path ("man", getenv ("PATH"));
+
+ return man_formatter;
}
static char *manpage_pagename = NULL;
@@ -302,11 +373,16 @@ get_manpage_from_formatter (char *formatter_args[])
pid_t child;
int formatter_status = 0;
+ putenv ("MAN_KEEP_FORMATTING=1"); /* Get codes for bold etc. */
+ putenv ("GROFF_SGR=1"); /* for Debian whose man outputs
+ 'overstrike' sequences without this */
+
/* Open a pipe to this program, read the output, and save it away
in FORMATTED_PAGE. The reader end of the pipe is pipes[0]; the
writer end is pipes[1]. */
#if PIPE_USE_FORK
- pipe (pipes);
+ if (pipe (pipes) == -1)
+ return 0; /* Creating pipe failed. */
child = fork ();
if (child == -1)
@@ -325,8 +401,9 @@ get_manpage_from_formatter (char *formatter_args[])
{ /* In the child, close the read end of the pipe, make the write end
of the pipe be stdout, and execute the man page formatter. */
close (pipes[0]);
- freopen (NULL_DEVICE, "w", stderr);
- freopen (NULL_DEVICE, "r", stdin);
+ (void)! freopen (NULL_DEVICE, "w", stderr);
+ (void)! freopen (NULL_DEVICE, "r", stdin);
+ /* avoid "unused result" warning with ! operator */
dup2 (pipes[1], fileno (stdout));
execv (formatter_args[0], formatter_args);
diff --git a/macros/texinfo/texinfo/info/man.h b/macros/texinfo/texinfo/info/man.h
index cf0e57b363..034c2e77aa 100644
--- a/macros/texinfo/texinfo/info/man.h
+++ b/macros/texinfo/texinfo/info/man.h
@@ -1,6 +1,6 @@
/* man.h: Defines and external function declarations for man.c.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -22,6 +22,7 @@
#define MANPAGE_FILE_BUFFER_NAME "*manpages*"
+int check_manpage_node (char *pagename);
extern NODE *get_manpage_node (char *pagename);
#endif /* INFO_MAN_H */
diff --git a/macros/texinfo/texinfo/info/nodemenu.c b/macros/texinfo/texinfo/info/nodemenu.c
index a870c07642..9655cc3823 100644
--- a/macros/texinfo/texinfo/info/nodemenu.c
+++ b/macros/texinfo/texinfo/info/nodemenu.c
@@ -1,6 +1,6 @@
/* nodemenu.c -- produce a menu of all visited nodes.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,6 +19,8 @@
#include "info.h"
#include "session.h"
+#include "util.h"
+#include "scan.h"
#include "echo-area.h"
#include "variables.h"
diff --git a/macros/texinfo/texinfo/info/nodes.c b/macros/texinfo/texinfo/info/nodes.c
index 9a52c807a3..772c55bf7f 100644
--- a/macros/texinfo/texinfo/info/nodes.c
+++ b/macros/texinfo/texinfo/info/nodes.c
@@ -1,6 +1,6 @@
/* nodes.c -- how to get an Info file and node.
- Copyright 1993-2021 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -22,7 +22,8 @@
#include "nodes.h"
#include "search.h"
#include "filesys.h"
-#include "info-utils.h"
+#include "scan.h"
+#include "util.h"
#include "tag.h"
#include "man.h"
#include "variables.h"
diff --git a/macros/texinfo/texinfo/info/nodes.h b/macros/texinfo/texinfo/info/nodes.h
index 82b09d8ace..42af96e363 100644
--- a/macros/texinfo/texinfo/info/nodes.h
+++ b/macros/texinfo/texinfo/info/nodes.h
@@ -1,6 +1,6 @@
/* nodes.h -- How we represent nodes internally.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/pcterm.c b/macros/texinfo/texinfo/info/pcterm.c
index aeccb76f29..b9d20b592a 100644
--- a/macros/texinfo/texinfo/info/pcterm.c
+++ b/macros/texinfo/texinfo/info/pcterm.c
@@ -1,6 +1,6 @@
/* pcterm.c -- How to handle the PC terminal for Info under MS-DOS/MS-Windows.
- Copyright 1998-2019 Free Software Foundation, Inc.
+ Copyright 1998-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/pseudotty.c b/macros/texinfo/texinfo/info/pseudotty.c
index 9ccbd36274..acc2590912 100644
--- a/macros/texinfo/texinfo/info/pseudotty.c
+++ b/macros/texinfo/texinfo/info/pseudotty.c
@@ -2,7 +2,7 @@
standard output. Read and ignore any data sent to terminal. This
is so we can run tests interactively without messing up the screen.
- Copyright 2014-2019 Free Software Foundation, Inc.
+ Copyright 2014-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/info-utils.c b/macros/texinfo/texinfo/info/scan.c
index e692183020..a52117ed2c 100644
--- a/macros/texinfo/texinfo/info/info-utils.c
+++ b/macros/texinfo/texinfo/info/scan.c
@@ -1,6 +1,6 @@
-/* info-utils.c -- miscellanous.
+/* scan.c -- scanning Info files and nodes
- Copyright 1993-2020 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,7 +19,8 @@
#include "info.h"
#include "session.h"
-#include "info-utils.h"
+#include "scan.h"
+#include "util.h"
#include "tag.h"
#include <langinfo.h>
@@ -425,145 +426,6 @@ canonicalize_whitespace (char *string)
free (temp);
}
-/* If ITER points to an ANSI escape sequence, process it, set PLEN to its
- length in bytes, and return 1.
- Otherwise, return 0.
- */
-int
-ansi_escape (mbi_iterator_t iter, size_t *plen)
-{
- if (raw_escapes_p && *mbi_cur_ptr (iter) == '\033' && mbi_avail (iter))
- {
- mbi_advance (iter);
- if (*mbi_cur_ptr (iter) == '[' && mbi_avail (iter))
- {
- ITER_SETBYTES (iter, 1);
- mbi_advance (iter);
- if (isdigit (*mbi_cur_ptr (iter)) && mbi_avail (iter))
- {
- ITER_SETBYTES (iter, 1);
- mbi_advance (iter);
- if (*mbi_cur_ptr (iter) == 'm')
- {
- *plen = 4;
- return 1;
- }
- else if (isdigit (*mbi_cur_ptr (iter)) && mbi_avail (iter))
- {
- ITER_SETBYTES (iter, 1);
- mbi_advance (iter);
- if (*mbi_cur_ptr (iter) == 'm')
- {
- *plen = 5;
- return 1;
- }
- }
- }
- }
- }
-
- return 0;
-}
-
-static struct text_buffer printed_rep = { 0 };
-
-/* Return pointer to string that is the printed representation of character
- (or other logical unit) at ITER if it were printed at screen column
- PL_CHARS. Use ITER_SETBYTES (info-utils.h) on ITER if we need to advance
- past a unit that the multibyte iteractor doesn't know about (like an ANSI
- escape sequence). If ITER points at an end-of-line character, set *DELIM to
- this character. *PCHARS gets the number of screen columns taken up by
- outputting the return value, and *PBYTES the number of bytes in returned
- string. Return value is not null-terminated. Return value must not be
- freed by caller. */
-char *
-printed_representation (mbi_iterator_t *iter, int *delim, size_t pl_chars,
- size_t *pchars, size_t *pbytes)
-{
- struct text_buffer *rep = &printed_rep;
-
- char *cur_ptr = (char *) mbi_cur_ptr (*iter);
- size_t cur_len = mb_len (mbi_cur (*iter));
-
- text_buffer_reset (&printed_rep);
-
- if (mb_isprint (mbi_cur (*iter)))
- {
- /* cur.wc gives a wchar_t object. See mbiter.h in the
- gnulib/lib directory. */
- *pchars = wcwidth ((*iter).cur.wc);
- *pbytes = cur_len;
- return cur_ptr;
- }
- else if (cur_len == 1)
- {
- if (*cur_ptr == '\n' || *cur_ptr == '\r')
- {
- /* If this is a CRLF line ending, ignore this character. */
- if (*cur_ptr == '\r' && cur_ptr[1] == '\n')
- {
- *pchars = 0;
- *pbytes = 0;
- return cur_ptr;
- }
-
- *pchars = 1;
- *pbytes = cur_len;
- *delim = *cur_ptr;
- text_buffer_add_char (rep, ' ');
- return cur_ptr;
- }
- else if (ansi_escape (*iter, &cur_len))
- {
- *pchars = 0;
- *pbytes = cur_len;
- ITER_SETBYTES (*iter, cur_len);
-
- return cur_ptr;
- }
- else if (*cur_ptr == '\t')
- {
- int i = 0;
-
- *pchars = ((pl_chars + 8) & 0xf8) - pl_chars;
- *pbytes = *pchars;
-
- /* We must output spaces instead of the tab because a tab may
- not clear characters already on the screen. */
- for (i = 0; i < *pbytes; i++)
- text_buffer_add_char (rep, ' ');
- return text_buffer_base (rep);
- }
- }
-
- /* Show CTRL-x as "^X". */
- if (iscntrl (*cur_ptr) && *(unsigned char *)cur_ptr < 127)
- {
- *pchars = 2;
- *pbytes = 2;
- text_buffer_add_char (rep, '^');
- text_buffer_add_char (rep, *cur_ptr | 0x40);
- return text_buffer_base (rep);
- }
- else if (*cur_ptr == DEL)
- {
- *pchars = 0;
- *pbytes = 0;
- return text_buffer_base (rep);
- }
- else
- {
- /* Original byte was not recognized as anything. Display its octal
- value. This could happen in the C locale for bytes above 128,
- or for bytes 128-159 in an ISO-8859-1 locale. Don't output the bytes
- as they are, because they could have special meaning to the
- terminal. */
- *pchars = 4;
- *pbytes = 4;
- text_buffer_printf (rep, "\\%o", *(unsigned char *)cur_ptr);
- return text_buffer_base (rep);
- }
-}
/* **************************************************************** */
@@ -662,6 +524,7 @@ init_conversion (FILE_BUFFER *fb)
{
/* Return if no conversion function implemented */
iconv_close (iconv_to_output);
+ iconv_to_output = (iconv_t) -1;
return;
}
}
@@ -677,6 +540,7 @@ void close_conversion (void)
if (convert_encoding_p)
{
iconv_close (iconv_to_output);
+ iconv_to_output = (iconv_t) -1;
if (!file_is_in_utf8) iconv_close (iconv_to_utf8);
}
#endif
@@ -851,11 +715,6 @@ copy_converting (long n)
/* There's been an error while converting. */
switch (errno)
{
- case E2BIG:
- /* Ran out of space in output buffer. Allocate more
- and try again. */
- text_buffer_alloc (&output_buf, n);
- continue;
case EINVAL:
/* Incomplete byte sequence at end of input buffer. Try to read
more. */
@@ -1262,7 +1121,7 @@ scan_reference_label (REFERENCE *entry, int in_index)
int len, label_len = 0;
/* Handle case of cross-reference like (FILE)NODE::. */
- if (inptr[0] == '(')
+ if (inptr[0] == '(' && !in_index)
label_len = read_bracketed_filename (inptr, &entry->filename);
/* Search forward to ":" to get label name. Cross-references may have
@@ -1307,9 +1166,43 @@ scan_reference_label (REFERENCE *entry, int in_index)
label_len += m - 1;
}
- entry->label = xmalloc (label_len + 1);
- memcpy (entry->label, inptr, label_len);
- entry->label[label_len] = '\0';
+#if HAVE_ICONV
+ if (iconv_to_output != (iconv_t) -1 && iconv_to_output != (iconv_t) 0)
+ {
+ static struct text_buffer label_text;
+ size_t iconv_ret;
+ size_t inbytesleft = label_len;
+ char *p = inptr;
+ text_buffer_reset (&label_text);
+ text_buffer_alloc (&label_text, label_len);
+
+ while (1)
+ {
+ iconv_ret = text_buffer_iconv (&label_text, iconv_to_output,
+ (ICONV_CONST char **)&p,
+ &inbytesleft);
+
+ /* Make sure libiconv flushes out the last converted character. */
+ if (iconv_ret != (size_t) -1
+ && text_buffer_iconv (&label_text, iconv_to_output,
+ NULL, NULL) != (size_t) -1)
+ break; /* Success: all of input converted. */
+
+ /* There's been an error while converting. */
+ goto no_convert;
+ }
+
+ text_buffer_add_char (&label_text, '\0');
+ entry->label = strdup (label_text.base);
+ }
+ else
+#endif
+ {
+ no_convert:
+ entry->label = xmalloc (label_len + 1);
+ memcpy (entry->label, inptr, label_len);
+ entry->label[label_len] = '\0';
+ }
canonicalize_whitespace (entry->label);
if (preprocess_nodes_p)
@@ -1436,6 +1329,7 @@ scan_reference_target (REFERENCE *entry, NODE *node, int in_parentheses)
&entry->nodename);
if (inptr[length] == '.') /* A '.' terminating the entry. */
length++;
+ canonicalize_whitespace (entry->nodename);
if (node->flags & N_IsDir)
{
@@ -1759,6 +1653,8 @@ not_a_reference:
if (rewrite_p)
{
+ if (node->flags & N_WasRewritten)
+ free (node->contents);
node->contents = text_buffer_base (&output_buf);
node->flags |= N_WasRewritten;
@@ -1780,284 +1676,3 @@ not_a_reference:
}
}
-
-/* Various utility functions */
-
-/* Return the file buffer which belongs to WINDOW's node. */
-FILE_BUFFER *
-file_buffer_of_window (WINDOW *window)
-{
- /* If this window has no node, then it has no file buffer. */
- if (!window->node)
- return NULL;
-
- if (window->node->fullpath)
- return info_find_file (window->node->fullpath);
-
- return NULL;
-}
-
-/* Return "(FILENAME)NODENAME" for NODE, or just "NODENAME" if NODE's
- filename is not set. Return value should not be freed. */
-char *
-node_printed_rep (NODE *node)
-{
- static char *rep;
-
- if (node->fullpath)
- {
- char *filename = filename_non_directory (node->fullpath);
- rep = xrealloc (rep, 1 + strlen (filename) + 1 + strlen (node->nodename) + 1);
- sprintf (rep, "(%s)%s", filename, node->nodename);
- return rep;
- }
- else
- return node->nodename;
-}
-
-
-/* Return a pointer to the part of PATHNAME that simply defines the file. */
-char *
-filename_non_directory (char *pathname)
-{
- register char *filename = pathname + strlen (pathname);
-
- if (HAVE_DRIVE (pathname))
- pathname += 2;
-
- while (filename > pathname && !IS_SLASH (filename[-1]))
- filename--;
-
- return filename;
-}
-
-/* Return non-zero if NODE is one especially created by Info. */
-int
-internal_info_node_p (NODE *node)
-{
- return (node != NULL) && (node->flags & N_IsInternal);
-}
-
-/* Make NODE appear to be one especially created by Info. */
-void
-name_internal_node (NODE *node, char *name)
-{
- if (!node)
- return;
-
- node->fullpath = "";
- node->subfile = 0;
- node->nodename = name;
- node->flags |= N_IsInternal;
-}
-
-/* Return the window displaying NAME, the name of an internally created
- Info window. */
-WINDOW *
-get_internal_info_window (char *name)
-{
- WINDOW *win;
-
- for (win = windows; win; win = win->next)
- if (internal_info_node_p (win->node) &&
- (strcmp (win->node->nodename, name) == 0))
- break;
-
- return win;
-}
-
-/* Flexible Text Buffer */
-
-void
-text_buffer_init (struct text_buffer *buf)
-{
- memset (buf, 0, sizeof *buf);
-}
-
-void
-text_buffer_free (struct text_buffer *buf)
-{
- free (buf->base);
-}
-
-size_t
-text_buffer_vprintf (struct text_buffer *buf, const char *format, va_list ap)
-{
- ssize_t n;
- va_list ap_copy;
-
- if (!buf->base)
- {
- if (buf->size == 0)
- buf->size = MIN_TEXT_BUF_ALLOC; /* Initial allocation */
-
- buf->base = xmalloc (buf->size);
- }
-
- for (;;)
- {
- va_copy (ap_copy, ap);
- n = vsnprintf (buf->base + buf->off, buf->size - buf->off,
- format, ap_copy);
- va_end (ap_copy);
- if (n < 0 || buf->off + n >= buf->size ||
- !memchr (buf->base + buf->off, '\0', buf->size - buf->off + 1))
- {
- size_t newlen = buf->size * 2;
- if (newlen < buf->size)
- xalloc_die ();
- buf->size = newlen;
- buf->base = xrealloc (buf->base, buf->size);
- }
- else
- {
- buf->off += n;
- break;
- }
- }
- return n;
-}
-
-/* Make sure there are LEN free bytes at end of BUF. */
-void
-text_buffer_alloc (struct text_buffer *buf, size_t len)
-{
- if (buf->off + len > buf->size)
- {
- buf->size = buf->off + len;
- if (buf->size < MIN_TEXT_BUF_ALLOC)
- buf->size = MIN_TEXT_BUF_ALLOC;
- buf->base = xrealloc (buf->base, buf->size);
- }
-}
-
-/* Return number of bytes that can be written to text buffer without
- reallocating the text buffer. */
-size_t
-text_buffer_space_left (struct text_buffer *buf)
-{
- /* buf->size is the offset of the first byte after the allocated space.
- buf->off is the offset of the first byte to be written to. */
- return buf->size - buf->off;
-}
-
-#if HAVE_ICONV
-
-/* Run iconv using text buffer as output buffer. */
-size_t
-text_buffer_iconv (struct text_buffer *buf, iconv_t iconv_state,
- ICONV_CONST char **inbuf, size_t *inbytesleft)
-{
- size_t out_bytes_left;
- char *outptr;
- size_t iconv_ret;
-
- outptr = text_buffer_base (buf) + text_buffer_off (buf);
- out_bytes_left = text_buffer_space_left (buf);
- iconv_ret = iconv (iconv_state, inbuf, inbytesleft,
- &outptr, &out_bytes_left);
-
- text_buffer_off (buf) = outptr - text_buffer_base (buf);
-
- return iconv_ret;
-}
-
-#endif /* HAVE_ICONV */
-
-size_t
-text_buffer_add_string (struct text_buffer *buf, const char *str, size_t len)
-{
- text_buffer_alloc (buf, len);
- memcpy (buf->base + buf->off, str, len);
- buf->off += len;
- return len;
-}
-
-size_t
-text_buffer_fill (struct text_buffer *buf, int c, size_t len)
-{
- char *p;
- int i;
-
- text_buffer_alloc (buf, len);
-
- for (i = 0, p = buf->base + buf->off; i < len; i++)
- *p++ = c;
- buf->off += len;
-
- return len;
-}
-
-void
-text_buffer_add_char (struct text_buffer *buf, int c)
-{
- char ch = c;
- text_buffer_add_string (buf, &ch, 1);
-}
-
-size_t
-text_buffer_printf (struct text_buffer *buf, const char *format, ...)
-{
- va_list ap;
- size_t n;
-
- va_start (ap, format);
- n = text_buffer_vprintf (buf, format, ap);
- va_end (ap);
- return n;
-}
-
-#if defined(__MSDOS__) || defined(__MINGW32__)
-/* Cannot use FILENAME_CMP here, since that does not consider forward-
- and back-slash characters equal. */
-int
-fncmp (const char *fn1, const char *fn2)
-{
- const char *s1 = fn1, *s2 = fn2;
-
- while (tolower (*s1) == tolower (*s2)
- || (IS_SLASH (*s1) && IS_SLASH (*s2)))
- {
- if (*s1 == 0)
- return 0;
- s1++;
- s2++;
- }
-
- return tolower (*s1) - tolower (*s2);
-}
-#endif
-
-struct info_namelist_entry
-{
- struct info_namelist_entry *next;
- char name[1];
-};
-
-int
-info_namelist_add (struct info_namelist_entry **ptop, const char *name)
-{
- struct info_namelist_entry *p;
-
- for (p = *ptop; p; p = p->next)
- if (fncmp (p->name, name) == 0)
- return 1;
-
- p = xmalloc (sizeof (*p) + strlen (name));
- strcpy (p->name, name);
- p->next = *ptop;
- *ptop = p;
- return 0;
-}
-
-void
-info_namelist_free (struct info_namelist_entry *top)
-{
- while (top)
- {
- struct info_namelist_entry *next = top->next;
- free (top);
- top = next;
- }
-}
-
diff --git a/macros/texinfo/texinfo/info/scan.h b/macros/texinfo/texinfo/info/scan.h
new file mode 100644
index 0000000000..fdf74f6d44
--- /dev/null
+++ b/macros/texinfo/texinfo/info/scan.h
@@ -0,0 +1,76 @@
+/* scan.h -- Exported functions and variables from scan.c.
+
+ Copyright 1993-2022 Free Software Foundation, Inc.
+
+ This program 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ Originally written by Brian Fox. */
+
+#ifndef SCAN_H
+#define SCAN_H
+
+#include "nodes.h"
+#include "window.h"
+#include "search.h"
+
+/* Variable which holds the most recent filename parsed as a result of
+ calling info_parse_xxx (). */
+extern char *info_parsed_filename;
+
+/* Variable which holds the most recent nodename parsed as a result of
+ calling info_parse_xxx (). */
+extern char *info_parsed_nodename;
+
+/* Parse the filename and nodename out of STRING. */
+void info_parse_node (char *string);
+
+long read_quoted_string (char *start, char *terminator, int lines,
+ char **output);
+
+void scan_node_contents (NODE *node, FILE_BUFFER *fb, TAG **tag_ptr);
+
+/* Get the menu entry associated with LABEL in NODE. Return a
+ pointer to the reference if found, or NULL. If SLOPPY, accept
+ initial substrings and check insensitively to case. */
+REFERENCE *info_get_menu_entry_by_label (NODE *node, char *label,
+ int sloppy);
+
+/* A utility function for concatenating REFERENCE **. Returns a new
+ REFERENCE ** which is the concatenation of REF1 and REF2. The REF1
+ and REF2 arrays are freed, but their contents are not. */
+REFERENCE **info_concatenate_references (REFERENCE **ref1, REFERENCE **ref2);
+
+/* Copy an existing reference into new memory. */
+REFERENCE *info_copy_reference (REFERENCE *src);
+
+/* Copy a list of existing references into new memory. */
+REFERENCE **info_copy_references (REFERENCE **ref1);
+
+/* Free the data associated with a single REF */
+void info_reference_free (REFERENCE *ref);
+
+/* Free the data associated with REFERENCES. */
+void info_free_references (REFERENCE **references);
+
+/* Create new REFERENCE structure. */
+REFERENCE *info_new_reference (char *filename, char *nodename);
+
+/* Search for sequences of whitespace or newlines in STRING, replacing
+ all such sequences with just a single space. Remove whitespace from
+ start and end of string. */
+void canonicalize_whitespace (char *string);
+
+
+
+#endif /* not SCAN_H */
diff --git a/macros/texinfo/texinfo/info/search.c b/macros/texinfo/texinfo/info/search.c
index 990e3e9a43..fd1368c82c 100644
--- a/macros/texinfo/texinfo/info/search.c
+++ b/macros/texinfo/texinfo/info/search.c
@@ -1,6 +1,6 @@
/* search.c -- searching large bodies of text.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -21,7 +21,7 @@
#include <regex.h>
#include "session.h"
-#include "info-utils.h"
+#include "scan.h"
#include "search.h"
diff --git a/macros/texinfo/texinfo/info/search.h b/macros/texinfo/texinfo/info/search.h
index 16feabdaf7..9a3f896895 100644
--- a/macros/texinfo/texinfo/info/search.h
+++ b/macros/texinfo/texinfo/info/search.h
@@ -1,6 +1,6 @@
/* search.h -- Structure used to search large bodies of text, with bounds.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/session.c b/macros/texinfo/texinfo/info/session.c
index 8222f9cc16..42285b0bf3 100644
--- a/macros/texinfo/texinfo/info/session.c
+++ b/macros/texinfo/texinfo/info/session.c
@@ -1,6 +1,6 @@
/* session.c -- user windowing interface to Info.
- Copyright 1993-2021 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -20,6 +20,7 @@
#include "info.h"
#include "display.h"
#include "session.h"
+#include "util.h"
#include "echo-area.h"
#include "search.h"
#include "footnotes.h"
@@ -2211,7 +2212,7 @@ menu_digit (WINDOW *window, int key)
return;
has_menu:
- if (entry = select_menu_digit (window, key))
+ if ((entry = select_menu_digit (window, key)))
info_select_reference (window, entry);
else if (key == '0')
/* Don't print "There aren't 0 items in this menu" */
@@ -2764,7 +2765,7 @@ info_follow_menus (NODE *initial_node, char **menus, char **error,
if (error)
{
free (*error);
- asprintf (error, _("No menu in node '%s'"),
+ xasprintf (error, _("No menu in node '%s'"),
node_printed_rep (initial_node));
}
debug (3, ("no menu found"));
@@ -2786,7 +2787,7 @@ info_follow_menus (NODE *initial_node, char **menus, char **error,
if (error)
{
free (*error);
- asprintf (error, _("No menu item '%s' in node '%s'"),
+ xasprintf (error, _("No menu item '%s' in node '%s'"),
arg, node_printed_rep (initial_node));
}
debug (3, ("no entry found"));
@@ -2810,7 +2811,7 @@ info_follow_menus (NODE *initial_node, char **menus, char **error,
if (error)
{
free (*error);
- asprintf (error,
+ xasprintf (error,
_("Unable to find node referenced by '%s' in '%s'"),
entry->label,
node_printed_rep (initial_node));
@@ -3092,7 +3093,7 @@ forward_move_node_structure (WINDOW *window, int behaviour)
{
REFERENCE *entry;
- if (entry = select_menu_digit (window, '1'))
+ if ((entry = select_menu_digit (window, '1')))
{
info_select_reference (window, entry);
return 0;
@@ -3391,8 +3392,8 @@ find_invocation_node_by_nodename (FILE_BUFFER *fb, char *program)
if (!n)
return 0;
- asprintf (&try1, "Invoking %s", program);
- asprintf (&try2, "%s invocation", program);
+ xasprintf (&try1, "Invoking %s", program);
+ xasprintf (&try2, "%s invocation", program);
for (; *n; n++)
{
if ((*n)->nodename
@@ -3631,7 +3632,7 @@ DECLARE_INFO_COMMAND (info_display_file_info,
{
if (window->node->fullpath && *window->node->fullpath)
{
- int line = window_line_of_point (window);
+ int line = window_line_of_point (window) + 1;
window_message_in_echo_area ("File name: %s, line %d of %ld (%ld%%)",
window->node->subfile
? window->node->subfile
@@ -3689,6 +3690,39 @@ DECLARE_INFO_COMMAND (info_view_file, _("Read the name of a file and select it")
/* */
/* **************************************************************** */
+struct info_namelist_entry
+{
+ struct info_namelist_entry *next;
+ char name[1];
+};
+
+static int
+info_namelist_add (struct info_namelist_entry **ptop, const char *name)
+{
+ struct info_namelist_entry *p;
+
+ for (p = *ptop; p; p = p->next)
+ if (fncmp (p->name, name) == 0)
+ return 1;
+
+ p = xmalloc (sizeof (*p) + strlen (name));
+ strcpy (p->name, name);
+ p->next = *ptop;
+ *ptop = p;
+ return 0;
+}
+
+static void
+info_namelist_free (struct info_namelist_entry *top)
+{
+ while (top)
+ {
+ struct info_namelist_entry *next = top->next;
+ free (top);
+ top = next;
+ }
+}
+
enum
{
DUMP_SUCCESS,
@@ -3696,8 +3730,8 @@ enum
DUMP_SYS_ERROR
};
-static int dump_node_to_stream (char *filename, char *nodename,
- FILE *stream, int dump_subnodes);
+static int dump_node_to_stream (FILE_BUFFER *file_buffer,
+ char *nodename, FILE *stream, int dump_subnodes);
static void initialize_dumping (void);
/* Dump the nodes specified with REFERENCES to the file named
@@ -3731,10 +3765,22 @@ dump_nodes_to_file (REFERENCE **references,
/* Print each node to stream. */
for (i = 0; references[i]; i++)
{
- if (dump_node_to_stream (references[i]->filename,
- references[i]->nodename,
- output_stream,
- dump_subnodes) == DUMP_SYS_ERROR)
+ FILE_BUFFER *file_buffer;
+ char *nodename;
+
+ file_buffer = info_find_file (references[i]->filename);
+ if (!file_buffer)
+ {
+ if (info_recent_file_error)
+ info_error ("%s", info_recent_file_error);
+ continue;
+ }
+ if (references[i]->nodename && *references[i]->nodename)
+ nodename = references[i]->nodename;
+ else
+ nodename = "Top";
+ if (dump_node_to_stream (file_buffer, nodename,
+ output_stream, dump_subnodes) == DUMP_SYS_ERROR)
{
info_error (_("error writing to %s: %s"), output_filename,
strerror (errno));
@@ -3762,34 +3808,25 @@ initialize_dumping (void)
If DUMP_SUBNODES is non-zero, recursively dump the nodes which appear
in the menu of each node dumped. */
static int
-dump_node_to_stream (char *filename, char *nodename,
+dump_node_to_stream (FILE_BUFFER *file_buffer,
+ char *nodename,
FILE *stream, int dump_subnodes)
{
register int i;
NODE *node;
- node = info_get_node (filename, nodename);
+ node = info_get_node_of_file_buffer (file_buffer, nodename);
if (!node)
{
- if (info_recent_file_error)
- info_error ("%s", info_recent_file_error);
- else
- {
- if (filename && *nodename != '(')
- info_error (msg_cant_file_node,
- filename_non_directory (filename),
- nodename);
- else
- info_error (msg_cant_find_node, nodename);
- }
+ info_error (msg_cant_find_node, nodename);
return DUMP_INFO_ERROR;
}
/* If we have already dumped this node, don't dump it again. */
if (info_namelist_add (&dumped_already, node->nodename))
{
- free_history_node (node);
+ free (node);
return DUMP_SUCCESS;
}
@@ -3798,7 +3835,7 @@ dump_node_to_stream (char *filename, char *nodename,
if (write_node_to_stream (node, stream))
{
- free_history_node (node);
+ free (node);
return DUMP_SYS_ERROR;
}
@@ -3821,17 +3858,17 @@ dump_node_to_stream (char *filename, char *nodename,
/* We don't dump Info files which are different than the
current one. */
if (!menu[i]->filename)
- if (dump_node_to_stream (filename, menu[i]->nodename,
+ if (dump_node_to_stream (file_buffer, menu[i]->nodename,
stream, dump_subnodes) == DUMP_SYS_ERROR)
{
- free_history_node (node);
+ free (node);
return DUMP_SYS_ERROR;
}
}
}
}
- free_history_node (node);
+ free (node);
return DUMP_SUCCESS;
}
@@ -4201,13 +4238,13 @@ ask_for_search_string (int case_sensitive, int use_regex, int direction)
char *line, *prompt;
if (search_string)
- asprintf (&prompt, _("%s%s%s [%s]: "),
+ xasprintf (&prompt, _("%s%s%s [%s]: "),
use_regex ? _("Regexp search") : _("Search"),
case_sensitive ? _(" case-sensitively") : "",
direction < 0 ? _(" backward") : "",
search_string);
else
- asprintf (&prompt, _("%s%s%s: "),
+ xasprintf (&prompt, _("%s%s%s: "),
use_regex ? _("Regexp search") : _("Search"),
case_sensitive ? _(" case-sensitively") : "",
direction < 0 ? _(" backward") : "");
@@ -4597,7 +4634,7 @@ DECLARE_INFO_COMMAND (info_tree_search,
/* TODO: Display manual name */
/* TRANSLATORS: %s is the title of a node. */
- asprintf (&prompt, _("Search under %s: "),
+ xasprintf (&prompt, _("Search under %s: "),
window->node->nodename);
line = info_read_in_echo_area (prompt); free (prompt);
if (!line)
diff --git a/macros/texinfo/texinfo/info/session.h b/macros/texinfo/texinfo/info/session.h
index 4227654623..4606d0a519 100644
--- a/macros/texinfo/texinfo/info/session.h
+++ b/macros/texinfo/texinfo/info/session.h
@@ -1,6 +1,6 @@
/* session.h -- Functions found in session.c.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/signals.c b/macros/texinfo/texinfo/info/signals.c
index c32a0407cf..d81e098e08 100644
--- a/macros/texinfo/texinfo/info/signals.c
+++ b/macros/texinfo/texinfo/info/signals.c
@@ -1,6 +1,6 @@
/* signals.c -- install and maintain signal handlers.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/signals.h b/macros/texinfo/texinfo/info/signals.h
index fc954cbd54..bdd4c9a03a 100644
--- a/macros/texinfo/texinfo/info/signals.h
+++ b/macros/texinfo/texinfo/info/signals.h
@@ -1,6 +1,6 @@
/* signals.h -- header to include system dependent signal definitions.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/t/README b/macros/texinfo/texinfo/info/t/README
index 3817ff4dc7..d8e1a7632d 100644
--- a/macros/texinfo/texinfo/info/t/README
+++ b/macros/texinfo/texinfo/info/t/README
@@ -3,8 +3,8 @@ listed in "info/Makefile.am" and will usually be run with "make check".
It should be possible to run a test on its own by running it at the
command line and checking the return value, e.g.
-bash $t/goto-quoted.sh
-bash $echo $?
+$ t/goto-quoted.sh
+$ echo $?
1
shows a test failure.
@@ -25,9 +25,12 @@ Any interactive test should also finish with
cleanup
-to cleanup temporary files and spawned processes. This function
-will exit with whatever the value of RETVAL is, so you can set the
-exit status of the script indicating success or failure.
+to cleanup temporary files and spawned processes. 'cleanup' will
+exit the script with a status of $retval, which the test should set
+to indicate success or failure.
+
+Non interactive tests can run 'info' as $ginfo. The interactive tests
+use the run_ginfo function.
Tests of interactive operation
------------------------------
diff --git a/macros/texinfo/texinfo/info/t/index-completing.sh b/macros/texinfo/texinfo/info/t/index-completing.sh
index c0c579d894..6653eeb6c7 100644
--- a/macros/texinfo/texinfo/info/t/index-completing.sh
+++ b/macros/texinfo/texinfo/info/t/index-completing.sh
@@ -1,5 +1,5 @@
#!/bin/sh
-# Copyright (C) 2014-2019 Free Software Foundation, Inc.
+# Copyright (C) 2014-2022 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -22,7 +22,7 @@ run_ginfo -f index-search
printf 'i\t\rDq' >&7
timeout_test
-grep '^Node: Node 2' $ginfo_output
+grep '^Node: Node 1' $ginfo_output
retval=$?
cleanup
diff --git a/macros/texinfo/texinfo/info/t/index-paren.sh b/macros/texinfo/texinfo/info/t/index-paren.sh
new file mode 100755
index 0000000000..08afc26cbc
--- /dev/null
+++ b/macros/texinfo/texinfo/info/t/index-paren.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+# Copyright (C) 2022 Free Software Foundation, Inc.
+#
+# This program 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 3, 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. If not, see <http://www.gnu.org/licenses/>.
+
+srcdir=${srcdir:-.}
+. $srcdir/t/Init-test.inc
+
+$ginfo index-paren \( | grep "Node: Node 1"
+
diff --git a/macros/texinfo/texinfo/info/t/infodir/index-paren.info b/macros/texinfo/texinfo/info/t/infodir/index-paren.info
new file mode 100644
index 0000000000..fb46280656
--- /dev/null
+++ b/macros/texinfo/texinfo/info/t/infodir/index-paren.info
Binary files differ
diff --git a/macros/texinfo/texinfo/info/t/where-dir-file.sh b/macros/texinfo/texinfo/info/t/where-dir-file.sh
index b6fb510430..dc323c7c95 100644
--- a/macros/texinfo/texinfo/info/t/where-dir-file.sh
+++ b/macros/texinfo/texinfo/info/t/where-dir-file.sh
@@ -19,5 +19,5 @@ srcdir=${srcdir:-.}
# Follow a reference to file1 in dir and print location
$ginfo --where file1 \
- | grep 't/infodir/file1.info$'
+ | grep 't/infodir/file1.info'
diff --git a/macros/texinfo/texinfo/info/tag.c b/macros/texinfo/texinfo/info/tag.c
index 18ef7d13af..3e8d0f6357 100644
--- a/macros/texinfo/texinfo/info/tag.c
+++ b/macros/texinfo/texinfo/info/tag.c
@@ -1,7 +1,7 @@
/* tag.c -- Functions to handle Info tags (that is, the special
construct for images, not the "tag table" of starting position.)
- Copyright 2012-2019 Free Software Foundation, Inc.
+ Copyright 2012-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,7 +18,8 @@
#include "info.h"
#include "tag.h"
-#include "info-utils.h"
+#include "scan.h"
+#include "util.h"
struct tag_handler
{
diff --git a/macros/texinfo/texinfo/info/tag.h b/macros/texinfo/texinfo/info/tag.h
index 71b03d1fa4..68b484a0e7 100644
--- a/macros/texinfo/texinfo/info/tag.h
+++ b/macros/texinfo/texinfo/info/tag.h
@@ -1,6 +1,6 @@
/* tag.c -- Functions to handle Info tags.
- Copyright 2012-2019 Free Software Foundation, Inc.
+ Copyright 2012-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,7 +18,7 @@
#ifndef TAG_H
#define TAG_H
-#include "info-utils.h"
+#include "util.h"
int tag_expand (char **input, char *input_end,
struct text_buffer *outbuf, int *is_index);
diff --git a/macros/texinfo/texinfo/info/termdep.h b/macros/texinfo/texinfo/info/termdep.h
index 94ecf8eda6..2d401dc86c 100644
--- a/macros/texinfo/texinfo/info/termdep.h
+++ b/macros/texinfo/texinfo/info/termdep.h
@@ -1,6 +1,6 @@
/* termdep.h -- system things that terminal.c depends on.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/terminal.c b/macros/texinfo/texinfo/info/terminal.c
index e8b54497e1..7a9793befc 100644
--- a/macros/texinfo/texinfo/info/terminal.c
+++ b/macros/texinfo/texinfo/info/terminal.c
@@ -1,6 +1,6 @@
/* terminal.c -- how to handle the physical terminal for Info.
- Copyright 1988-2019 Free Software Foundation, Inc.
+ Copyright 1988-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/terminal.h b/macros/texinfo/texinfo/info/terminal.h
index 120912423c..8108b6b6b5 100644
--- a/macros/texinfo/texinfo/info/terminal.h
+++ b/macros/texinfo/texinfo/info/terminal.h
@@ -1,6 +1,6 @@
/* terminal.h -- The external interface to terminal I/O.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/tilde.c b/macros/texinfo/texinfo/info/tilde.c
index 15056ea9d5..3d14a8d26a 100644
--- a/macros/texinfo/texinfo/info/tilde.c
+++ b/macros/texinfo/texinfo/info/tilde.c
@@ -1,6 +1,6 @@
/* tilde.c -- tilde expansion code (~/foo := $HOME/foo).
- Copyright 1988-2019 Free Software Foundation, Inc.
+ Copyright 1988-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/tilde.h b/macros/texinfo/texinfo/info/tilde.h
index 0df7208a2e..6373c5187f 100644
--- a/macros/texinfo/texinfo/info/tilde.h
+++ b/macros/texinfo/texinfo/info/tilde.h
@@ -1,6 +1,6 @@
/* tilde.h: tilde expansion.
- Copyright 1988-2019 Free Software Foundation, Inc.
+ Copyright 1988-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/macros/texinfo/texinfo/info/util.c b/macros/texinfo/texinfo/info/util.c
new file mode 100644
index 0000000000..d07262d19b
--- /dev/null
+++ b/macros/texinfo/texinfo/info/util.c
@@ -0,0 +1,437 @@
+/* util.c -- various utility functions
+
+ Copyright 1993-2022 Free Software Foundation, Inc.
+
+ This program 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 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include "info.h"
+#include "session.h"
+#include "util.h"
+#include "tag.h"
+
+/* wrapper for asprintf */
+static int
+xvasprintf (char **ptr, const char *template, va_list ap)
+{
+ int ret;
+ ret = vasprintf (ptr, template, ap);
+ if (ret < 0)
+ abort (); /* out of memory */
+ return ret;
+}
+
+int
+xasprintf (char **ptr, const char *template, ...)
+{
+ va_list v;
+ va_start (v, template);
+ return xvasprintf (ptr, template, v);
+}
+
+/* Return the file buffer which belongs to WINDOW's node. */
+FILE_BUFFER *
+file_buffer_of_window (WINDOW *window)
+{
+ /* If this window has no node, then it has no file buffer. */
+ if (!window->node)
+ return NULL;
+
+ if (window->node->fullpath)
+ return info_find_file (window->node->fullpath);
+
+ return NULL;
+}
+
+/* Return "(FILENAME)NODENAME" for NODE, or just "NODENAME" if NODE's
+ filename is not set. Return value should not be freed. */
+char *
+node_printed_rep (NODE *node)
+{
+ static char *rep;
+
+ if (node->fullpath)
+ {
+ char *filename = filename_non_directory (node->fullpath);
+ rep = xrealloc (rep, 1 + strlen (filename) + 1 + strlen (node->nodename) + 1);
+ sprintf (rep, "(%s)%s", filename, node->nodename);
+ return rep;
+ }
+ else
+ return node->nodename;
+}
+
+
+/* Return a pointer to the part of PATHNAME that simply defines the file. */
+char *
+filename_non_directory (char *pathname)
+{
+ register char *filename = pathname + strlen (pathname);
+
+ if (HAVE_DRIVE (pathname))
+ pathname += 2;
+
+ while (filename > pathname && !IS_SLASH (filename[-1]))
+ filename--;
+
+ return filename;
+}
+
+/* Return non-zero if NODE is one especially created by Info. */
+int
+internal_info_node_p (NODE *node)
+{
+ return (node != NULL) && (node->flags & N_IsInternal);
+}
+
+/* Make NODE appear to be one especially created by Info. */
+void
+name_internal_node (NODE *node, char *name)
+{
+ if (!node)
+ return;
+
+ node->fullpath = "";
+ node->subfile = 0;
+ node->nodename = name;
+ node->flags |= N_IsInternal;
+}
+
+/* Return the window displaying NAME, the name of an internally created
+ Info window. */
+WINDOW *
+get_internal_info_window (char *name)
+{
+ WINDOW *win;
+
+ for (win = windows; win; win = win->next)
+ if (internal_info_node_p (win->node) &&
+ (strcmp (win->node->nodename, name) == 0))
+ break;
+
+ return win;
+}
+
+
+/* If ITER points to an ANSI escape sequence, process it, set PLEN to its
+ length in bytes, and return 1.
+ Otherwise, return 0.
+ */
+int
+ansi_escape (mbi_iterator_t iter, size_t *plen)
+{
+ if (raw_escapes_p && *mbi_cur_ptr (iter) == '\033' && mbi_avail (iter))
+ {
+ mbi_advance (iter);
+ if (*mbi_cur_ptr (iter) == '[' && mbi_avail (iter))
+ {
+ ITER_SETBYTES (iter, 1);
+ mbi_advance (iter);
+ if (isdigit (*mbi_cur_ptr (iter)) && mbi_avail (iter))
+ {
+ ITER_SETBYTES (iter, 1);
+ mbi_advance (iter);
+ if (*mbi_cur_ptr (iter) == 'm')
+ {
+ *plen = 4;
+ return 1;
+ }
+ else if (isdigit (*mbi_cur_ptr (iter)) && mbi_avail (iter))
+ {
+ ITER_SETBYTES (iter, 1);
+ mbi_advance (iter);
+ if (*mbi_cur_ptr (iter) == 'm')
+ {
+ *plen = 5;
+ return 1;
+ }
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+static struct text_buffer printed_rep = { 0 };
+
+/* Return pointer to string that is the printed representation of character
+ (or other logical unit) at ITER if it were printed at screen column
+ PL_CHARS. Use ITER_SETBYTES (util.h) on ITER if we need to advance
+ past a unit that the multibyte iteractor doesn't know about (like an ANSI
+ escape sequence). If ITER points at an end-of-line character, set *DELIM to
+ this character. *PCHARS gets the number of screen columns taken up by
+ outputting the return value, and *PBYTES the number of bytes in returned
+ string. Return value is not null-terminated. Return value must not be
+ freed by caller. */
+char *
+printed_representation (mbi_iterator_t *iter, int *delim, size_t pl_chars,
+ size_t *pchars, size_t *pbytes)
+{
+ struct text_buffer *rep = &printed_rep;
+
+ char *cur_ptr = (char *) mbi_cur_ptr (*iter);
+ size_t cur_len = mb_len (mbi_cur (*iter));
+
+ text_buffer_reset (&printed_rep);
+
+ if (mb_isprint (mbi_cur (*iter)))
+ {
+ /* cur.wc gives a wchar_t object. See mbiter.h in the
+ gnulib/lib directory. */
+ *pchars = wcwidth ((*iter).cur.wc);
+ *pbytes = cur_len;
+ return cur_ptr;
+ }
+ else if (cur_len == 1)
+ {
+ if (*cur_ptr == '\n' || *cur_ptr == '\r')
+ {
+ /* If this is a CRLF line ending, ignore this character. */
+ if (*cur_ptr == '\r' && cur_ptr[1] == '\n')
+ {
+ *pchars = 0;
+ *pbytes = 0;
+ return cur_ptr;
+ }
+
+ *pchars = 1;
+ *pbytes = cur_len;
+ *delim = *cur_ptr;
+ text_buffer_add_char (rep, ' ');
+ return cur_ptr;
+ }
+ else if (ansi_escape (*iter, &cur_len))
+ {
+ *pchars = 0;
+ *pbytes = cur_len;
+ ITER_SETBYTES (*iter, cur_len);
+
+ return cur_ptr;
+ }
+ else if (*cur_ptr == '\t')
+ {
+ int i = 0;
+
+ *pchars = ((pl_chars + 8) & 0xf8) - pl_chars;
+ *pbytes = *pchars;
+
+ /* We must output spaces instead of the tab because a tab may
+ not clear characters already on the screen. */
+ for (i = 0; i < *pbytes; i++)
+ text_buffer_add_char (rep, ' ');
+ return text_buffer_base (rep);
+ }
+ }
+
+ /* Show CTRL-x as "^X". */
+ if (iscntrl (*cur_ptr) && *(unsigned char *)cur_ptr < 127)
+ {
+ *pchars = 2;
+ *pbytes = 2;
+ text_buffer_add_char (rep, '^');
+ text_buffer_add_char (rep, *cur_ptr | 0x40);
+ return text_buffer_base (rep);
+ }
+ else if (*cur_ptr == DEL)
+ {
+ *pchars = 0;
+ *pbytes = 0;
+ return text_buffer_base (rep);
+ }
+ else
+ {
+ /* Original byte was not recognized as anything. Display its octal
+ value. This could happen in the C locale for bytes above 128,
+ or for bytes 128-159 in an ISO-8859-1 locale. Don't output the bytes
+ as they are, because they could have special meaning to the
+ terminal. */
+ *pchars = 4;
+ *pbytes = 4;
+ text_buffer_printf (rep, "\\%o", *(unsigned char *)cur_ptr);
+ return text_buffer_base (rep);
+ }
+}
+
+/* Flexible Text Buffer */
+
+void
+text_buffer_init (struct text_buffer *buf)
+{
+ memset (buf, 0, sizeof *buf);
+}
+
+void
+text_buffer_free (struct text_buffer *buf)
+{
+ free (buf->base);
+}
+
+size_t
+text_buffer_vprintf (struct text_buffer *buf, const char *format, va_list ap)
+{
+ ssize_t n;
+ va_list ap_copy;
+
+ if (!buf->base)
+ {
+ if (buf->size == 0)
+ buf->size = MIN_TEXT_BUF_ALLOC; /* Initial allocation */
+
+ buf->base = xmalloc (buf->size);
+ }
+
+ for (;;)
+ {
+ va_copy (ap_copy, ap);
+ n = vsnprintf (buf->base + buf->off, buf->size - buf->off,
+ format, ap_copy);
+ va_end (ap_copy);
+ if (n < 0 || buf->off + n >= buf->size ||
+ !memchr (buf->base + buf->off, '\0', buf->size - buf->off + 1))
+ {
+ size_t newlen = buf->size * 2;
+ if (newlen < buf->size)
+ xalloc_die ();
+ buf->size = newlen;
+ buf->base = xrealloc (buf->base, buf->size);
+ }
+ else
+ {
+ buf->off += n;
+ break;
+ }
+ }
+ return n;
+}
+
+/* Make sure there are LEN free bytes at end of BUF. */
+void
+text_buffer_alloc (struct text_buffer *buf, size_t len)
+{
+ if (buf->off + len > buf->size)
+ {
+ buf->size = buf->off + len;
+ if (buf->size < MIN_TEXT_BUF_ALLOC)
+ buf->size = MIN_TEXT_BUF_ALLOC;
+ buf->base = xrealloc (buf->base, buf->size);
+ }
+}
+
+/* Return number of bytes that can be written to text buffer without
+ reallocating the text buffer. */
+size_t
+text_buffer_space_left (struct text_buffer *buf)
+{
+ /* buf->size is the offset of the first byte after the allocated space.
+ buf->off is the offset of the first byte to be written to. */
+ return buf->size - buf->off;
+}
+
+#if HAVE_ICONV
+
+/* Run iconv using text buffer as output buffer. */
+size_t
+text_buffer_iconv (struct text_buffer *buf, iconv_t iconv_state,
+ ICONV_CONST char **inbuf, size_t *inbytesleft)
+{
+ size_t out_bytes_left;
+ char *outptr;
+ size_t iconv_ret;
+
+ outptr = text_buffer_base (buf) + text_buffer_off (buf);
+ out_bytes_left = text_buffer_space_left (buf);
+
+ while (1)
+ {
+ iconv_ret = iconv (iconv_state, inbuf, inbytesleft,
+ &outptr, &out_bytes_left);
+ if (iconv_ret != (size_t) -1)
+ break; /* success */
+
+ /* If we ran out of space, allocate more and try again. */
+ if (errno == E2BIG)
+ text_buffer_alloc (buf, 4);
+ else
+ break; /* let calling code deal with it */
+ }
+ text_buffer_off (buf) = outptr - text_buffer_base (buf);
+ return iconv_ret;
+}
+
+#endif /* HAVE_ICONV */
+
+size_t
+text_buffer_add_string (struct text_buffer *buf, const char *str, size_t len)
+{
+ text_buffer_alloc (buf, len);
+ memcpy (buf->base + buf->off, str, len);
+ buf->off += len;
+ return len;
+}
+
+size_t
+text_buffer_fill (struct text_buffer *buf, int c, size_t len)
+{
+ char *p;
+ int i;
+
+ text_buffer_alloc (buf, len);
+
+ for (i = 0, p = buf->base + buf->off; i < len; i++)
+ *p++ = c;
+ buf->off += len;
+
+ return len;
+}
+
+void
+text_buffer_add_char (struct text_buffer *buf, int c)
+{
+ char ch = c;
+ text_buffer_add_string (buf, &ch, 1);
+}
+
+size_t
+text_buffer_printf (struct text_buffer *buf, const char *format, ...)
+{
+ va_list ap;
+ size_t n;
+
+ va_start (ap, format);
+ n = text_buffer_vprintf (buf, format, ap);
+ va_end (ap);
+ return n;
+}
+
+#if defined(__MSDOS__) || defined(__MINGW32__)
+/* Cannot use FILENAME_CMP here, since that does not consider forward-
+ and back-slash characters equal. */
+int
+fncmp (const char *fn1, const char *fn2)
+{
+ const char *s1 = fn1, *s2 = fn2;
+
+ while (tolower (*s1) == tolower (*s2)
+ || (IS_SLASH (*s1) && IS_SLASH (*s2)))
+ {
+ if (*s1 == 0)
+ return 0;
+ s1++;
+ s2++;
+ }
+
+ return tolower (*s1) - tolower (*s2);
+}
+
+#endif
diff --git a/macros/texinfo/texinfo/info/util.h b/macros/texinfo/texinfo/info/util.h
new file mode 100644
index 0000000000..461d0979bd
--- /dev/null
+++ b/macros/texinfo/texinfo/info/util.h
@@ -0,0 +1,77 @@
+#ifndef UTIL_H
+#define UTIL_H
+
+#include "nodes.h"
+#include "window.h"
+#include "search.h"
+
+#if HAVE_ICONV
+# include <iconv.h>
+#endif
+
+FILE_BUFFER *file_buffer_of_window (WINDOW *window);
+
+char *node_printed_rep (NODE *node);
+
+/* Return a pointer to the part of PATHNAME that simply defines the file. */
+char *filename_non_directory (char *pathname);
+
+/* Return non-zero if NODE is one especially created by Info. */
+int internal_info_node_p (NODE *node);
+
+/* Make NODE appear to be one especially created by Info, and give it NAME. */
+void name_internal_node (NODE *node, char *name);
+
+/* Return the window displaying NAME, the name of an internally created
+ Info window. */
+WINDOW *get_internal_info_window (char *name);
+
+/* Used with multibyte iterator mbi_iterator_t. */
+#define ITER_SETBYTES(iter,n) ((iter).cur.bytes = n)
+#define ITER_LIMIT(iter) ((iter).limit - (iter).cur.ptr)
+
+int ansi_escape (mbi_iterator_t iter, size_t *plen);
+
+/* Return a pointer to a string which is the printed representation
+ of CHARACTER if it were printed at HPOS. */
+char *printed_representation (mbi_iterator_t *iter,
+ int *delim, size_t pl_chars,
+ size_t *pchars, size_t *pbytes);
+
+
+struct text_buffer
+{
+ char *base;
+ size_t size;
+ size_t off;
+};
+
+#define MIN_TEXT_BUF_ALLOC 512
+
+void text_buffer_init (struct text_buffer *buf);
+void text_buffer_free (struct text_buffer *buf);
+void text_buffer_alloc (struct text_buffer *buf, size_t len);
+size_t text_buffer_vprintf (struct text_buffer *buf, const char *format,
+ va_list ap);
+size_t text_buffer_space_left (struct text_buffer *buf);
+#if HAVE_ICONV
+size_t text_buffer_iconv (struct text_buffer *buf, iconv_t iconv_state,
+ ICONV_CONST char **inbuf, size_t *inbytesleft);
+#endif
+size_t text_buffer_add_string (struct text_buffer *buf, const char *str,
+ size_t len);
+size_t text_buffer_fill (struct text_buffer *buf, int c, size_t len);
+void text_buffer_add_char (struct text_buffer *buf, int c);
+size_t text_buffer_printf (struct text_buffer *buf, const char *format, ...);
+#define text_buffer_reset(buf) ((buf)->off = 0)
+#define text_buffer_base(buf) ((buf)->base)
+#define text_buffer_off(buf) ((buf)->off)
+
+#if defined(__MSDOS__) || defined(__MINGW32__)
+int fncmp (const char *fn1, const char *fn2);
+#else
+# define fncmp(s,t) strcmp(s,t)
+#endif
+
+#endif /* UTIL_H */
+
diff --git a/macros/texinfo/texinfo/info/variables.c b/macros/texinfo/texinfo/info/variables.c
index 825201784c..52e3f5c28a 100644
--- a/macros/texinfo/texinfo/info/variables.c
+++ b/macros/texinfo/texinfo/info/variables.c
@@ -1,6 +1,6 @@
/* variables.c -- how to manipulate user visible variables in Info.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -229,7 +229,7 @@ DECLARE_INFO_COMMAND (describe_variable, _("Explain the use of a variable"))
return;
if (var->choices)
- asprintf (&description, "%s (%s): %s.",
+ xasprintf (&description, "%s (%s): %s.",
var->name,
var->value == &highlight_searches
? on_off_choices[match_rendition.mask != 0]
@@ -237,7 +237,7 @@ DECLARE_INFO_COMMAND (describe_variable, _("Explain the use of a variable"))
? rendition_to_string (var->value)
: var->choices[*(int *)var->value], _(var->doc));
else
- asprintf (&description, "%s (%d): %s.",
+ xasprintf (&description, "%s (%d): %s.",
var->name, *(int *)var->value, _(var->doc));
window_message_in_echo_area ("%s", description);
diff --git a/macros/texinfo/texinfo/info/variables.h b/macros/texinfo/texinfo/info/variables.h
index a5f7a93683..ce66ebd5b0 100644
--- a/macros/texinfo/texinfo/info/variables.h
+++ b/macros/texinfo/texinfo/info/variables.h
@@ -1,6 +1,6 @@
/* variables.h -- Description of user visible variables in Info.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -21,7 +21,6 @@
#define INFO_VARIABLES_H
#include "window.h"
-#include "info-utils.h"
/* A variable (in the Info sense) is an integer value with a user-visible
name. You may supply an array of strings to complete over when the
diff --git a/macros/texinfo/texinfo/info/window.c b/macros/texinfo/texinfo/info/window.c
index 49eb2e80ed..bef2a3bcde 100644
--- a/macros/texinfo/texinfo/info/window.c
+++ b/macros/texinfo/texinfo/info/window.c
@@ -1,6 +1,6 @@
/* window.c -- windows in Info.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -20,7 +20,8 @@
#include "info.h"
#include "session.h"
#include "display.h"
-#include "info-utils.h"
+#include "scan.h"
+#include "util.h"
#include "doc.h"
#include "tag.h"
#include "variables.h"
diff --git a/macros/texinfo/texinfo/info/window.h b/macros/texinfo/texinfo/info/window.h
index 9aa73fa402..e59a519cca 100644
--- a/macros/texinfo/texinfo/info/window.h
+++ b/macros/texinfo/texinfo/info/window.h
@@ -1,6 +1,6 @@
/* window.h -- Structure and flags used in manipulating Info windows.
- Copyright 1993-2019 Free Software Foundation, Inc.
+ Copyright 1993-2022 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by