diff options
author | Norbert Preining <norbert@preining.info> | 2022-11-09 03:02:50 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-11-09 03:02:50 +0000 |
commit | 5de83ec843cdc88e6adc42b1fe3f0ec48c52b7f3 (patch) | |
tree | b49f7c180396c8ef389c8fd519370b6d03f4e100 /macros/texinfo/texinfo/info | |
parent | 118cb5bbc5236bf86ca1088b9b3bae04c7b09beb (diff) |
CTAN sync 202211090302
Diffstat (limited to 'macros/texinfo/texinfo/info')
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 Binary files differnew file mode 100644 index 0000000000..fb46280656 --- /dev/null +++ b/macros/texinfo/texinfo/info/t/infodir/index-paren.info 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 |