Mercurial > hg > octave-lojdl > gnulib-hg
changeset 1612:c538e58c8007
(XARGMATCH): Don't return a value; instead, modify a parameter.
Add a `Die_stmt' parameter.
Add parentheses.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Sat, 02 Jan 1999 18:33:08 +0000 |
parents | 124c0cb70d04 |
children | 4eaeb7c6d6d0 |
files | lib/argmatch.h |
diffstat | 1 files changed, 27 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ -48,10 +48,10 @@ const char *vallist, size_t valsize)); # define ARGMATCH(Arg, Arglist, Vallist) \ - argmatch (Arg, Arglist, (const char *) Vallist, sizeof (*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 @@ /* 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 @@ const char *vallist, size_t valsize)); # define ARGMATCH_VALID(Arglist, Vallist) \ - valid_args (Arglist, (const char *) Vallist, sizeof (*Vallist)) + argmatch_valid (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)); +/* 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(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)] - +# 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_ */