X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fargmatch.c;h=35787842ead386347f08102ad54373a96157f0f4;hb=93f20861d0ef8383725ceb95772aee532c2c26ff;hp=fc85fbfa608105012ee9667e39a962fe2c5cc80f;hpb=1b622d65d8ac1de12a7a2dd3990f2b7f8e85ed00;p=gnulib.git diff --git a/lib/argmatch.c b/lib/argmatch.c index fc85fbfa6..35787842e 100644 --- a/lib/argmatch.c +++ b/lib/argmatch.c @@ -1,5 +1,5 @@ /* argmatch.c -- find a match for a string in an array - Copyright (C) 1990, 1998, 1999 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 @@ -18,42 +18,29 @@ /* Written by David MacKenzie Modified by Akim Demaille */ +#if HAVE_CONFIG_H +# include +#endif + #include "argmatch.h" #include -#ifdef STDC_HEADERS -# include -#endif +#include +#include -#if HAVE_LOCALE_H -# include -#endif - -#if ENABLE_NLS -# include -# 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 a failing argument, make sure to show invisible - characters hidden using the quoting style - ARGMATCH_QUOTING_STYLE. literal_quoting_style is not good. */ - +/* When reporting an invalid argument, show nonprinting characters + by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use + literal_quoting_style. */ #ifndef ARGMATCH_QUOTING_STYLE -# define ARGMATCH_QUOTING_STYLE escape_quoting_style -#endif - -extern char *program_name; - -/* 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 +# define ARGMATCH_QUOTING_STYLE locale_quoting_style #endif /* Non failing version of argmatch call this function after failing. */ @@ -71,7 +58,10 @@ __argmatch_die (void) ARGMATCH_DIE; } +/* Used by XARGMATCH and XARGCASEMATCH. See description in argmatch.h. + Default to __argmatch_die, but allow caller to change this at run-time. */ 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 @@ -154,21 +144,12 @@ argcasematch (const char *arg, const char *const *arglist, void argmatch_invalid (const char *context, const char *value, int problem) { - enum quoting_style saved_quoting_style; - char const *format; - - /* Make sure to have a good quoting style to report errors. - literal is insane here. */ - saved_quoting_style = get_quoting_style (NULL); - set_quoting_style (NULL, ARGMATCH_QUOTING_STYLE); - - format = (problem == -1 - ? _("%s: invalid argument `%s' for `%s'\n") - : _("%s: ambiguous argument `%s' for `%s'\n")); - - fprintf (stderr, format, program_name, quotearg (value), context); + char const *format = (problem == -1 + ? _("invalid argument %s for %s") + : _("ambiguous argument %s for %s")); - set_quoting_style (NULL, saved_quoting_style); + error (0, 0, format, quotearg_n_style (0, ARGMATCH_QUOTING_STYLE, value), + quote_n (1, context)); } /* List the valid arguments for argmatch.