100 const struct option* longopts,
int* longindex)
103 int i, parse_long_mismatch = 0;
104 static char* nextchar = NULL;
106 if (nextchar == NULL || *nextchar ==
'\0')
124 if (strncmp(argv[
optind],
"--", 2) == 0)
126 parse_long_mismatch = 1;
127 nextchar += strlen(
"--");
136 nextchar += strlen(
"-");
143 for (i = 0; longopts != NULL && longopts[i].
name != NULL; i++)
145 size_t optlen = strlen(longopts[i].name);
146 if (strncmp(nextchar, longopts[i].name, optlen) == 0)
149 switch (longopts[i].has_arg)
152 if (*nextchar !=
'\0' || (
optind < argc && argv[
optind][0] !=
'-'))
160 return longopts[i].
flag == NULL ? longopts[i].
val : 0;
163 if (*nextchar ==
'=')
167 return longopts[i].
flag == NULL ? longopts[i].
val : 0;
169 else if (*nextchar !=
'\0' || (
optind < argc && argv[
optind][0] ==
'-'))
178 return longopts[i].
flag == NULL ? longopts[i].
val : 0;
185 if (*nextchar ==
'=')
189 else if (*nextchar ==
'\0' || (
optind < argc && argv[
optind][0] ==
'-'))
199 return longopts[i].
flag == NULL ? longopts[i].
val : 0;
206 if (parse_long_mismatch)
212 char c = *nextchar++;
213 char* cp = strchr(optstring, c);
215 if (cp == NULL || c ==
':')
224 if (*nextchar !=
'\0')
int getopt_long(int argc, char *argv[], const char *optstring, const struct option *longopts, int *longindex)