diff --git a/src/option.c b/src/option.c index f2fc81b..ec4baed 100644 --- a/src/option.c +++ b/src/option.c @@ -88,6 +88,13 @@ option_option(void *data, int argc, char **argv) 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; } @@ -105,7 +112,7 @@ option_usage(struct option *opts, int slen) 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) { 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("]"); + len += gt_print(opts[k].mandatory ? "" : "]"); } return len; diff --git a/src/option.h b/src/option.h index 457ee8b..797e584 100644 --- a/src/option.h +++ b/src/option.h @@ -4,6 +4,7 @@ struct option { char *name; void *data; int (*call) (void *, int, char **); + int mandatory; int set; };