Просмотр исходного кода

Revert revision 22027 which totally broke getopt.

Bernd Schmidt 17 лет назад
Родитель
Сommit
e66aed2bde
2 измененных файлов с 20 добавлено и 18 удалено
  1. 4 2
      libc/unistd/getopt.c
  2. 16 16
      libc/unistd/getopt_int.h

+ 4 - 2
libc/unistd/getopt.c

@@ -162,6 +162,10 @@ int opterr = 1;
 
 
 int optopt = '?';
 int optopt = '?';
 
 
+/* Keep a global copy of all internal members of getopt_data.  */
+
+static struct _getopt_data getopt_data;
+
 
 
 #ifndef __GNU_LIBRARY__
 #ifndef __GNU_LIBRARY__
 
 
@@ -1154,9 +1158,7 @@ _getopt_internal (int argc, char *const *argv, const char *optstring,
 		  const struct option *longopts, int *longind, int long_only)
 		  const struct option *longopts, int *longind, int long_only)
 {
 {
   int result;
   int result;
-  struct _getopt_data getopt_data;
 
 
-  memset(&getopt_data, 0, sizeof(getopt_data));
   getopt_data.optind = optind;
   getopt_data.optind = optind;
   getopt_data.opterr = opterr;
   getopt_data.opterr = opterr;
 
 

+ 16 - 16
libc/unistd/getopt_int.h

@@ -30,29 +30,29 @@ extern int _getopt_internal (int ___argc, char *const *___argv,
 /* Reentrant versions which can handle parsing multiple argument
 /* Reentrant versions which can handle parsing multiple argument
    vectors at the same time.  */
    vectors at the same time.  */
 
 
-enum
-  {
-    REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
-  };
-
 /* Data type for reentrant functions.  */
 /* Data type for reentrant functions.  */
 struct _getopt_data
 struct _getopt_data
 {
 {
   /* These have exactly the same meaning as the corresponding global
   /* These have exactly the same meaning as the corresponding global
      variables, except that they are used for the reentrant
      variables, except that they are used for the reentrant
      versions of getopt.  */
      versions of getopt.  */
-  char *optarg;
   int optind;
   int optind;
   int opterr;
   int opterr;
   int optopt;
   int optopt;
+  char *optarg;
 
 
   /* Internal members.  */
   /* Internal members.  */
 
 
   /* True if the internal members have been initialized.  */
   /* True if the internal members have been initialized.  */
-  smallint __initialized;
+  int __initialized;
 
 
-  /* If the POSIXLY_CORRECT environment variable is set.  */
-  smallint __posixly_correct;
+  /* The next char to be scanned in the option-element
+     in which the last option character we returned was found.
+     This allows us to pick up the scan where we left off.
+
+     If this is zero, or a null string, it means resume the scan
+     by advancing to the next ARGV-element.  */
+  char *__nextchar;
 
 
   /* Describe how to deal with options that follow non-option ARGV-elements.
   /* Describe how to deal with options that follow non-option ARGV-elements.
 
 
@@ -82,15 +82,15 @@ struct _getopt_data
      The special argument `--' forces an end of option-scanning regardless
      The special argument `--' forces an end of option-scanning regardless
      of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
      of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
      `--' can cause `getopt' to return -1 with `optind' != ARGC.  */
      `--' can cause `getopt' to return -1 with `optind' != ARGC.  */
-  smallint __ordering;
 
 
-  /* The next char to be scanned in the option-element
-     in which the last option character we returned was found.
-     This allows us to pick up the scan where we left off.
+  enum
+    {
+      REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+    } __ordering;
+
+  /* If the POSIXLY_CORRECT environment variable is set.  */
+  int __posixly_correct;
 
 
-     If this is zero, or a null string, it means resume the scan
-     by advancing to the next ARGV-element.  */
-  char *__nextchar;
 
 
   /* Handle permutation of arguments.  */
   /* Handle permutation of arguments.  */