[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: improved error messages
From: |
Eric Blake |
Subject: |
Re: improved error messages |
Date: |
Sat, 24 Nov 2007 07:08:15 -0700 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071031 Thunderbird/2.0.0.9 Mnenhy/0.7.5.666 |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
According to Eric Blake on 11/23/2007 4:29 PM:
>> 2007-11-22 Eric Blake <address@hidden>
>
>> More error messages tied to macro names.
And while I'm at it, I found it easier if both branch and head passed just
a macro name to m4_bad_argc and m4_numeric_arg rather than the entire argv
structure. So head needed this patch:
- --
Don't work too hard, make some time for fun as well!
Eric Blake address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFHSDBO84KuGfSFAYARAv5WAJ9eAcDR92GigvpBsA6zCq515Rb9ZwCgi4f1
u/EiYgjfarZ/WGIgYE4T/V0=
=PEGF
-----END PGP SIGNATURE-----
>From 32ab6f9f819643ec7187bf1680d582eb8f131774 Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Sat, 24 Nov 2007 07:04:18 -0700
Subject: [PATCH] Pass only macro name to utility functions.
* m4/m4module.h (m4_bad_argc, m4_numeric_arg): Adjust signature.
* m4/utility.c (m4_bad_argc, m4_numeric_arg): Adjust
implementation.
* m4/macro.c (m4_macro_call): Adjust callers.
* modules/gnu.c (builtin, debuglen): Likewise.
* modules/m4.c (ifelse, incr, decr, divert, undivert, m4exit)
(substr): Likewise.
* modules/evalparse.c (m4_evaluate): Likewise.
* modules/stdlib.c (setenv, getpwuid, srand): Likewise.
* modules/time.c (ctime, gmtime, localtime, mktime, strftime):
Likewise.
Signed-off-by: Eric Blake <address@hidden>
---
ChangeLog | 15 +++++++++++++++
m4/m4module.h | 4 ++--
m4/macro.c | 2 +-
m4/utility.c | 38 ++++++++++++++++++--------------------
modules/evalparse.c | 34 +++++++++++++++++-----------------
modules/gnu.c | 29 +++++++++++++++--------------
modules/m4.c | 27 +++++++++++++++------------
modules/stdlib.c | 6 +++---
modules/time.c | 23 ++++++++++++-----------
9 files changed, 98 insertions(+), 80 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 0b02b24..f71a00f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2007-11-24 Eric Blake <address@hidden>
+
+ Pass only macro name to utility functions.
+ * m4/m4module.h (m4_bad_argc, m4_numeric_arg): Adjust signature.
+ * m4/utility.c (m4_bad_argc, m4_numeric_arg): Adjust
+ implementation.
+ * m4/macro.c (m4_macro_call): Adjust callers.
+ * modules/gnu.c (builtin, debuglen): Likewise.
+ * modules/m4.c (ifelse, incr, decr, divert, undivert, m4exit)
+ (substr): Likewise.
+ * modules/evalparse.c (m4_evaluate): Likewise.
+ * modules/stdlib.c (setenv, getpwuid, srand): Likewise.
+ * modules/time.c (ctime, gmtime, localtime, mktime, strftime):
+ Likewise.
+
2007-11-23 Eric Blake <address@hidden>
Add macro name to debugfile messages.
diff --git a/m4/m4module.h b/m4/m4module.h
index 8b59e15..01514db 100644
--- a/m4/m4module.h
+++ b/m4/m4module.h
@@ -102,9 +102,9 @@ struct m4_macro
#define M4ARG(i) (argc > (i) ? m4_get_symbol_value_text (argv[i]) : "")
-extern bool m4_bad_argc (m4 *, int, m4_symbol_value **,
+extern bool m4_bad_argc (m4 *, int, const char *,
unsigned int, unsigned int, bool);
-extern bool m4_numeric_arg (m4 *, int, m4_symbol_value **, int, int *);
+extern bool m4_numeric_arg (m4 *, const char *, const char *, int *);
extern void m4_dump_args (m4 *, m4_obstack *, int,
m4_symbol_value **, const char *, bool);
extern bool m4_parse_truth_arg (m4 *, const char *, const char *, bool);
diff --git a/m4/macro.c b/m4/macro.c
index ffe55f7..dd93152 100644
--- a/m4/macro.c
+++ b/m4/macro.c
@@ -389,7 +389,7 @@ void
m4_macro_call (m4 *context, m4_symbol_value *value, m4_obstack *expansion,
int argc, m4_symbol_value **argv)
{
- if (m4_bad_argc (context, argc, argv,
+ if (m4_bad_argc (context, argc, m4_get_symbol_value_text (argv[0]),
VALUE_MIN_ARGS (value), VALUE_MAX_ARGS (value),
BIT_TEST (VALUE_FLAGS (value),
VALUE_SIDE_EFFECT_ARGS_BIT)))
diff --git a/m4/utility.c b/m4/utility.c
index 1839ea1..a8873f3 100644
--- a/m4/utility.c
+++ b/m4/utility.c
@@ -27,7 +27,7 @@
#include "verror.h"
#include "xvasprintf.h"
-static const char * skip_space (m4 *, const char *);
+static const char *skip_space (m4 *, const char *);
@@ -36,23 +36,23 @@ static const char * skip_space (m4 *, const char *);
number of acceptable arguments, MAX is the 0-based maximum number
or UINT_MAX if not applicable, and SIDE_EFFECT is true if the macro
has side effects even if min is not satisfied. ARGC is the 1-based
- count of ARGV, where ARGV[0] is the name of the macro. Return true
- if the macro is guaranteed to expand to the empty string, false
- otherwise. */
+ count of supplied arguments, and CALLER is the name of the macro.
+ Return true if the macro is guaranteed to expand to the empty
+ string, false otherwise. */
bool
-m4_bad_argc (m4 *context, int argc, m4_symbol_value **argv,
- unsigned int min, unsigned int max, bool side_effect)
+m4_bad_argc (m4 *context, int argc, const char *caller, unsigned int min,
+ unsigned int max, bool side_effect)
{
if (argc - 1 < min)
{
- m4_warn (context, 0, M4ARG (0), _("too few arguments: %d < %d"),
+ m4_warn (context, 0, caller, _("too few arguments: %d < %d"),
argc - 1, min);
- return ! side_effect;
+ return !side_effect;
}
if (argc - 1 > max)
{
- m4_warn (context, 0, M4ARG (0), _("extra arguments ignored: %d > %d"),
+ m4_warn (context, 0, caller, _("extra arguments ignored: %d > %d"),
argc - 1, max);
}
@@ -68,28 +68,26 @@ skip_space (m4 *context, const char *arg)
}
/* The function m4_numeric_arg () converts ARG to an int pointed to by
- VALUEP. If the conversion fails, print error message for macro.
+ VALUEP. If the conversion fails, print error message for CALLER.
Return true iff conversion succeeds. */
/* FIXME: Convert this to use gnulib's xstrtoimax, xstrtoumax.
Otherwise, we are arbitrarily limiting integer values. */
bool
-m4_numeric_arg (m4 *context, int argc, m4_symbol_value **argv,
- int arg, int *valuep)
+m4_numeric_arg (m4 *context, const char *caller, const char *arg, int *valuep)
{
char *endp;
- if (*M4ARG (arg) == '\0')
+ if (*arg == '\0')
{
*valuep = 0;
- m4_warn (context, 0, M4ARG (0), _("empty string treated as 0"));
+ m4_warn (context, 0, caller, _("empty string treated as 0"));
}
else
{
- *valuep = strtol (skip_space (context, M4ARG (arg)), &endp, 10);
+ *valuep = strtol (skip_space (context, arg), &endp, 10);
if (*skip_space (context, endp) != 0)
{
- m4_warn (context, 0, M4ARG (0), _("non-numeric argument `%s'"),
- M4ARG (arg));
+ m4_warn (context, 0, caller, _("non-numeric argument `%s'"), arg);
return false;
}
}
@@ -164,7 +162,7 @@ m4_verror_at_line (m4 *context, bool warn, int status, int
errnum,
full ? full : format, args);
free (full);
if ((!warn || m4_get_fatal_warnings_opt (context))
- && ! m4_get_exit_status (context))
+ && !m4_get_exit_status (context))
m4_set_exit_status (context, EXIT_FAILURE);
}
@@ -182,7 +180,7 @@ m4_error (m4 *context, int status, int errnum, const char
*macro,
{
va_list args;
int line = m4_get_current_line (context);
- assert (m4_get_current_file (context) || ! line);
+ assert (m4_get_current_file (context) || !line);
va_start (args, format);
if (status == EXIT_SUCCESS && m4_get_warnings_exit_opt (context))
status = EXIT_FAILURE;
@@ -228,7 +226,7 @@ m4_warn (m4 *context, int errnum, const char *macro, const
char *format, ...)
va_list args;
int status = EXIT_SUCCESS;
int line = m4_get_current_line (context);
- assert (m4_get_current_file (context) || ! line);
+ assert (m4_get_current_file (context) || !line);
va_start (args, format);
if (m4_get_warnings_exit_opt (context))
status = EXIT_FAILURE;
diff --git a/modules/evalparse.c b/modules/evalparse.c
index b4639b0..260ee1a 100644
--- a/modules/evalparse.c
+++ b/modules/evalparse.c
@@ -887,38 +887,40 @@ simple_term (m4 *context, eval_token et, number *v1)
void
m4_evaluate (m4 *context, m4_obstack *obs, int argc, m4_symbol_value **argv)
{
+ const char * me = M4ARG (0);
+ const char * str = M4ARG (1);
int radix = 10;
int min = 1;
number val;
eval_token et;
eval_error err = NO_ERROR;
- if (*M4ARG (2) && !m4_numeric_arg (context, argc, argv, 2, &radix))
+ if (*M4ARG (2) && !m4_numeric_arg (context, me, M4ARG (2), &radix))
return;
if (radix < 1 || radix > 36)
{
- m4_warn (context, 0, M4ARG (0), _("radix out of range: %d"), radix);
+ m4_warn (context, 0, me, _("radix out of range: %d"), radix);
return;
}
- if (argc >= 4 && !m4_numeric_arg (context, argc, argv, 3, &min))
+ if (argc >= 4 && !m4_numeric_arg (context, me, M4ARG (3), &min))
return;
if (min < 0)
{
- m4_warn (context, 0, M4ARG (0), _("negative width: %d"), min);
+ m4_warn (context, 0, me, _("negative width: %d"), min);
return;
}
numb_initialise ();
- eval_init_lex (M4ARG (1));
+ eval_init_lex (str);
numb_init (val);
et = eval_lex (&val);
if (et == EOTEXT)
{
- m4_warn (context, 0, M4ARG (0), _("empty string treated as zero"));
+ m4_warn (context, 0, me, _("empty string treated as zero"));
numb_set (val, numb_ZERO);
}
else
@@ -939,42 +941,40 @@ m4_evaluate (m4 *context, m4_obstack *obs, int argc,
m4_symbol_value **argv)
break;
case MISSING_RIGHT:
- m4_warn (context, 0, M4ARG (0), _("missing right parenthesis: %s"),
- M4ARG (1));
+ m4_warn (context, 0, me, _("missing right parenthesis: %s"), str);
break;
case MISSING_COLON:
- m4_warn (context, 0, M4ARG (0), _("missing colon: %s"), M4ARG (1));
+ m4_warn (context, 0, me, _("missing colon: %s"), str);
break;
case SYNTAX_ERROR:
- m4_warn (context, 0, M4ARG (0), _("bad expression: %s"), M4ARG (1));
+ m4_warn (context, 0, me, _("bad expression: %s"), str);
break;
case UNKNOWN_INPUT:
- m4_warn (context, 0, M4ARG (0), _("bad input: %s"), M4ARG (1));
+ m4_warn (context, 0, me, _("bad input: %s"), str);
break;
case EXCESS_INPUT:
- m4_warn (context, 0, M4ARG (0), _("excess input: %s"), M4ARG (1));
+ m4_warn (context, 0, me, _("excess input: %s"), str);
break;
case INVALID_OPERATOR:
/* POSIX requires an error here, unless XCU ERN 137 is approved. */
- m4_error (context, 0, 0, M4ARG (0), _("invalid operator: %s"),
- M4ARG (1));
+ m4_error (context, 0, 0, me, _("invalid operator: %s"), str);
break;
case DIVIDE_ZERO:
- m4_warn (context, 0, M4ARG (0), _("divide by zero: %s"), M4ARG (1));
+ m4_warn (context, 0, me, _("divide by zero: %s"), str);
break;
case MODULO_ZERO:
- m4_warn (context, 0, M4ARG (0), _("modulo by zero: %s"), M4ARG (1));
+ m4_warn (context, 0, me, _("modulo by zero: %s"), str);
break;
case NEGATIVE_EXPONENT:
- m4_warn (context, 0, M4ARG (0), _("negative exponent: %s"), M4ARG (1));
+ m4_warn (context, 0, me, _("negative exponent: %s"), str);
break;
default:
diff --git a/modules/gnu.c b/modules/gnu.c
index 1aba84b..e857632 100644
--- a/modules/gnu.c
+++ b/modules/gnu.c
@@ -405,25 +405,26 @@ M4BUILTIN_HANDLER (__program__)
**/
M4BUILTIN_HANDLER (builtin)
{
+ const char *me = M4ARG (0);
const char *name;
m4_symbol_value *value;
- if (! m4_is_symbol_value_text (argv[1]))
+ if (!m4_is_symbol_value_text (argv[1]))
{
if (m4_is_symbol_value_func (argv[1])
&& m4_get_symbol_value_func (argv[1]) == builtin_builtin)
{
- if (m4_bad_argc (context, argc, argv, 2, 2, false))
+ if (m4_bad_argc (context, argc, me, 2, 2, false))
return;
- if (! m4_is_symbol_value_text (argv[2]))
+ if (!m4_is_symbol_value_text (argv[2]))
{
- m4_warn (context, 0, M4ARG (0), _("invalid macro name ignored"));
+ m4_warn (context, 0, me, _("invalid macro name ignored"));
return;
}
name = M4ARG (2);
value = m4_builtin_find_by_name (NULL, name);
if (value == NULL)
- m4_warn (context, 0, M4ARG (0), _("undefined builtin `%s'"), name);
+ m4_warn (context, 0, me, _("undefined builtin `%s'"), name);
else
{
m4_push_builtin (context, value);
@@ -431,25 +432,25 @@ M4BUILTIN_HANDLER (builtin)
}
}
else
- m4_warn (context, 0, M4ARG (0), _("invalid macro name ignored"));
+ m4_warn (context, 0, me, _("invalid macro name ignored"));
}
else
{
name = M4ARG (1);
value = m4_builtin_find_by_name (NULL, name);
if (value == NULL)
- m4_warn (context, 0, M4ARG (0), _("undefined builtin `%s'"), name);
+ m4_warn (context, 0, me, _("undefined builtin `%s'"), name);
else
{
const m4_builtin *bp = m4_get_symbol_value_builtin (value);
- if (!m4_bad_argc (context, argc - 1, argv + 1,
+ if (!m4_bad_argc (context, argc - 1, name,
bp->min_args, bp->max_args,
(bp->flags & M4_BUILTIN_SIDE_EFFECT) != 0))
{
int i;
if ((bp->flags & M4_BUILTIN_GROKS_MACRO) == 0)
for (i = 2; i < argc; i++)
- if (! m4_is_symbol_value_text (argv[i]))
+ if (!m4_is_symbol_value_text (argv[i]))
m4_set_symbol_value_text (argv[i], "");
bp->func (context, obs, argc - 1, argv + 1);
}
@@ -559,7 +560,7 @@ M4BUILTIN_HANDLER (debugfile)
M4BUILTIN_HANDLER (debuglen)
{
int i;
- if (!m4_numeric_arg (context, argc, argv, 1, &i))
+ if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &i))
return;
/* FIXME - make m4_numeric_arg more powerful - we want to accept
suffixes, and limit the result to size_t. */
@@ -666,7 +667,7 @@ M4BUILTIN_HANDLER (format)
**/
M4BUILTIN_HANDLER (indir)
{
- if (! m4_is_symbol_value_text (argv[1]))
+ if (!m4_is_symbol_value_text (argv[1]))
m4_warn (context, 0, M4ARG (0), _("invalid macro name ignored"));
else
{
@@ -678,9 +679,9 @@ M4BUILTIN_HANDLER (indir)
else
{
int i;
- if (! m4_symbol_groks_macro (symbol))
+ if (!m4_symbol_groks_macro (symbol))
for (i = 2; i < argc; i++)
- if (! m4_is_symbol_value_text (argv[i]))
+ if (!m4_is_symbol_value_text (argv[i]))
m4_set_symbol_value_text (argv[i], "");
m4_macro_call (context, m4_get_symbol_value (symbol), obs,
argc - 1, argv + 1);
@@ -784,7 +785,7 @@ M4BUILTIN_HANDLER (regexp)
/* The first case is the most difficult, because the empty string
is a valid RESYNTAX, yet we want `regexp(aab, a*, )' to return
- an empty string as per M4 1.4.x! */
+ an empty string as per M4 1.4.x. */
if ((*replace == '\0') || (resyntax < 0))
/* regexp(VICTIM, REGEXP, REPLACEMENT) */
diff --git a/modules/m4.c b/modules/m4.c
index ec2372a..bffb274 100644
--- a/modules/m4.c
+++ b/modules/m4.c
@@ -246,6 +246,7 @@ M4BUILTIN_HANDLER (ifdef)
M4BUILTIN_HANDLER (ifelse)
{
+ const char *me = M4ARG (0);
const char *result;
/* The valid ranges of argc for ifelse is discontinuous, we cannot
@@ -253,11 +254,11 @@ M4BUILTIN_HANDLER (ifelse)
if (argc == 2)
return;
- if (m4_bad_argc (context, argc, argv, 3, -1, false))
+ if (m4_bad_argc (context, argc, me, 3, -1, false))
return;
else if (argc % 3 == 0)
/* Diagnose excess arguments if 5, 8, 11, etc., actual arguments. */
- m4_bad_argc (context, argc, argv, 0, argc - 2, false);
+ m4_bad_argc (context, argc, me, 0, argc - 2, false);
argv++;
argc--;
@@ -549,7 +550,7 @@ M4BUILTIN_HANDLER (incr)
{
int value;
- if (!m4_numeric_arg (context, argc, argv, 1, &value))
+ if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &value))
return;
m4_shipout_int (obs, value + 1);
@@ -559,7 +560,7 @@ M4BUILTIN_HANDLER (decr)
{
int value;
- if (!m4_numeric_arg (context, argc, argv, 1, &value))
+ if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &value))
return;
m4_shipout_int (obs, value - 1);
@@ -576,7 +577,7 @@ M4BUILTIN_HANDLER (divert)
int i = 0;
const char *text;
- if (argc >= 2 && !m4_numeric_arg (context, argc, argv, 1, &i))
+ if (argc >= 2 && !m4_numeric_arg (context, M4ARG (0), M4ARG (1), &i))
return;
m4_make_diversion (context, i);
@@ -613,7 +614,7 @@ M4BUILTIN_HANDLER (undivert)
if (*endp == '\0' && !isspace ((unsigned char) *str))
m4_insert_diversion (context, diversion);
else if (m4_get_posixly_correct_opt (context))
- m4_numeric_arg (context, argc, argv, i, &diversion);
+ m4_numeric_arg (context, me, str, &diversion);
else
{
FILE *fp = m4_path_search (context, str, NULL);
@@ -825,7 +826,7 @@ M4BUILTIN_HANDLER (m4exit)
int exit_code = EXIT_SUCCESS;
/* Warn on bad arguments, but still exit. */
- if (argc >= 2 && !m4_numeric_arg (context, argc, argv, 1, &exit_code))
+ if (argc >= 2 && !m4_numeric_arg (context, me, M4ARG (1), &exit_code))
exit_code = EXIT_FAILURE;
if (exit_code < 0 || exit_code > 255)
{
@@ -934,21 +935,23 @@ M4BUILTIN_HANDLER (index)
substring extends to the end of the first argument. */
M4BUILTIN_HANDLER (substr)
{
+ const char *me = M4ARG (0);
+ const char *str = M4ARG (1);
int start = 0;
int length;
int avail;
if (argc <= 2)
{
- obstack_grow (obs, M4ARG (1), strlen (M4ARG (1)));
+ obstack_grow (obs, str, strlen (str));
return;
}
- length = avail = strlen (M4ARG (1));
- if (!m4_numeric_arg (context, argc, argv, 2, &start))
+ length = avail = strlen (str);
+ if (!m4_numeric_arg (context, me, M4ARG (2), &start))
return;
- if (argc >= 4 && !m4_numeric_arg (context, argc, argv, 3, &length))
+ if (argc >= 4 && !m4_numeric_arg (context, me, M4ARG (3), &length))
return;
if (start < 0 || length <= 0 || start >= avail)
@@ -956,7 +959,7 @@ M4BUILTIN_HANDLER (substr)
if (start + length > avail)
length = avail - start;
- obstack_grow (obs, M4ARG (1) + start, length);
+ obstack_grow (obs, str + start, length);
}
diff --git a/modules/stdlib.c b/modules/stdlib.c
index 471ae17..62fdae7 100644
--- a/modules/stdlib.c
+++ b/modules/stdlib.c
@@ -110,7 +110,7 @@ M4BUILTIN_HANDLER (setenv)
int overwrite = 1;
if (argc >= 4)
- if (!m4_numeric_arg (context, argc, argv, 3, &overwrite))
+ if (!m4_numeric_arg (context, M4ARG (0), M4ARG (3), &overwrite))
return;
#if HAVE_SETENV
@@ -209,7 +209,7 @@ M4BUILTIN_HANDLER (getpwuid)
struct passwd *pw;
int uid;
- if (!m4_numeric_arg (context, argc, argv, 1, &uid))
+ if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &uid))
return;
pw = getpwuid (uid);
@@ -264,7 +264,7 @@ M4BUILTIN_HANDLER (srand)
seed = time (0L) * getpid ();
else
{
- if (!m4_numeric_arg (context, argc, argv, 1, &seed))
+ if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &seed))
return;
}
diff --git a/modules/time.c b/modules/time.c
index 62cff92..9807ae0 100644
--- a/modules/time.c
+++ b/modules/time.c
@@ -107,7 +107,7 @@ M4BUILTIN_HANDLER (ctime)
if (argc == 2)
{
- m4_numeric_arg (context, argc, argv, 1, &i);
+ m4_numeric_arg (context, M4ARG (0), M4ARG (1), &i);
t = i;
}
else
@@ -155,7 +155,7 @@ M4BUILTIN_HANDLER (gmtime)
time_t t;
int i;
- if (!m4_numeric_arg (context, argc, argv, 1, &i))
+ if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &i))
return;
t = i;
@@ -170,7 +170,7 @@ M4BUILTIN_HANDLER (localtime)
time_t t;
int i;
- if (!m4_numeric_arg (context, argc, argv, 1, &i))
+ if (!m4_numeric_arg (context, M4ARG (0), M4ARG (1), &i))
return;
t = i;
@@ -183,22 +183,23 @@ M4BUILTIN_HANDLER (localtime)
**/
M4BUILTIN_HANDLER (mktime)
{
+ const char *me = M4ARG (0);
struct tm tm;
time_t t;
- if (!m4_numeric_arg (context, argc, argv, 1, &tm.tm_sec))
+ if (!m4_numeric_arg (context, me, M4ARG (1), &tm.tm_sec))
return;
- if (!m4_numeric_arg (context, argc, argv, 2, &tm.tm_min))
+ if (!m4_numeric_arg (context, me, M4ARG (2), &tm.tm_min))
return;
- if (!m4_numeric_arg (context, argc, argv, 3, &tm.tm_hour))
+ if (!m4_numeric_arg (context, me, M4ARG (3), &tm.tm_hour))
return;
- if (!m4_numeric_arg (context, argc, argv, 4, &tm.tm_mday))
+ if (!m4_numeric_arg (context, me, M4ARG (4), &tm.tm_mday))
return;
- if (!m4_numeric_arg (context, argc, argv, 5, &tm.tm_mon))
+ if (!m4_numeric_arg (context, me, M4ARG (5), &tm.tm_mon))
return;
- if (!m4_numeric_arg (context, argc, argv, 6, &tm.tm_year))
+ if (!m4_numeric_arg (context, me, M4ARG (6), &tm.tm_year))
return;
- if (M4ARG (7) && !m4_numeric_arg (context, argc, argv, 7, &tm.tm_isdst))
+ if (M4ARG (7) && !m4_numeric_arg (context, me, M4ARG (7), &tm.tm_isdst))
return;
t = mktime (&tm);
@@ -218,7 +219,7 @@ M4BUILTIN_HANDLER (strftime)
char *buf;
int l;
- if (!m4_numeric_arg (context, argc, argv, 2, &l))
+ if (!m4_numeric_arg (context, M4ARG (0), M4ARG (2), &l))
return;
t = l;
--
1.5.3.5