diff options
Diffstat (limited to 'libc')
-rw-r--r-- | libc/unistd/getopt.c | 6 | ||||
-rw-r--r-- | libc/unistd/getopt_int.h | 32 |
2 files changed, 18 insertions, 20 deletions
diff --git a/libc/unistd/getopt.c b/libc/unistd/getopt.c index 754e86f25..c28afda0d 100644 --- a/libc/unistd/getopt.c +++ b/libc/unistd/getopt.c @@ -162,10 +162,6 @@ int opterr = 1; int optopt = '?'; -/* Keep a global copy of all internal members of getopt_data. */ - -static struct _getopt_data getopt_data; - #ifndef __GNU_LIBRARY__ @@ -1158,7 +1154,9 @@ _getopt_internal (int argc, char *const *argv, const char *optstring, const struct option *longopts, int *longind, int long_only) { int result; + struct _getopt_data getopt_data; + memset(&getopt_data, 0, sizeof(getopt_data)); getopt_data.optind = optind; getopt_data.opterr = opterr; diff --git a/libc/unistd/getopt_int.h b/libc/unistd/getopt_int.h index e2a005db9..e26c7caba 100644 --- a/libc/unistd/getopt_int.h +++ b/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 vectors at the same time. */ +enum + { + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER + }; + /* Data type for reentrant functions. */ struct _getopt_data { /* These have exactly the same meaning as the corresponding global variables, except that they are used for the reentrant versions of getopt. */ + char *optarg; int optind; int opterr; int optopt; - char *optarg; /* Internal members. */ /* True if the internal members have been initialized. */ - int __initialized; - - /* 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. + smallint __initialized; - If this is zero, or a null string, it means resume the scan - by advancing to the next ARGV-element. */ - char *__nextchar; + /* If the POSIXLY_CORRECT environment variable is set. */ + smallint __posixly_correct; /* 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 of the value of `ordering'. In the case of RETURN_IN_ORDER, only `--' can cause `getopt' to return -1 with `optind' != ARGC. */ + smallint __ordering; - enum - { - REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER - } __ordering; - - /* If the POSIXLY_CORRECT environment variable is set. */ - int __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; /* Handle permutation of arguments. */ |