39 int getopt(
int argc,
char *argv[],
const char *optstring)
41 static char *nextchar = NULL;
43 if (nextchar == NULL || *nextchar ==
'\0')
56 if (strncmp(argv[
optind],
"--", strlen(
"--")) == 0)
66 nextchar += strlen(
"-");
71 char *cp = strchr(optstring, c);
73 if (cp == NULL || c ==
':')
81 if (*nextchar !=
'\0')
102 const struct option* longopts,
int* longindex)
104 int i, parse_long_mismatch = 0;
105 static char* nextchar = NULL;
107 if (nextchar == NULL || *nextchar ==
'\0')
125 if (strncmp(argv[
optind],
"--", 2) == 0)
127 parse_long_mismatch = 1;
128 nextchar += strlen(
"--");
137 nextchar += strlen(
"-");
144 for (i = 0; longopts != NULL && longopts[i].
name != NULL; i++)
146 size_t optlen = strlen(longopts[i].name);
147 if (strncmp(nextchar, longopts[i].name, optlen) == 0)
150 switch (longopts[i].has_arg)
153 if (*nextchar !=
'\0' || (
optind < argc && argv[
optind][0] !=
'-'))
161 return longopts[i].
flag == NULL ? longopts[i].
val : 0;
164 if (*nextchar ==
'=')
168 return longopts[i].
flag == NULL ? longopts[i].
val : 0;
170 else if (*nextchar !=
'\0' || (
optind < argc && argv[
optind][0] ==
'-'))
179 return longopts[i].
flag == NULL ? longopts[i].
val : 0;
186 if (*nextchar ==
'=')
190 else if (*nextchar ==
'\0' || (
optind < argc && argv[
optind][0] ==
'-'))
196 if (*nextchar ==
'\0' &&
optind < argc)
202 return longopts[i].
flag == NULL ? longopts[i].
val : 0;
209 if (parse_long_mismatch)
215 char c = *nextchar++;
216 char* cp = strchr(optstring, c);
218 if (cp == NULL || c ==
':')
227 if (*nextchar !=
'\0')
int getopt(int argc, char *argv[], const char *optstring)
int getopt_long(int argc, char *argv[], const char *optstring, const struct option *longopts, int *longindex)