X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fargmatch.h;h=9772dcc1dc1dc9bcdcaa9b9e562564b9f0766bae;hb=2c6d91f6bcfffcaa7320af7ea4e2a9c970c0966e;hp=941375204c610abde2294ab864af901d6124dda1;hpb=2e9cd2d4baa2bbad6bbe69719fcae9f3eca0ff0f;p=gnulib.git diff --git a/lib/argmatch.h b/lib/argmatch.h index 941375204..9772dcc1d 100644 --- a/lib/argmatch.h +++ b/lib/argmatch.h @@ -1,5 +1,5 @@ /* argmatch.h -- definitions and prototypes for argmatch.c - Copyright (C) 1990, 1998 Free Software Foundation, Inc. + 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 @@ -47,11 +47,11 @@ 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)) + argcasematch ((Arg), (Arglist), (const char *) (Vallist), sizeof (*(Vallist))) @@ -63,7 +63,7 @@ void argmatch_invalid /* Left for compatibility with the old name invalid_arg */ # define invalid_arg(Kind, Value, Problem) \ - argmatch_invalid (Kind, Value, Problem) + argmatch_invalid ((Kind), (Value), (Problem)) @@ -74,36 +74,38 @@ void argmatch_valid 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)] - + 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, + 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_ */