9 int optind=1, opterr=1, optopt, __optpos, __optreset=0;
11 #define optpos __optpos
12 weak_alias(__optreset, optreset);
14 int getopt(int argc, char * const argv[], const char *optstring)
21 if (!optind || __optreset) {
27 if (optind >= argc || !argv[optind])
30 if (argv[optind][0] != '-') {
31 if (optstring[0] == '-') {
32 optarg = argv[optind++];
41 if (argv[optind][1] == '-' && !argv[optind][2])
44 if (!optpos) optpos++;
45 if ((k = mbtowc(&c, argv[optind]+optpos, MB_LEN_MAX)) < 0) {
47 c = 0xfffd; /* replacement char */
49 optchar = argv[optind]+optpos;
53 if (!argv[optind][optpos]) {
58 if (optstring[0] == '-')
64 l = mbtowc(&d, optstring+i, MB_LEN_MAX);
65 if (l>0) i+=l; else i++;
66 } while (l && d != c);
69 if (optstring[0] != ':' && opterr) {
70 write(2, argv[0], strlen(argv[0]));
71 write(2, ": illegal option: ", 18);
77 if (optstring[i] == ':') {
78 if (optstring[i+1] == ':') optarg = 0;
79 else if (optind >= argc) {
80 if (optstring[0] == ':') return ':';
82 write(2, argv[0], strlen(argv[0]));
83 write(2, ": option requires an argument: ", 31);
89 if (optstring[i+1] != ':' || optpos) {
90 optarg = argv[optind++] + optpos;
97 weak_alias(getopt, __posix_getopt);