--- ../Libc/stdlib/FreeBSD/getopt.c 2004-11-25 11:38:41.000000000 -0800
+++ getopt.c 2005-01-26 19:27:09.000000000 -0800
@@ -48,16 +48,24 @@
#include "libc_private.h"
+#ifndef BUILDING_VARIANT
int opterr = 1, /* if error message should be printed */
optind = 1, /* index into parent argv vector */
optopt, /* character checked for validity */
optreset; /* reset getopt */
char *optarg; /* argument associated with option */
+#endif /* !BUILDING_VARIANT */
#define BADCH (int)'?'
#define BADARG (int)':'
#define EMSG ""
+#if __DARWIN_UNIX03
+#define PROGNAME nargv[0]
+#else
+#define PROGNAME _getprogname()
+#endif
+
/*
* getopt --
* Parse argc/argv argument vector.
@@ -103,8 +111,8 @@
++optind;
if (opterr && *ostr != ':')
(void)fprintf(stderr,
- "%s: illegal option -- %c\n", _getprogname(),
- optopt);
+ "%s: illegal option -- %c\n",
+ PROGNAME, optopt);
return (BADCH);
}
@@ -123,13 +131,19 @@
optarg = nargv[optind];
else {
/* option-argument absent */
+#if __DARWIN_UNIX03
+ /* Yes, the standard will put optind past the last
+ argument */
+ ++optind;
+ optarg = NULL;
+#endif /* __DARWIN_UNIX03 */
place = EMSG;
if (*ostr == ':')
return (BADARG);
if (opterr)
(void)fprintf(stderr,
"%s: option requires an argument -- %c\n",
- _getprogname(), optopt);
+ PROGNAME, optopt);
return (BADCH);
}
place = EMSG;