From e66aed2bde24de88a59153857781b39042c77cac Mon Sep 17 00:00:00 2001 From: Bernd Schmidt Date: Thu, 5 Jun 2008 17:42:11 +0000 Subject: Revert revision 22027 which totally broke getopt. --- libc/unistd/getopt.c | 6 ++++-- libc/unistd/getopt_int.h | 32 ++++++++++++++++---------------- 2 files changed, 20 insertions(+), 18 deletions(-) (limited to 'libc/unistd') diff --git a/libc/unistd/getopt.c b/libc/unistd/getopt.c index c28afda0d..754e86f25 100644 --- a/libc/unistd/getopt.c +++ b/libc/unistd/getopt.c @@ -162,6 +162,10 @@ 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__ @@ -1154,9 +1158,7 @@ _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 e26c7caba..e2a005db9 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. */ - 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. @@ -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; - /* 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. */ -- cgit v1.2.3