summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicm <nicm>2022-03-03 08:24:12 +0000
committernicm <nicm>2022-03-03 08:24:12 +0000
commit7d4224f2073ca4111968573e35997b65a0d5787a (patch)
treec0fb2eff8d9ca74eb2290b3c48abd7e86a4914df
parentf39a71aaade384d47917349f9d0b8dd709e8262e (diff)
Allow optional arguments.
-rw-r--r--arguments.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/arguments.c b/arguments.c
index 17bc12ec..37cd0236 100644
--- a/arguments.c
+++ b/arguments.c
@@ -131,8 +131,9 @@ args_parse(const struct args_parse *parse, struct args_value *values,
u_int i;
enum args_parse_type type;
struct args_value *value, *new;
- u_char flag, argument;
+ u_char flag;
const char *found, *string, *s;
+ int optional_argument;
if (count == 0)
return (args_create());
@@ -169,18 +170,27 @@ args_parse(const struct args_parse *parse, struct args_value *values,
args_free(args);
return (NULL);
}
- argument = *++found;
- if (argument != ':') {
+ if (*++found != ':') {
log_debug("%s: -%c", __func__, flag);
args_set(args, flag, NULL);
continue;
}
+ if (*found == ':') {
+ optional_argument = 1;
+ found++;
+ }
new = xcalloc(1, sizeof *new);
if (*string != '\0') {
new->type = ARGS_STRING;
new->string = xstrdup(string);
} else {
if (i == count) {
+ if (optional_argument) {
+ log_debug("%s: -%c", __func__,
+ flag);
+ args_set(args, flag, NULL);
+ continue;
+ }
xasprintf(cause,
"-%c expects an argument",
flag);