X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fargmatch.c;h=925449bfd4f3bb4c79216ca85326ecd27bcd0faf;hb=9a261f6811c5c700c952d8e08022e31c75305342;hp=345256af602b8e9011c616dd85dec0d4482b30fd;hpb=14ab035d4ed2f1bdcf4c2b90c45c7398870f84bc;p=gnulib.git diff --git a/lib/argmatch.c b/lib/argmatch.c index 345256af6..925449bfd 100644 --- a/lib/argmatch.c +++ b/lib/argmatch.c @@ -1,12 +1,12 @@ /* argmatch.c -- find a match for a string in an array - Copyright (C) 1990, 1998, 1999, 2001, 2002, 2003 Free Software - Foundation, Inc. + Copyright (C) 1990, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007 + Free Software Foundation, Inc. - This program is free software; you can redistribute it and/or modify + 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 - the Free Software Foundation; either version 2, or (at your option) - any later version. + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -14,19 +14,17 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + along with this program. If not, see . */ /* Written by David MacKenzie Modified by Akim Demaille */ -#if HAVE_CONFIG_H -# include -#endif +#include /* Specification. */ #include "argmatch.h" +#include #include #include #include @@ -37,7 +35,10 @@ #include "error.h" #include "quotearg.h" #include "quote.h" -#include "unlocked-io.h" + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif /* When reporting an invalid argument, show nonprinting characters by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use @@ -46,13 +47,10 @@ # define ARGMATCH_QUOTING_STYLE locale_quoting_style #endif -#ifndef 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) +# include "exitfail.h" +# define ARGMATCH_DIE exit (exit_failure) #endif #ifdef ARGMATCH_DIE_DECL @@ -71,7 +69,7 @@ argmatch_exit_fn argmatch_die = __argmatch_die; /* If ARG is an unambiguous match for an element of the - null-terminated array ARGLIST, return the index in ARGLIST + NULL-terminated array ARGLIST, return the index in ARGLIST of the matched element, else -1 if it does not match any element or -2 if it is ambiguous (is a prefix of more than one element). @@ -81,14 +79,14 @@ argmatch_exit_fn argmatch_die = __argmatch_die; "no", "nope" -> 1 "y" is a valid argument, for `0', and "n" for `1'. */ -int +ptrdiff_t argmatch (const char *arg, const char *const *arglist, const char *vallist, size_t valsize) { - int i; /* Temporary index in ARGLIST. */ + size_t i; /* Temporary index in ARGLIST. */ size_t arglen; /* Length of ARG. */ - int matchind = -1; /* Index of first nonexact match. */ - int ambiguous = 0; /* If nonzero, multiple nonexact match(es). */ + ptrdiff_t matchind = -1; /* Index of first nonexact match. */ + bool ambiguous = false; /* If true, multiple nonexact match(es). */ arglen = strlen (arg); @@ -112,7 +110,7 @@ argmatch (const char *arg, const char *const *arglist, { /* There is a real ambiguity, or we could not disambiguate. */ - ambiguous = 1; + ambiguous = true; } } } @@ -129,7 +127,7 @@ argmatch (const char *arg, const char *const *arglist, PROBLEM is the return value from argmatch. */ void -argmatch_invalid (const char *context, const char *value, int problem) +argmatch_invalid (const char *context, const char *value, ptrdiff_t problem) { char const *format = (problem == -1 ? _("invalid argument %s for %s") @@ -147,7 +145,7 @@ void argmatch_valid (const char *const *arglist, const char *vallist, size_t valsize) { - int i; + size_t i; const char *last_val = NULL; /* We try to put synonyms on the same line. The assumption is that @@ -173,13 +171,13 @@ argmatch_valid (const char *const *arglist, "--version-control", or "$VERSION_CONTROL" etc.). Upon failure, calls the (supposed never to return) function EXIT_FN. */ -int +ptrdiff_t __xargmatch_internal (const char *context, const char *arg, const char *const *arglist, const char *vallist, size_t valsize, argmatch_exit_fn exit_fn) { - int res = argmatch (arg, arglist, vallist, valsize); + ptrdiff_t res = argmatch (arg, arglist, vallist, valsize); if (res >= 0) /* Success. */ return res; @@ -199,7 +197,7 @@ argmatch_to_argument (const char *value, const char *const *arglist, const char *vallist, size_t valsize) { - int i; + size_t i; for (i = 0; arglist[i]; i++) if (!memcmp (value, vallist + valsize * i, valsize)) @@ -217,17 +215,17 @@ char *program_name; enum backup_type { /* Never make backups. */ - none, + no_backups, /* Make simple backups of every file. */ - simple, + simple_backups, /* Make numbered backups of files that already have numbered backups, and simple backups of the others. */ - numbered_existing, + numbered_existing_backups, /* Make numbered backups of every file. */ - numbered + numbered_backups }; /* Two tables describing arguments (keys) and their corresponding @@ -243,17 +241,17 @@ static const char *const backup_args[] = static const enum backup_type backup_vals[] = { - none, none, none, - simple, simple, - numbered_existing, numbered_existing, - numbered, numbered + no_backups, no_backups, no_backups, + simple_backups, simple_backups, + numbered_existing_backups, numbered_existing_backups, + numbered_backups, numbered_backups }; int main (int argc, const char *const *argv) { const char *cp; - enum backup_type backup_type = none; + enum backup_type backup_type = no_backups; program_name = (char *) argv[0];