add crc8
[oweals/gnunet.git] / src / util / getopt.c
index 169949821ed2a432299c1fea66552a0e98b66c5e..e150496ae22989f29a909ca5f33c9fc74fa0a29e 100644 (file)
@@ -3,7 +3,7 @@
    "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
    before changing it!
 
    "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
    before changing it!
 
-   Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
+   Copyright Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
      Free Software Foundation, Inc.
 
 NOTE: The canonical source of this file is maintained with the GNU C Library.
      Free Software Foundation, Inc.
 
 NOTE: The canonical source of this file is maintained with the GNU C Library.
@@ -11,7 +11,7 @@ Bugs can be reported to bug-glibc@prep.ai.mit.edu.
 
 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
 
 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
+Free Software Foundation; either version 3, or (at your option) any
 later version.
 
 This program is distributed in the hope that it will be useful,
 later version.
 
 This program is distributed in the hope that it will be useful,
@@ -21,12 +21,12 @@ 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
 
 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,
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
 USA.
 
 
 This code was heavily modified for GNUnet.
 USA.
 
 
 This code was heavily modified for GNUnet.
-Copyright (C) 2006 Christian Grothoff
+Copyright Copyright (C) 2006 Christian Grothoff
 */
 
 /**
 */
 
 /**
@@ -37,10 +37,8 @@ Copyright (C) 2006 Christian Grothoff
  * replace main GNU getopt parser with one that
  * actually fits our API.
  */
  * replace main GNU getopt parser with one that
  * actually fits our API.
  */
-
 #include "platform.h"
 #include "platform.h"
-#include "gnunet_common.h"
-#include "gnunet_getopt_lib.h"
+#include "gnunet_util_lib.h"
 
 #ifdef VMS
 #include <unixlib.h>
 
 #ifdef VMS
 #include <unixlib.h>
@@ -202,9 +200,8 @@ char *
 getenv ();
 
 static char *
 getenv ();
 
 static char *
