]> git.saurik.com Git - bison.git/commitdiff
Sync with gnulib.
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 21 Nov 2002 07:35:58 +0000 (07:35 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 21 Nov 2002 07:35:58 +0000 (07:35 +0000)
lib/argmatch.c
lib/argmatch.h

index 3fc4bff271b705583cd3ed6b12b855b0caebe789..35787842ead386347f08102ad54373a96157f0f4 100644 (file)
@@ -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
 /* Written by David MacKenzie <djm@ai.mit.edu>
    Modified by Akim Demaille <demaille@inf.enst.fr> */
 
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
 #include "argmatch.h"
 
 #include <stdio.h>
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <string.h>
-#endif
-
-#if HAVE_LOCALE_H
-# include <locale.h>
-#endif
+#include <stdlib.h>
+#include <string.h>
 
-#if ENABLE_NLS
-# include <libintl.h>
-# 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
 # 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)
index eb91f51aab106da32d76bf180bf161775488603d..5595ee4361ef1d86c0af47e0e344606d65cd77d9 100644 (file)
 #ifndef ARGMATCH_H_
 # define ARGMATCH_H_ 1
 
-# if HAVE_CONFIG_H
-#  include <config.h>
-# endif
+# include <stddef.h>
 
-# include <sys/types.h>
+# 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))
 
    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_ */