diff --git a/.gitignore b/.gitignore
index 2a97a86c..0a01a749 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,12 +9,21 @@
*.tar.gz
*.tar.lzma
*.tar.xz
+\#*
+.#*
.deps
/.tarball-version
/.version
/aclocal.m4
/autom4te.cache
-/build-aux/.gitignore
+/build-aux/*
+!/build-aux/compile
+!/build-aux/config.guess
+!/build-aux/config.sub
+!/build-aux/depcomp
+!/build-aux/install-sh
+!/build-aux/mdate-sh
+!/build-aux/texinfo.tex
/checks/[0-9][0-9].*
/checks/[0-9][0-9][0-9].*
/checks/stamp-checks
@@ -39,7 +48,6 @@
/doc/stamp-vti
/doc/version.texi
/gendocs.sh
-/GNUmakefile
/gnupload
/install-sh
/lib/*
@@ -48,7 +56,6 @@
/m4-*
/m4/.gitignore
/m4/gnulib-comp.m4
-/maint.mk
Makefile.in
Makefile
/missing
@@ -58,3 +65,5 @@ Makefile
/stamp-h.in
/tests/*
!/tests/Makefile.am
+/GNUmakefile
+/maint.mk
diff --git a/build-aux/missing b/build-aux/missing
deleted file mode 120000
index 9b777ed3..00000000
--- a/build-aux/missing
+++ /dev/null
@@ -1 +0,0 @@
-../gnulib/build-aux/missing
\ No newline at end of file
diff --git a/checks/Makefile.in b/checks/Makefile.in
index 965099d4..b968d193 100644
--- a/checks/Makefile.in
+++ b/checks/Makefile.in
@@ -42,9 +42,9 @@ DISTFILES = $(srcdir)/get-them $(srcdir)/check-them $(srcdir)/stamp-checks
all: $(srcdir)/stamp-checks
-$(srcdir)/stamp-checks: $(srcdir)/get-them $(srcdir)/../doc/m4.texinfo
+$(srcdir)/stamp-checks: $(srcdir)/get-them $(srcdir)/../doc/m4.texi
rm -f $(CHECKS)
- cd $(srcdir) && AWK=$(AWK) ./get-them ../doc/m4.texinfo
+ cd $(srcdir) && AWK=$(AWK) ./get-them ../doc/m4.texi
touch $(srcdir)/stamp-checks
install:
diff --git a/configure.ac b/configure.ac
index a7dcd25b..6c559832 100644
--- a/configure.ac
+++ b/configure.ac
@@ -17,13 +17,13 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-AC_PREREQ([2.62])
+AC_PREREQ([2.64])
AC_INIT([GNU M4], m4_esyscmd([build-aux/git-version-gen .tarball-version]),
[bug-m4@gnu.org])
AC_CONFIG_AUX_DIR([build-aux])
-AM_INIT_AUTOMAKE([1.11.1 dist-bzip2 dist-xz color-tests parallel-tests
-silent-rules gnu])
+AM_INIT_AUTOMAKE([1.11.6 dist-bzip2 dist-xz color-tests parallel-tests
+silent-rules subdir-objects gnu])
m4_pattern_forbid([^M4_[A-Z]])
@@ -51,8 +51,6 @@ AC_CHECK_MEMBERS([stack_t.ss_sp], [], [],
#endif
]])
-AC_TYPE_SIGNAL
-
AC_CHECK_FUNCS_ONCE([sigaction sigaltstack sigstack sigvec strerror])
AC_ARG_ENABLE([gcc-warnings],
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 7eaa5a9c..8edd0f38 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -20,7 +20,7 @@
##
## This file written by Eric Blake
-info_TEXINFOS = m4.texinfo
+info_TEXINFOS = m4.texi
m4_TEXINFOS = fdl-1.3.texi gpl-3.0.texi
man_MANS = $(srcdir)/m4.1
EXTRA_DIST = $(man_MANS) gendocs_template
diff --git a/doc/m4.texinfo b/doc/m4.texi
similarity index 99%
rename from doc/m4.texinfo
rename to doc/m4.texi
index 91b8e007..e4c676cc 100644
--- a/doc/m4.texinfo
+++ b/doc/m4.texi
@@ -4,10 +4,8 @@
@setfilename m4.info
@include version.texi
@settitle GNU M4 @value{VERSION} macro processor
+@documentencoding UTF-8
@setchapternewpage odd
-@ifnothtml
-@setcontentsaftertitlepage
-@end ifnothtml
@finalout
@c @tabchar{}
@@ -612,7 +610,7 @@ a warning.
@example
$ @kbd{m4}
defn(`oops')
-@error{}m4:stdin:1: warning: defn: undefined macro `oops'
+@error{}m4:stdin:1: warning: defn: undefined macro 'oops'
@result{}
^D
@end example
@@ -642,7 +640,7 @@ $ @kbd{echo $?}
@example
$ @kbd{m4 -E -d}
defn(`oops')
-@error{}m4:stdin:1: warning: defn: undefined macro `oops'
+@error{}m4:stdin:1: warning: defn: undefined macro 'oops'
@result{}
^D
@end example
@@ -1145,7 +1143,7 @@ define(`m4exit')include(`null.m4')dnl
@example
include(`null.m4')
@result{}# This file tests m4 behavior on NUL bytes.
-@error{}m4:examples/null.m4:5: warning: m4exit: non-numeric argument `2\0002'
+@error{}m4:examples/null.m4:5: warning: m4exit: non-numeric argument '2\0002'
@end example
@end ignore
@@ -2109,8 +2107,8 @@ will still be possible to restore older behavior in M4 2.0.
@example
$ @kbd{m4 --warn-macro-sequence}
define(`foo', `$001 $@{1@} $1')
-@error{}m4:stdin:1: warning: definition of `foo' contains sequence `$001'
-@error{}m4:stdin:1: warning: definition of `foo' contains sequence `$@{1@}'
+@error{}m4:stdin:1: warning: definition of 'foo' contains sequence '$001'
+@error{}m4:stdin:1: warning: definition of 'foo' contains sequence '$@{1@}'
@result{}
foo(`bar')
@result{}bar $@{1@} bar
@@ -2354,7 +2352,7 @@ m4}).
@example
$ @kbd{m4}
undefine(`a')
-@error{}m4:stdin:1: warning: undefine: undefined macro `a'
+@error{}m4:stdin:1: warning: undefine: undefined macro 'a'
@result{}
debugmode(`-d')
@result{}
@@ -2554,7 +2552,7 @@ GNU M4 may lift this restriction.
@example
$ @kbd{m4 -d}
defn(`foo')
-@error{}m4:stdin:1: warning: defn: undefined macro `foo'
+@error{}m4:stdin:1: warning: defn: undefined macro 'foo'
@result{}
debugmode(`-d')
@result{}
@@ -2705,7 +2703,7 @@ define(`a', `1')
popdef
@result{}popdef
popdef(`a', `a')
-@error{}m4:stdin:3: warning: popdef: undefined macro `a'
+@error{}m4:stdin:3: warning: popdef: undefined macro 'a'
@result{}
debugmode(`-d')
@result{}
@@ -2763,7 +2761,7 @@ f(define(`f', `2'))
indir(`f', define(`f', `3'))
@result{}3
indir(`f', undefine(`f'))
-@error{}m4:stdin:4: warning: indir: undefined macro `f'
+@error{}m4:stdin:4: warning: indir: undefined macro 'f'
@result{}
debugmode(`-d')
@result{}
@@ -2867,10 +2865,10 @@ $ @kbd{m4 -P}
m4_builtin(`divnum')
@result{}0
m4_builtin(`m4_divnum')
-@error{}m4:stdin:2: warning: m4_builtin: undefined builtin `m4_divnum'
+@error{}m4:stdin:2: warning: m4_builtin: undefined builtin 'm4_divnum'
@result{}
m4_indir(`divnum')
-@error{}m4:stdin:3: warning: m4_indir: undefined macro `divnum'
+@error{}m4:stdin:3: warning: m4_indir: undefined macro 'divnum'
@result{}
m4_indir(`m4_divnum')
@result{}0
@@ -2888,17 +2886,17 @@ recognized; but it will provoke a warning, and result in a void expansion.
builtin
@result{}builtin
builtin()
-@error{}m4:stdin:2: warning: builtin: undefined builtin `'
+@error{}m4:stdin:2: warning: builtin: undefined builtin ''
@result{}
builtin(`builtin')
@error{}m4:stdin:3: warning: builtin: too few arguments: 0 < 1
@result{}
builtin(`builtin',)
-@error{}m4:stdin:4: warning: builtin: undefined builtin `'
+@error{}m4:stdin:4: warning: builtin: undefined builtin ''
@result{}
builtin(`builtin', ``'
')
-@error{}m4:stdin:5: warning: builtin: undefined builtin ``\'\n'
+@error{}m4:stdin:5: warning: builtin: undefined builtin '`\'\n'
@result{}
indir(`index')
@error{}m4:stdin:7: warning: index: too few arguments: 0 < 2
@@ -4120,7 +4118,7 @@ f(popdef(`f')dumpdef(`f'))
@error{}f:@tabchar{}``$0'1'
@result{}f2
f(popdef(`f')dumpdef(`f'))
-@error{}m4:stdin:3: warning: dumpdef: undefined macro `f'
+@error{}m4:stdin:3: warning: dumpdef: undefined macro 'f'
@result{}f1
debugmode(`-d')
@result{}
@@ -4213,17 +4211,17 @@ traceon(`foo')
foo
@result{}foo
defn(`foo')
-@error{}m4:stdin:4: warning: defn: undefined macro `foo'
+@error{}m4:stdin:4: warning: defn: undefined macro 'foo'
@result{}
undefine(`foo')
-@error{}m4:stdin:5: warning: undefine: undefined macro `foo'
+@error{}m4:stdin:5: warning: undefine: undefined macro 'foo'
@result{}
pushdef(`foo')
@result{}
popdef(`foo')
@result{}
popdef(`foo')
-@error{}m4:stdin:8: warning: popdef: undefined macro `foo'
+@error{}m4:stdin:8: warning: popdef: undefined macro 'foo'
@result{}
define(`foo', `bar')
@result{}
@@ -4235,7 +4233,7 @@ undefine(`foo')
ifdef(`foo', `yes', `no')
@result{}no
indir(`foo')
-@error{}m4:stdin:13: warning: indir: undefined macro `foo'
+@error{}m4:stdin:13: warning: indir: undefined macro 'foo'
@result{}
define(`foo', `blah')
@result{}
@@ -4522,10 +4520,10 @@ to macro tracing.
@comment options: -dip
@example
$ @kbd{m4 -dip -I examples}
-@error{}m4debug: input read from `stdin'
+@error{}m4debug: input read from 'stdin'
include(`foo')dnl
-@error{}m4debug: path search for `foo' found `examples/foo'
-@error{}m4debug: input read from `examples/foo'
+@error{}m4debug: path search for 'foo' found 'examples/foo'
+@error{}m4debug: input read from 'examples/foo'
@result{}bar
@error{}m4debug: input reverted to stdin, line 1
^D
@@ -4720,11 +4718,11 @@ The quotation strings can safely contain eight-bit characters.
@example
define(`a', `b')
@result{}
-«a»
-@result{}«b»
-changequote(`«', `»')
+«a»
+@result{}«b»
+changequote(`«', `»')
@result{}
-«a»
+«a»
@result{}a
@end example
@end ignore
@@ -4999,12 +4997,12 @@ The comment strings can safely contain eight-bit characters.
@example
define(`a', `b')
@result{}
-«a»
-@result{}«b»
-changecom(`«', `»')
+«a»
+@result{}«b»
+changecom(`«', `»')
@result{}
-«a»
-@result{}«a»
+«a»
+@result{}«a»
@end example
@end ignore
If no single character is appropriate, @var{start} and @var{end} can be
@@ -5552,10 +5550,10 @@ parameters.
@comment status: 1
@example
include(`n')
-@error{}m4:stdin:1: include: cannot open `n': No such file or directory
+@error{}m4:stdin:1: include: cannot open 'n': No such file or directory
@result{}
include()
-@error{}m4:stdin:2: include: cannot open `': No such file or directory
+@error{}m4:stdin:2: include: cannot open '': No such file or directory
@result{}
sinclude(`n')
@result{}
@@ -6622,7 +6620,7 @@ resulting @samp{b} is not further remapped to @samp{g}; the @samp{d} and
@comment rendering right in both info and dvi.
@example
-translit(`«abc~', `~-»')
+translit(`«abc~', `~-»')
@result{}abc
@end example
@@ -6891,14 +6889,14 @@ Likewise, escape sequences are not yet recognized.
@example
format(`%p', `0')
-@error{}m4:stdin:1: warning: format: unrecognized specifier in `%p'
+@error{}m4:stdin:1: warning: format: unrecognized specifier in '%p'
@result{}p
format(`%*d', `')
@error{}m4:stdin:2: warning: format: empty string treated as 0
@error{}m4:stdin:2: warning: format: too few arguments: 2 < 3
@result{}0
format(`%.1f', `2a')
-@error{}m4:stdin:3: warning: format: non-numeric argument `2a'
+@error{}m4:stdin:3: warning: format: non-numeric argument '2a'
@result{}2.0
@end example
@@ -7029,10 +7027,10 @@ eval(`2 = 2')
@error{}m4:stdin:1: warning: eval: recommend ==, not =, for equality
@result{}1
eval(`++0')
-@error{}m4:stdin:2: warning: eval: invalid operator: `++0'
+@error{}m4:stdin:2: warning: eval: invalid operator: '++0'
@result{}
eval(`0 |= 1')
-@error{}m4:stdin:3: warning: eval: invalid operator: `0 |= 1'
+@error{}m4:stdin:3: warning: eval: invalid operator: '0 |= 1'
@result{}
@end example
@@ -7075,12 +7073,12 @@ eval(`+ + - ~ ! ~ 0')
eval(`2 || 1 / 0')
@result{}1
eval(`0 || 1 / 0')
-@error{}m4:stdin:9: warning: eval: divide by zero: `0 || 1 / 0'
+@error{}m4:stdin:9: warning: eval: divide by zero: '0 || 1 / 0'
@result{}
eval(`0 && 1 % 0')
@result{}0
eval(`2 && 1 % 0')
-@error{}m4:stdin:11: warning: eval: modulo by zero: `2 && 1 % 0'
+@error{}m4:stdin:11: warning: eval: modulo by zero: '2 && 1 % 0'
@result{}
@end example
@@ -7102,9 +7100,9 @@ eval(`2 ** 0')
@result{}1
eval(`0 ** 0')
@result{}
-@error{}m4:stdin:5: warning: eval: divide by zero: `0 ** 0'
+@error{}m4:stdin:5: warning: eval: divide by zero: '0 ** 0'
eval(`4 ** -2')
-@error{}m4:stdin:6: warning: eval: negative exponent: `4 ** -2'
+@error{}m4:stdin:6: warning: eval: negative exponent: '4 ** -2'
@result{}
eval(`0 ? 2 : 3')
@result{}3
@@ -7155,7 +7153,7 @@ square(square(`5')` + 1')
define(`foo', `666')
@result{}
eval(`foo / 6')
-@error{}m4:stdin:11: warning: eval: bad expression: `foo / 6'
+@error{}m4:stdin:11: warning: eval: bad expression: 'foo / 6'
@result{}
eval(foo / 6)
@result{}111
@@ -8082,7 +8080,7 @@ ifdef(`__unix__', ,
changequote(`[', `]')dnl
syscmd([printf '#bogus\nV1\nF3,4\nlenlen\0\n' > in.m4f \
&& ']__program__[' -R in.m4f])sysval
-@error{}m4:in.m4f:4: ill-formed frozen file, invalid builtin `len\0' encountered
+@error{}m4:in.m4f:4: ill-formed frozen file, invalid builtin 'len\0' encountered
@result{}1
syscmd([rm -f in.m4f])sysval
@result{}0
@@ -8638,7 +8636,7 @@ forloop(`', `1', `2', ` odd iterator name')
forloop(`i', `5 + 5', `0xc', ` 0x`'eval(i, `16')')
@result{} 0xa 0xb 0xc
forloop(`i', `a', `b', `non-numeric bounds')
-@error{}m4:stdin:6: warning: eval: bad input: `(a) <= (b)'
+@error{}m4:stdin:6: warning: eval: bad input: '(a) <= (b)'
@result{}
@end example
@@ -9614,7 +9612,7 @@ macro is introduced the first time.
@bye
@c Local Variables:
-@c coding: iso-8859-1
+@c coding: utf-8
@c fill-column: 72
@c ispell-local-dictionary: "american"
@c indent-tabs-mode: nil
diff --git a/examples/null.err b/examples/null.err
index dbe52bc8..675b2a3b 100644
Binary files a/examples/null.err and b/examples/null.err differ
diff --git a/gnulib b/gnulib
index 3e38c274..3773db65 160000
--- a/gnulib
+++ b/gnulib
@@ -1 +1 @@
-Subproject commit 3e38c274dbac15d2288577a4b9da6e2f4a83ab5b
+Subproject commit 3773db653242ab7165cd300295c27405e4f9cc79
diff --git a/m4/gnulib-cache.m4 b/m4/gnulib-cache.m4
index 86c0dc98..3808e9ed 100644
--- a/m4/gnulib-cache.m4
+++ b/m4/gnulib-cache.m4
@@ -1,21 +1,110 @@
-# Copyright (C) 2002-2010 Free Software Foundation, Inc.
+# Copyright (C) 2002-2025 Free Software Foundation, Inc.
#
-# This file is free software, distributed under the terms of the GNU
-# General Public License. As a special exception to the GNU General
-# Public License, this file may be distributed as part of a program
-# that contains a configuration script generated by Autoconf, under
+# This file 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 file is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this file. If not, see .
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
#
# This file represents the specification of how gnulib-tool is used.
# It acts as a cache: It is written and read by gnulib-tool.
-# In projects using CVS, this file is meant to be stored in CVS,
-# like the configure.ac and various Makefile.am files.
+# In projects that use version control, this file is meant to be put under
+# version control, like the configure.ac and various Makefile.am files.
# Specification in the form of a command-line invocation:
-# gnulib-tool --import --dir=. --local-dir=local --lib=libm4 --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --with-tests --with-c++-tests --makefile-name=gnulib.mk --no-libtool --macro-prefix=M4 announce-gen assert autobuild avltree-oset binary-io bitrotate clean-temp cloexec close-stream closein config-h dirname error execute fdl-1.3 fflush filenamecat flexmember fopen fopen-safer freadptr freadseek fseeko gendocs getopt-gnu git-version-gen gnu-web-doc-update gnumakefile gnupload gpl-3.0 hash ignore-value intprops maintainer-makefile manywarnings memchr2 memcmp2 memmem mkstemp obstack obstack-printf-posix pipe progname quote regex rename snprintf-posix stdbool stdint stdlib-safer strtod strtol unlocked-io update-copyright vasnprintf-posix verror version-etc version-etc-fsf wait-process xalloc xmemdup0 xoset xprintf xvasprintf-posix
+# gnulib-tool --import \
+# --local-dir=local \
+# --lib=libm4 \
+# --source-base=lib \
+# --m4-base=m4 \
+# --doc-base=doc \
+# --tests-base=tests \
+# --aux-dir=build-aux \
+# --with-tests \
+# --with-c++-tests \
+# --makefile-name=gnulib.mk \
+# --no-conditional-dependencies \
+# --no-libtool \
+# --macro-prefix=M4 \
+# announce-gen \
+# assert \
+# autobuild \
+# avltree-oset \
+# binary-io \
+# bitrotate \
+# clean-temp \
+# cloexec \
+# close-stream \
+# closein \
+# config-h \
+# dirname \
+# error \
+# execute \
+# fdl-1.3 \
+# fflush \
+# filenamecat \
+# flexmember \
+# fopen \
+# fopen-safer \
+# freadptr \
+# freadseek \
+# fseeko \
+# gendocs \
+# getopt-gnu \
+# git-version-gen \
+# gnu-web-doc-update \
+# gnumakefile \
+# gnupload \
+# gpl-3.0 \
+# hash \
+# ignore-value \
+# intprops \
+# maintainer-makefile \
+# manywarnings \
+# memchr2 \
+# memcmp2 \
+# memmem \
+# mkstemp \
+# obstack \
+# obstack-printf-posix \
+# progname \
+# quote \
+# regex \
+# rename \
+# snprintf-posix \
+# spawn-pipe \
+# stdbool \
+# stdint \
+# stdlib-safer \
+# strtod \
+# strtol \
+# unlocked-io \
+# update-copyright \
+# vasnprintf-posix \
+# verror \
+# version-etc \
+# version-etc-fsf \
+# wait-process \
+# xalloc \
+# xmemdup0 \
+# xoset \
+# xprintf \
+# xvasprintf-posix
# Specification in the form of a few gnulib-tool.m4 macro invocations:
gl_LOCAL_DIR([local])
@@ -61,12 +150,12 @@ gl_MODULES([
mkstemp
obstack
obstack-printf-posix
- pipe
progname
quote
regex
rename
snprintf-posix
+ spawn-pipe
stdbool
stdint
stdlib-safer
@@ -97,3 +186,4 @@ gl_LIB([libm4])
gl_MAKEFILE_NAME([gnulib.mk])
gl_MACRO_PREFIX([M4])
gl_PO_DOMAIN([])
+gl_WITNESS_C_MACRO([])
diff --git a/src/builtin.c b/src/builtin.c
index bc0cde21..034016ce 100644
--- a/src/builtin.c
+++ b/src/builtin.c
@@ -27,8 +27,8 @@
#include "execute.h"
#include "memchr2.h"
#include "memcmp2.h"
-#include "pipe.h"
#include "regex.h"
+#include "spawn-pipe.h"
#include "wait-process.h"
/* Initialization of builtin and predefined macros. The table
@@ -1082,7 +1082,7 @@ m4_syscmd (struct obstack *obs M4_GNUC_UNUSED, int argc, macro_arguments *argv)
prog_args[2] = cmd;
caller = quotearg_style_mem (locale_quoting_style, me->name, me->name_len);
errno = 0;
- status = execute (caller, SYSCMD_SHELL, (char **) prog_args, false,
+ status = execute (caller, SYSCMD_SHELL, prog_args, NULL, NULL, false,
false, false, false, true, false, &sig_status);
if (sig_status)
{
@@ -1133,7 +1133,7 @@ m4_esyscmd (struct obstack *obs, int argc, macro_arguments *argv)
prog_args[2] = cmd;
caller = quotearg_style_mem (locale_quoting_style, me->name, me->name_len);
errno = 0;
- child = create_pipe_in (caller, SYSCMD_SHELL, (char **) prog_args,
+ child = create_pipe_in (caller, SYSCMD_SHELL, prog_args, NULL, NULL,
NULL, false, true, false, &fd);
if (child == -1)
{
@@ -1536,7 +1536,7 @@ mkstemp_helper (struct obstack *obs, const call_info *me, const char *pattern,
{
close (fd);
/* Remove NUL, then finish quote. */
- obstack_blank (obs, -1);
+ obstack_blank_fast (obs, -1);
obstack_grow (obs, curr_quote.str2, curr_quote.len2);
}
}
diff --git a/src/debug.c b/src/debug.c
index 75e55584..2aa42c7b 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -300,7 +300,7 @@ trace_flush (unsigned int start)
xfwrite (&base[start], 1, len - start, debug);
fputc ('\n', debug);
}
- obstack_blank (&trace, start - len);
+ obstack_blank_fast (&trace, start - len);
}
/* Do pre-argument-collection tracing for the macro call described in
diff --git a/src/input.c b/src/input.c
index 04f09910..02ca6950 100644
--- a/src/input.c
+++ b/src/input.c
@@ -1845,7 +1845,7 @@ next_token (token_data *td, int *line, struct obstack *obs, bool allow_argv,
obstack_object_size (&token_stack), 0, ®s)
!= (regoff_t) obstack_object_size (&token_stack))
{
- obstack_blank (&token_stack, -1);
+ obstack_blank_fast (&token_stack, -1);
break;
}
next_char (false, false);
diff --git a/src/m4.h b/src/m4.h
index d333c244..c771eaa0 100644
--- a/src/m4.h
+++ b/src/m4.h
@@ -52,7 +52,6 @@
#include "stdlib--.h"
#include "unistd--.h"
#include "vasnprintf.h"
-#include "verror.h"
#include "xalloc.h"
#include "xmemdup0.h"
#include "xprintf.h"
diff --git a/src/output.c b/src/output.c
index c7bc38ca..d3b69ca5 100644
--- a/src/output.c
+++ b/src/output.c
@@ -225,7 +225,7 @@ m4_tmpfile (int divnum)
}
name = m4_tmpname (divnum);
register_temp_file (output_temp_dir, name);
- file = fopen_temp (name, O_BINARY ? "wb+" : "w+");
+ file = fopen_temp (name, O_BINARY ? "wb+" : "w+", false);
if (file == NULL)
{
unregister_temp_file (output_temp_dir, name);
@@ -266,7 +266,7 @@ m4_tmpopen (int divnum, bool reread)
}
name = m4_tmpname (divnum);
/* We need update mode, to avoid truncation. */
- file = fopen_temp (name, O_BINARY ? "rb+" : "r+");
+ file = fopen_temp (name, O_BINARY ? "rb+" : "r+", false);
if (file == NULL)
m4_error (EXIT_FAILURE, errno, NULL,
_("cannot create temporary file for diversion"));
diff --git a/src/symtab.c b/src/symtab.c
index f7807077..ea4640e8 100644
--- a/src/symtab.c
+++ b/src/symtab.c
@@ -257,7 +257,7 @@ lookup_symbol (const char *name, size_t len, symbol_lookup mode)
if (old == entry)
{
- old = (symbol *) hash_delete (symtab, entry);
+ old = (symbol *) hash_remove (symtab, entry);
assert (entry == old);
sym->stack = sym;
entry = (symbol *) hash_insert (symtab, sym);
@@ -347,7 +347,7 @@ lookup_symbol (const char *name, size_t len, symbol_lookup mode)
old->stack = NULL;
free_symbol (old);
}
- sym = (symbol *) hash_delete (symtab, entry);
+ sym = (symbol *) hash_remove (symtab, entry);
assert (sym == entry);
sym->stack = NULL;
free_symbol (sym);