diff options
author | Anton Khirnov <anton@khirnov.net> | 2023-07-14 16:43:51 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2023-07-20 20:47:46 +0200 |
commit | 39d5104332b1e78cb8e2d34dde072d3732d2eca1 (patch) | |
tree | a3a67e567b68af87f08fe7c8cfa4c0a28a802659 /fftools/cmdutils.c | |
parent | 49ac7fc48566a5cc33c0cd1a2806251fddb52a03 (diff) |
fftools: handle errors in parse_options()
Diffstat (limited to 'fftools/cmdutils.c')
-rw-r--r-- | fftools/cmdutils.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c index 038a5d3340..a9809ca087 100644 --- a/fftools/cmdutils.c +++ b/fftools/cmdutils.c @@ -364,8 +364,8 @@ int parse_option(void *optctx, const char *opt, const char *arg, return !!(po->flags & HAS_ARG); } -void parse_options(void *optctx, int argc, char **argv, const OptionDef *options, - void (*parse_arg_function)(void *, const char*)) +int parse_options(void *optctx, int argc, char **argv, const OptionDef *options, + int (*parse_arg_function)(void *, const char*)) { const char *opt; int optindex, handleoptions = 1, ret; @@ -386,13 +386,18 @@ void parse_options(void *optctx, int argc, char **argv, const OptionDef *options opt++; if ((ret = parse_option(optctx, opt, argv[optindex], options)) < 0) - exit_program(1); + return ret; optindex += ret; } else { - if (parse_arg_function) - parse_arg_function(optctx, opt); + if (parse_arg_function) { + ret = parse_arg_function(optctx, opt); + if (ret < 0) + return ret; + } } } + + return 0; } int parse_optgroup(void *optctx, OptionGroup *g) |