Add mandatory option

Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
Adrien Gallouët
2018-01-26 23:30:32 +00:00
parent f843b23365
commit 9ea48eaf66
2 changed files with 10 additions and 2 deletions

View File

@@ -88,6 +88,13 @@ option_option(void *data, int argc, char **argv)
return i - 1; return i - 1;
} }
for (int k = 0; opts[k].name; k++) {
if (opts[k].mandatory && !opts[k].set) {
gt_print("option `%s' is mandatory\n", opts[k].name);
return -1;
}
}
return argc; return argc;
} }
@@ -105,7 +112,7 @@ option_usage(struct option *opts, int slen)
len = 0; len = 0;
} }
len += gt_print(" [%s", opts[k].name); len += gt_print(" %s%s", opts[k].mandatory ? "" : "[", opts[k].name);
if (opts[k].call == option_option) { if (opts[k].call == option_option) {
len += option_usage((struct option *)opts[k].data, slen + len); len += option_usage((struct option *)opts[k].data, slen + len);
@@ -113,7 +120,7 @@ option_usage(struct option *opts, int slen)
len += gt_print(" ARG"); len += gt_print(" ARG");
} }
len += gt_print("]"); len += gt_print(opts[k].mandatory ? "" : "]");
} }
return len; return len;

View File

@@ -4,6 +4,7 @@ struct option {
char *name; char *name;
void *data; void *data;
int (*call) (void *, int, char **); int (*call) (void *, int, char **);
int mandatory;
int set; int set;
}; };