version 1.39, 2021/08/20 20:08:30 |
version 1.40, 2021/08/21 08:44:59 |
|
|
|
|
/* Parse an argv and argc into a new argument set. */ |
/* Parse an argv and argc into a new argument set. */ |
struct args * |
struct args * |
args_parse(const char *template, int argc, char **argv, int lower, int upper) |
args_parse(const struct args_parse *parse, int argc, char **argv) |
{ |
{ |
struct args *args; |
struct args *args; |
int opt; |
int opt; |
|
|
optarg = NULL; |
optarg = NULL; |
|
|
args = args_create(); |
args = args_create(); |
while ((opt = getopt(argc, argv, template)) != -1) { |
while ((opt = getopt(argc, argv, parse->template)) != -1) { |
if (opt < 0) |
if (opt < 0) |
continue; |
continue; |
if (opt == '?' || strchr(template, opt) == NULL) { |
if (opt == '?' || strchr(parse->template, opt) == NULL) { |
args_free(args); |
args_free(args); |
return (NULL); |
return (NULL); |
} |
} |
|
|
args->argc = argc; |
args->argc = argc; |
args->argv = cmd_copy_argv(argc, argv); |
args->argv = cmd_copy_argv(argc, argv); |
|
|
if ((lower != -1 && argc < lower) || (upper != -1 && argc > upper)) { |
if ((parse->lower != -1 && argc < parse->lower) || |
|
(parse->upper != -1 && argc > parse->upper)) { |
args_free(args); |
args_free(args); |
return (NULL); |
return (NULL); |
} |
} |