X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fargmatch.h;h=9772dcc1dc1dc9bcdcaa9b9e562564b9f0766bae;hb=2c6d91f6bcfffcaa7320af7ea4e2a9c970c0966e;hp=5abce4ca9c31fce3bdea0596bca2b820868c76e3;hpb=bcd35974a9b1a46c9f0dd26d695f626379b7545e;p=gnulib.git diff --git a/lib/argmatch.h b/lib/argmatch.h index 5abce4ca9..9772dcc1d 100644 --- a/lib/argmatch.h +++ b/lib/argmatch.h @@ -1,5 +1,5 @@ -/* argmatch.c -- find a match for a string in an array - Copyright (C) 1990, 1998 Free Software Foundation, Inc. +/* argmatch.h -- definitions and prototypes for argmatch.c + Copyright (C) 1990, 1998, 1999 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,8 +18,8 @@ /* Written by David MacKenzie Modified by Akim Demaille */ -#ifndef _ARGMATCH_H_ -# define _ARGMATCH_H_ 1 +#ifndef ARGMATCH_H_ +# define ARGMATCH_H_ 1 # if HAVE_CONFIG_H # include @@ -40,70 +40,72 @@ 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 + 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)); -# define ARGMATCH(ARG,ARGLIST,VALLIST) \ - argmatch (ARG, ARGLIST, (const char *) VALLIST, sizeof (*VALLIST)) +# define ARGMATCH(Arg, Arglist, Vallist) \ + argmatch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist))) -# define ARGCASEMATCH(ARG,ARGLIST,VALLIST) \ - argcasematch (ARG, ARGLIST, (const char *) VALLIST, sizeof (*VALLIST)) +# define ARGCASEMATCH(Arg, Arglist, Vallist) \ + argcasematch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist))) /* Report on stderr why argmatch failed. Report correct values. */ -void argmatch_invalid - PARAMS ((const char *kind, const char *value, int problem)); +void argmatch_invalid + PARAMS ((const char *kind, const char *value, int problem)); /* Left for compatibility with the old name invalid_arg */ -# define invalid_arg(KIND,VALUE,PROBLEM) \ - argmatch_invalid (KIND, VALUE, PROBLEM) +# define invalid_arg(Kind, Value, Problem) \ + argmatch_invalid ((Kind), (Value), (Problem)) /* Report on stderr the list of possible arguments. */ void argmatch_valid - PARAMS ((const char *const *arglist, - const char *vallist, size_t valsize)); - -# define ARGMATCH_VALID(ARGLIST,VALLIST) \ - valid_args (ARGLIST, (const char *) VALLIST, sizeof (*VALLIST)) - - -/* Returns matches, or, upon error, report explanatory message and - exit. */ - -int __xargmatch_internal - PARAMS ((const char *kind, - const char *arg, const char *const *arglist, - const char *vallist, size_t valsize, - int sensitive)); - -# define XARGMATCH(KIND,ARG,ARGLIST,VALLIST) \ - VALLIST [__xargmatch_internal (KIND, ARG, ARGLIST, \ - (const char *) VALLIST, sizeof (*VALLIST), 1)] - -# define XARGCASEMATCH(KIND,ARG,ARGLIST,VALLIST) \ - VALLIST [__xargmatch_internal (KIND, ARG, ARGLIST, \ - (const char *) VALLIST, sizeof (*VALLIST), 0)] - + PARAMS ((const char *const *arglist, + const char *vallist, size_t valsize)); + +# define ARGMATCH_VALID(Arglist, Vallist) \ + argmatch_valid (Arglist, (const char *) Vallist, sizeof (*Vallist)) + + +/* Set *Result_ptr to the value in Vallist corresponding to the Arg + in Arglist. If Arg doesn't match any string in Arglist, give a + diagnostic and (presumably) exit via the Die_stmt, leaving *Result_ptr + unmodified. */ + +# define XARGMATCH(Result_ptr, Kind, Arg, Arglist, Vallist, Die_stmt) \ + do \ + { \ + int _i = ARGMATCH (Arg, Arglist, Vallist); \ + if (_i >= 0) \ + *(Result_ptr) = (Vallist) [_i]; \ + else \ + { \ + argmatch_invalid ((Kind), (Arg), _i); \ + ARGMATCH_VALID (Arglist, Vallist); \ + Die_stmt; \ + } \ + } \ + while (0) /* Convert a value into a corresponding argument. */ -const char * argmatch_to_argument - PARAMS ((char * value, const char *const *arglist, - const char *vallist, size_t valsize)); +const char *argmatch_to_argument + PARAMS ((char const *value, const char *const *arglist, + const char *vallist, size_t valsize)); -# define ARGMATCH_TO_ARGUMENT(VALUE,ARGLIST,VALLIST) \ - argmatch_to_argument ((char *) &VALUE, ARGLIST, \ - (const char *) VALLIST, sizeof (*VALLIST)) +# define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist) \ + argmatch_to_argument ((char const *) &(Value), (Arglist), \ + (const char *) (Vallist), sizeof (*(Vallist))) -#endif /* _ARGMATCH_H_ */ +#endif /* ARGMATCH_H_ */