Re: argv_ref patch 24: allow NUL in macro names
Eric Blake <[email protected]>
| Newsgroups | gmane.comp.gnu.m4.patches |
|---|---|
| Message-ID | <[email protected]> |
Eric Blake <ebb9 <at> byu.net> writes: > > Eric Blake <ebb9 <at> byu.net> writes: > > > hardware.] On the master branch, I split it into three patches - > > reworking m4_error to take a call_info * instead of a char * (so that the > > length can be passed in alongside the name), changing the symbol table to > > support NUL, and changing all macro name output (warnings, dumpdef, trace) > > to handle or quote difficult characters while avoiding extra munging of > > the global location variables. > > And I'm not sure how I let the master branch testsuite failure in - I thought I > properly ran 'make check' before committing. This also introduced some potential failures on 64-bit platforms, due to carelessness in using size_t instead of int for the call_id in contrast to the branch, but without updating the printf specifiers accordingly. I think newer gcc detects that automatically, but gcc 3.4 on a 32-bit platform did not trigger any -Wall warnings; it took a build on a x86_64 machine to see this. Fixed as follows: From ec19d062daf1e3402fefa1f81f59a9460a878e9d Mon Sep 17 00:00:00 2001 From: Eric Blake <[email protected]> Date: Tue, 3 Jun 2008 09:17:42 -0600 Subject: [PATCH] Fix printf type mismatches. * m4/m4module.h (m4_bad_argc): Alter parameter type. * m4/m4private.h (struct m4_call_info): Alter call_id type. * m4/macro.c (expand_macro, m4__adjust_refcount): Use correct specifiers. * m4/utility.c (m4_bad_argc): Likewise. Signed-off-by: Eric Blake <[email protected]> --- ChangeLog | 7 +++++++ m4/m4module.h | 2 +- m4/m4private.h | 2 +- m4/macro.c | 6 +++--- m4/utility.c | 6 +++--- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6abc3b4..b94b250 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2008-06-03 Eric Blake <[email protected]> + Fix printf type mismatches. + * m4/m4module.h (m4_bad_argc): Alter parameter type. + * m4/m4private.h (struct m4_call_info): Alter call_id type. + * m4/macro.c (expand_macro, m4__adjust_refcount): Use correct + specifiers. + * m4/utility.c (m4_bad_argc): Likewise. + Borrow bootstrap ideas from gnulib. * bootstrap (options, DOWNLOAD_PO): Remove --download-po; the advertized subset of languages didn't work. Use --skip-po diff --git a/m4/m4module.h b/m4/m4module.h index 346463d..29495f3 100644 --- a/m4/m4module.h +++ b/m4/m4module.h @@ -167,7 +167,7 @@ struct m4_string_pair `m4_macro_args *argv' are in scope. */ #define M4ARGLEN(i) m4_arg_len (context, argv, i) -extern bool m4_bad_argc (m4 *, int, const m4_call_info *, size_t, +extern bool m4_bad_argc (m4 *, size_t, const m4_call_info *, size_t, size_t, bool); extern bool m4_numeric_arg (m4 *, const m4_call_info *, const char *, int *); diff --git a/m4/m4private.h b/m4/m4private.h index e1c8163..9734a16 100644 --- a/m4/m4private.h +++ b/m4/m4private.h @@ -341,7 +341,7 @@ struct m4_call_info { const char *file; /* The file containing the macro invocation. */ int line; /* The line the macro was called on. */ - int call_id; /* The unique sequence call id of the macro. */ + size_t call_id; /* The unique sequence call id of the macro. */ int trace : 1; /* True to trace this macro. */ int debug_level : 31; /* The debug level for tracing the macro call. */ const char *name; /* The macro name. */ diff --git a/m4/macro.c b/m4/macro.c index 1436ea9..b1f9f44 100644 --- a/m4/macro.c +++ b/m4/macro.c @@ -526,7 +526,7 @@ recursion limit of %zu exceeded, use -L<N> to change it"), { obstack_free (stack->args, args_scratch); if (debug_macro_level & PRINT_ARGCOUNT_CHANGES) - xfprintf (stderr, "m4debug: -%d- `%s' in use, level=%d, " + xfprintf (stderr, "m4debug: -%zu- `%s' in use, level=%zu, " "refcount=%zu, argcount=%zu\n", info.call_id, argv->info->name, level, stack->refcount, stack->argcount); @@ -980,13 +980,13 @@ m4__adjust_refcount (m4 *context, size_t level, bool increase) obstack_free (stack->args, stack->args_base); obstack_free (stack->argv, stack->argv_base); if ((debug_macro_level & PRINT_ARGCOUNT_CHANGES) && 1 < stack->argcount) - xfprintf (stderr, "m4debug: -%d- freeing %zu args, level=%d\n", + xfprintf (stderr, "m4debug: -%zu- freeing %zu args, level=%zu\n", macro_call_id, stack->argcount, level); stack->argcount = 0; } if (debug_macro_level & (increase ? PRINT_REFCOUNT_INCREASE : PRINT_REFCOUNT_DECREASE)) - xfprintf (stderr, "m4debug: level %d refcount=%d\n", level, + xfprintf (stderr, "m4debug: level %zu refcount=%zu\n", level, stack->refcount); return stack->refcount; } diff --git a/m4/utility.c b/m4/utility.c index c104779..596c621 100644 --- a/m4/utility.c +++ b/m4/utility.c @@ -41,19 +41,19 @@ static const char *skip_space (m4 *, const char *); Return true if the macro is guaranteed to expand to the empty string, false otherwise. */ bool -m4_bad_argc (m4 *context, int argc, const m4_call_info *caller, size_t min, +m4_bad_argc (m4 *context, size_t argc, const m4_call_info *caller, size_t min, size_t max, bool side_effect) { if (argc - 1 < min) { - m4_warn (context, 0, caller, _("too few arguments: %d < %d"), + m4_warn (context, 0, caller, _("too few arguments: %zu < %zu"), argc - 1, min); return !side_effect; } if (argc - 1 > max) { - m4_warn (context, 0, caller, _("extra arguments ignored: %d > %d"), + m4_warn (context, 0, caller, _("extra arguments ignored: %zu > %zu"), argc - 1, max); } -- 1.5.5.1