From: Paul Eggert Date: Thu, 21 Nov 2002 07:35:58 +0000 (+0000) Subject: Sync with gnulib. X-Git-Tag: BISON-1_875~212 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/6f5db56451b30c6ad9708cd0fbc299a46d91545e Sync with gnulib. --- diff --git a/lib/argmatch.c b/lib/argmatch.c index 3fc4bff2..35787842 100644 --- a/lib/argmatch.c +++ b/lib/argmatch.c @@ -1,5 +1,5 @@ /* argmatch.c -- find a match for a string in an array - Copyright (C) 1990, 1998, 1999, 2001 Free Software Foundation, Inc. + Copyright (C) 1990, 1998, 1999, 2001, 2002 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,28 +18,23 @@ /* Written by David MacKenzie Modified by Akim Demaille */ +#if HAVE_CONFIG_H +# include +#endif + #include "argmatch.h" #include -#ifdef STDC_HEADERS -# include -# include -#endif - -#if HAVE_LOCALE_H -# include -#endif +#include +#include -#if ENABLE_NLS -# include -# define _(Text) gettext (Text) -#else -# define _(Text) Text -#endif +#include "gettext.h" +#define _(msgid) gettext (msgid) #include "error.h" #include "quotearg.h" #include "quote.h" +#include "unlocked-io.h" /* When reporting an invalid argument, show nonprinting characters by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use @@ -48,14 +43,6 @@ # define ARGMATCH_QUOTING_STYLE locale_quoting_style #endif -/* The following test is to work around the gross typo in - systems like Sony NEWS-OS Release 4.0C, whereby EXIT_FAILURE - is defined to 0, not 1. */ -#if !EXIT_FAILURE -# undef EXIT_FAILURE -# define EXIT_FAILURE 1 -#endif - /* Non failing version of argmatch call this function after failing. */ #ifndef ARGMATCH_DIE # define ARGMATCH_DIE exit (EXIT_FAILURE) diff --git a/lib/argmatch.h b/lib/argmatch.h index eb91f51a..5595ee43 100644 --- a/lib/argmatch.h +++ b/lib/argmatch.h @@ -21,29 +21,24 @@ #ifndef ARGMATCH_H_ # define ARGMATCH_H_ 1 -# if HAVE_CONFIG_H -# include -# endif +# include -# include +# define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) -# ifndef PARAMS -# if PROTOTYPES || (defined (__STDC__) && __STDC__) -# define PARAMS(args) args -# else -# define PARAMS(args) () -# endif /* GCC. */ -# endif /* Not PARAMS. */ +# define ARGMATCH_CONSTRAINT(Arglist, Vallist) \ + (ARRAY_CARDINALITY (Arglist) == ARRAY_CARDINALITY (Vallist) + 1) /* Assert there are as many real arguments as there are values - (argument list ends with a NULL guard). There is no execution - cost, since it will be statically evalauted to `assert (0)' or - `assert (1)'. Unfortunately there is no -Wassert-0. */ + (argument list ends with a NULL guard). ARGMATCH_VERIFY is + preferred, since it is guaranteed to be chedk at compile-time. + ARGMATCH_ASSERT is for backward compatibility only. */ -# define ARRAY_CARDINALITY(Array) (sizeof ((Array)) / sizeof (*(Array))) +# define ARGMATCH_VERIFY(Arglist, Vallist) \ + struct argmatch_verify \ + { \ + char argmatch_verify[ARGMATCH_CONSTRAINT(Arglist, Vallist) ? 1 : -1]; \ + } -# define ARGMATCH_CONSTRAINT(Arglist, Vallist) \ - (ARRAY_CARDINALITY ((Arglist)) == ARRAY_CARDINALITY ((Vallist)) + 1) # define ARGMATCH_ASSERT(Arglist, Vallist) \ assert (ARGMATCH_CONSTRAINT (Arglist, Vallist)) @@ -52,79 +47,74 @@ false ambiguities (i.e., different matches of ARG but corresponding to the same values in VALLIST). */ -int argmatch - PARAMS ((const char *arg, const char *const *arglist, - const char *vallist, size_t valsize)); -int argcasematch - PARAMS ((const char *arg, const char *const *arglist, - const char *vallist, size_t valsize)); +int argmatch (char const *arg, char const *const *arglist, + char const *vallist, size_t valsize); +int argcasematch (char const *arg, char const *const *arglist, + char const *vallist, size_t valsize); # define ARGMATCH(Arg, Arglist, Vallist) \ - argmatch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist))) + argmatch (Arg, Arglist, (char const *) (Vallist), sizeof *(Vallist)) # define ARGCASEMATCH(Arg, Arglist, Vallist) \ - argcasematch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist))) + argcasematch (Arg, Arglist, (char const *) (Vallist), sizeof *(Vallist)) /* xargmatch calls this function when it fails. This function should not return. By default, this is a function that calls ARGMATCH_DIE which in turn defaults to `exit (EXIT_FAILURE)'. */ -typedef void (*argmatch_exit_fn) PARAMS ((void)); +typedef void (*argmatch_exit_fn) (void); extern argmatch_exit_fn argmatch_die; /* Report on stderr why argmatch failed. Report correct values. */ -void argmatch_invalid - PARAMS ((const char *context, const char *value, int problem)); +void argmatch_invalid (char const *context, char const *value, int problem); /* Left for compatibility with the old name invalid_arg */ # define invalid_arg(Context, Value, Problem) \ - argmatch_invalid ((Context), (Value), (Problem)) + argmatch_invalid (Context, Value, Problem) /* Report on stderr the list of possible arguments. */ -void argmatch_valid - PARAMS ((const char *const *arglist, - const char *vallist, size_t valsize)); +void argmatch_valid (char const *const *arglist, + char const *vallist, size_t valsize); # define ARGMATCH_VALID(Arglist, Vallist) \ - argmatch_valid (Arglist, (const char *) Vallist, sizeof (*(Vallist))) + argmatch_valid (Arglist, (char const *) (Vallist), sizeof *(Vallist)) /* Same as argmatch, but upon failure, reports a explanation on the failure, and exits using the function EXIT_FN. */ -int __xargmatch_internal - PARAMS ((const char *context, - const char *arg, const char *const *arglist, - const char *vallist, size_t valsize, - int case_sensitive, argmatch_exit_fn exit_fn)); +int __xargmatch_internal (char const *context, + char const *arg, char const *const *arglist, + char const *vallist, size_t valsize, + int case_sensitive, argmatch_exit_fn exit_fn); /* Programmer friendly interface to __xargmatch_internal. */ -# define XARGMATCH(Context, Arg, Arglist, Vallist) \ - (Vallist [__xargmatch_internal ((Context), (Arg), (Arglist), \ - (const char *) (Vallist), \ - sizeof (*(Vallist)), \ - 1, argmatch_die)]) +# define XARGMATCH(Context, Arg, Arglist, Vallist) \ + ((Vallist) [__xargmatch_internal (Context, Arg, Arglist, \ + (char const *) (Vallist), \ + sizeof *(Vallist), \ + 1, argmatch_die)]) # define XARGCASEMATCH(Context, Arg, Arglist, Vallist) \ - (Vallist [__xargmatch_internal ((Context), (Arg), (Arglist), \ - (const char *) (Vallist), \ - sizeof (*(Vallist)), \ - 0, argmatch_die)]) + ((Vallist) [__xargmatch_internal (Context, Arg, Arglist, \ + (char const *) (Vallist), \ + sizeof *(Vallist), \ + 0, argmatch_die)]) /* Convert a value into a corresponding argument. */ -const char *argmatch_to_argument - PARAMS ((char const *value, const char *const *arglist, - const char *vallist, size_t valsize)); +char const *argmatch_to_argument (char const *value, + char const *const *arglist, + char const *vallist, size_t valsize); # define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist) \ - argmatch_to_argument ((Value), (Arglist), \ - (const char *) (Vallist), sizeof (*(Vallist))) + argmatch_to_argument (Value, Arglist, \ + (char const *) (Vallist), sizeof *(Vallist)) #endif /* ARGMATCH_H_ */