-my_index (str, chr)
-  const char *str;
-  int chr;
+my_index (const char *str,
+         int chr)
 {
   while (*str)
   {
 {
   while (*str)
   {
@@ -239,45 +236,7 @@ strlen (const char *);
 static int first_nonopt;
 static int last_nonopt;
 
 static int first_nonopt;
 static int last_nonopt;
 
-#ifdef _LIBC
-/* Bash 2.0 gives us an environment variable containing flags
-   indicating ARGV elements that should not be considered arguments.  */
-
-/* Defined in getopt_init.c  */
-extern char *__getopt_nonoption_flags;
-
-static int nonoption_flags_max_len;
-static int nonoption_flags_len;
-
-static int original_argc;
-static char *const *original_argv;
-
-extern pid_t __libc_pid;
-
-/* Make sure the environment variable bash 2.0 puts in the environment
-   is valid for the getopt call we must make sure that the ARGV passed
-   to getopt is that one passed to the process.  */
-static void GNUNET_UNUSED
-store_args_and_env (int argc, char *const *argv)
-{
-  /* XXX This is no good solution.  We should rather copy the args so
-   * that we can compare them later.  But we must not use malloc(3).  */
-  original_argc = argc;
-  original_argv = argv;
-}
-
-text_set_element (__libc_subinit, store_args_and_env);
-
-#define SWAP_FLAGS(ch1, ch2) \
-  if (nonoption_flags_len > 0)                                               \
-    {                                                                        \
-      char __tmp = __getopt_nonoption_flags[ch1];                    \
-      __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];        \
-      __getopt_nonoption_flags[ch2] = __tmp;                         \
-    }
-#else /* !_LIBC */
 #define SWAP_FLAGS(ch1, ch2)
 #define SWAP_FLAGS(ch1, ch2)
-#endif /* _LIBC */
 
 /* Exchange two adjacent subsequences of ARGV.
    One subsequence is elements [first_nonopt,last_nonopt)
 
 /* Exchange two adjacent subsequences of ARGV.
    One subsequence is elements [first_nonopt,last_nonopt)
@@ -294,8 +253,7 @@ exchange (char **);
 #endif
 
 static void
 #endif
 
 static void
-exchange (argv)
-  char **argv;
+exchange (char **argv)
 {
   int bottom = first_nonopt;
   int middle = last_nonopt;
 {
   int bottom = first_nonopt;
   int middle = last_nonopt;
@@ -307,29 +265,6 @@ exchange (argv)
    * It leaves the longer segment in the right place overall,
    * but it consists of two parts that need to be swapped next.  */
 
    * It leaves the longer segment in the right place overall,
    * but it consists of two parts that need to be swapped next.  */
 
-#ifdef _LIBC
-  /* First make sure the handling of the `__getopt_nonoption_flags'
-   * string can work normally.  Our top argument must be in the range
-   * of the string.  */
-  if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len)
-  {
-    /* We must extend the array.  The user plays games with us and
-     * presents new arguments.  */
-    char *new_str = malloc (top + 1);
-
-    if (new_str == NULL)
-      nonoption_flags_len = nonoption_flags_max_len = 0;
-    else
-    {
-      memcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len);
-      memset (&new_str[nonoption_flags_max_len], '\0',
-              top + 1 - nonoption_flags_max_len);
-      nonoption_flags_max_len = top + 1;
-      __getopt_nonoption_flags = new_str;
-    }
-  }
-#endif
-
   while (top > middle && middle > bottom)
   {
     if (top - middle > middle - bottom)
   while (top > middle && middle > bottom)
   {
     if (top - middle > middle - bottom)
@@ -381,10 +316,9 @@ static const char *
 _getopt_initialize (int, char *const *, const char *);
 #endif
 static const char *
 _getopt_initialize (int, char *const *, const char *);
 #endif
 static const char *
-_getopt_initialize (argc, argv, optstring)
-  int argc;
-  char *const *argv;
-  const char *optstring;
+_getopt_initialize (int argc,
+                   char *const *argv,
+                   const char *optstring)
 {
   /* Start processing options with ARGV-element 1 (since ARGV-element 0
    * is the program name); the sequence of previously skipped
 {
   /* Start processing options with ARGV-element 1 (since ARGV-element 0
    * is the program name); the sequence of previously skipped
@@ -413,41 +347,9 @@ _getopt_initialize (argc, argv, optstring)
   else
     ordering = PERMUTE;
 
   else
     ordering = PERMUTE;
 
-#ifdef _LIBC
-  if (posixly_correct == NULL && argc == original_argc && argv == original_argv)
-  {
-    if (nonoption_flags_max_len == 0)
-    {
-      if (__getopt_nonoption_flags == NULL ||
-          __getopt_nonoption_flags[0] == '\0')
-        nonoption_flags_max_len = -1;
-      else
-      {
-        const char *orig_str = __getopt_nonoption_flags;
-        int len = nonoption_flags_max_len = strlen (orig_str);
-
-        if (nonoption_flags_max_len < argc)
-          nonoption_flags_max_len = argc;
-        __getopt_nonoption_flags = (char *) malloc (nonoption_flags_max_len);
-        if (__getopt_nonoption_flags == NULL)
-          nonoption_flags_max_len = -1;
-        else
-        {
-          memcpy (__getopt_nonoption_flags, orig_str, len);
-          memset (&__getopt_nonoption_flags[len], '\0',
-                  nonoption_flags_max_len - len);
-        }
-      }
-    }
-    nonoption_flags_len = nonoption_flags_max_len;
-  }
-  else
-    nonoption_flags_len = 0;
-#endif
-
   return optstring;
 }
   return optstring;
 }
-\f
+
 /* Scan elements of ARGV (whose length is ARGC) for option characters
    given in OPTSTRING.
 
 /* Scan elements of ARGV (whose length is ARGC) for option characters
    given in OPTSTRING.
 
@@ -526,13 +428,7 @@ GN_getopt_internal (int argc, char *const *argv, const char *optstring,
    * Either it does not have option syntax, or there is an environment flag
    * from the shell indicating it is not an option.  The later information
    * is only used when the used in the GNU libc.  */
    * Either it does not have option syntax, or there is an environment flag
    * from the shell indicating it is not an option.  The later information
    * is only used when the used in the GNU libc.  */
-#ifdef _LIBC
-#define NONOPTION_P (argv[GNoptind][0] != '-' || argv[GNoptind][1] == '\0'        \
-            || (GNoptind < nonoption_flags_len                       \
-                && __getopt_nonoption_flags[GNoptind] == '1'))
-#else
 #define NONOPTION_P (argv[GNoptind][0] != '-' || argv[GNoptind][1] == '\0')
 #define NONOPTION_P (argv[GNoptind][0] != '-' || argv[GNoptind][1] == '\0')
-#endif
 
   if (nextchar == NULL || *nextchar == '\0')
   {
 
   if (nextchar == NULL || *nextchar == '\0')
   {
@@ -869,8 +765,7 @@ GN_getopt_internal (int argc, char *const *argv, const char *optstring,
           else
           {
             if (GNopterr)
           else
           {
             if (GNopterr)
-              FPRINTF (stderr, _("\
-%s: option `-W %s' does not allow an argument\n"), argv[0], pfound->name);
+              FPRINTF (stderr, _("%s: option `-W %s' does not allow an argument\n"), argv[0], pfound->name);
 
             nextchar += strlen (nextchar);
             return '?';
 
             nextchar += strlen (nextchar);
             return '?';
@@ -1042,8 +937,10 @@ GNUNET_GETOPT_run (const char *binaryOptions,
 
   GNUNET_free (shorts);
   GNUNET_free (long_options);
 
   GNUNET_free (shorts);
   GNUNET_free (long_options);
-  if (cont == GNUNET_SYSERR)
-    return GNUNET_SYSERR;
+  if (cont != GNUNET_OK)
+  {
+    return cont;
+  }
   return GNoptind;
 }
 
   return GNoptind;
 }