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] ==
'-'))
198 return longopts[i].
flag == NULL ? longopts[i].
val : 0;
205 if (parse_long_mismatch)
211 char c = *nextchar++;
212 char* cp = strchr(optstring, c);
214 if (cp == NULL || c ==
':')
223 if (*nextchar !=
'\0')
int getopt_long(int argc, char *argv[], const char *optstring, const struct option *longopts, int *longindex)