38 int getopt(
int argc,
char *argv[],
const char *optstring)
40 static char *nextchar = NULL;
42 if (nextchar == NULL || *nextchar ==
'\0')
55 if (strncmp(argv[
optind],
"--", strlen(
"--")) == 0)
65 nextchar += strlen(
"-");
70 char *cp = strchr(optstring, c);
72 if (cp == NULL || c ==
':')
80 if (*nextchar !=
'\0')
99 int getopt_long(
int argc,
char* argv[],
const char* optstring,
100 const struct option* longopts,
int* longindex)
102 int i, parse_long_mismatch = 0;
103 static char* nextchar = NULL;
105 if (nextchar == NULL || *nextchar ==
'\0')
123 if (strncmp(argv[
optind],
"--", 2) == 0)
125 parse_long_mismatch = 1;
126 nextchar += strlen(
"--");
135 nextchar += strlen(
"-");
142 for (i = 0; longopts != NULL && longopts[i].
name != NULL; i++)
144 size_t optlen = strlen(longopts[i].name);
145 if (strncmp(nextchar, longopts[i].name, optlen) == 0)
148 switch (longopts[i].has_arg)
151 if (*nextchar !=
'\0' || (
optind < argc && argv[
optind][0] !=
'-'))
159 return longopts[i].
flag == NULL ? longopts[i].
val : 0;
162 if (*nextchar ==
'=')
166 return longopts[i].
flag == NULL ? longopts[i].
val : 0;
168 else if (*nextchar !=
'\0' || (
optind < argc && argv[
optind][0] ==
'-'))
177 return longopts[i].
flag == NULL ? longopts[i].
val : 0;
184 if (*nextchar ==
'=')
188 else if (*nextchar ==
'\0' || (
optind < argc && argv[
optind][0] ==
'-'))
194 if (*nextchar ==
'\0' &&
optind < argc)
200 return longopts[i].
flag == NULL ? longopts[i].
val : 0;
207 if (parse_long_mismatch)
213 char c = *nextchar++;
214 char* cp = strchr(optstring, c);
216 if (cp == NULL || c ==
':')
225 if (*nextchar !=
'\0')