]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
Update 'argmatch' module from gnulib.
authorBruno Haible <bruno@clisp.org>
Wed, 12 Jan 2005 12:51:34 +0000 (12:51 +0000)
committerBruno Haible <bruno@clisp.org>
Tue, 23 Jun 2009 10:12:01 +0000 (12:12 +0200)
gettext-tools/lib/ChangeLog
gettext-tools/lib/argmatch.c
gettext-tools/lib/argmatch.h

index cbc0a6fe1c908461dd5a75bca74064716b3ee07c..c0cef7f7828149c892fac18a8031cf6fd5e5f745 100644 (file)
@@ -1,3 +1,8 @@
+2005-01-06  Bruno Haible  <bruno@clisp.org>
+
+       * argmatch.h: Update from gnulib, with DLL_VARIABLE modifications.
+       * argmatch.c: Update from gnulib.
+
 2005-01-06  Bruno Haible  <bruno@clisp.org>
 
        * quote.h: New file, from gnulib.
index 7951f3ed6854e9eb4ed37349f88f71981256cf7b..e7c2575c0e0a642079dccd69aa0ee2231485c46e 100644 (file)
@@ -1,5 +1,7 @@
 /* argmatch.c -- find a match for a string in an array
-   Copyright (C) 1990, 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
+
+   Copyright (C) 1990, 1998, 1999, 2001, 2002, 2003, 2004 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
@@ -25,6 +27,7 @@
 /* Specification.  */
 #include "argmatch.h"
 
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 #include "error.h"
 #include "exit.h"
+#include "quotearg.h"
+#include "quote.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
+   literal_quoting_style.  */
+#ifndef ARGMATCH_QUOTING_STYLE
+# define ARGMATCH_QUOTING_STYLE locale_quoting_style
+#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
@@ -66,14 +83,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);
 
@@ -97,7 +114,7 @@ argmatch (const char *arg, const char *const *arglist,
                {
                  /* There is a real ambiguity, or we could not
                     disambiguate. */
-                 ambiguous = 1;
+                 ambiguous = true;
                }
            }
        }
@@ -114,13 +131,14 @@ 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'")
-                       : _("ambiguous argument `%s' for `%s'"));
+                       ? _("invalid argument %s for %s")
+                       : _("ambiguous argument %s for %s"));
 
-  error (0, 0, format, value, context);
+  error (0, 0, format, quotearg_n_style (0, ARGMATCH_QUOTING_STYLE, value),
+        quote_n (1, context));
 }
 
 /* List the valid arguments for argmatch.
@@ -131,7 +149,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
@@ -157,13 +175,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;
@@ -183,7 +201,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))
@@ -196,23 +214,22 @@ argmatch_to_argument (const char *value,
  * Based on "getversion.c" by David MacKenzie <djm@gnu.ai.mit.edu>
  */
 char *program_name;
-extern const char *getenv ();
 
 /* When to make backup files.  */
 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
@@ -228,17 +245,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];
 
index 85cbc8cbb09f7513c86b8987074fa1951f6e7d3a..8f8cd5af7c23aed6d8c7d88d4ba9c14cb3de9605 100644 (file)
@@ -1,5 +1,7 @@
 /* argmatch.h -- definitions and prototypes for argmatch.c
-   Copyright (C) 1990, 1998, 1999, 2001-2003 Free Software Foundation, Inc.
+
+   Copyright (C) 1990, 1998, 1999, 2001, 2002, 2004 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
    false ambiguities (i.e., different matches of ARG but corresponding
    to the same values in VALLIST).  */
 
-int argmatch (char const *arg, char const *const *arglist,
-             char const *vallist, size_t valsize);
+ptrdiff_t argmatch (char const *arg, char const *const *arglist,
+                   char const *vallist, size_t valsize);
 
 # define ARGMATCH(Arg, Arglist, Vallist) \
   argmatch (Arg, Arglist, (char const *) (Vallist), sizeof *(Vallist))
 
 /* xargmatch calls this function when it fails.  This function should not
    return.  By default, this is a function that calls ARGMATCH_DIE which
-   in turn defaults to `exit (EXIT_FAILURE)'.  */
+   in turn defaults to `exit (exit_failure)'.  */
 typedef void (*argmatch_exit_fn) (void);
 extern DLL_VARIABLE argmatch_exit_fn argmatch_die;
 
 /* Report on stderr why argmatch failed.  Report correct values. */
 
-void argmatch_invalid (char const *context, char const *value, int problem);
+void argmatch_invalid (char const *context, char const *value,
+                      ptrdiff_t problem);
 
 /* Left for compatibility with the old name invalid_arg */
 
@@ -83,10 +86,10 @@ void argmatch_valid (char const *const *arglist,
 /* Same as argmatch, but upon failure, reports a explanation on the
    failure, and exits using the function EXIT_FN. */
 
-int __xargmatch_internal (char const *context,
-                         char const *arg, char const *const *arglist,
-                         char const *vallist, size_t valsize,
-                         argmatch_exit_fn exit_fn);
+ptrdiff_t __xargmatch_internal (char const *context,
+                               char const *arg, char const *const *arglist,
+                               char const *vallist, size_t valsize,
+                               argmatch_exit_fn exit_fn);
 
 /* Programmer friendly interface to __xargmatch_internal. */