summaryrefslogtreecommitdiff
path: root/fftools/cmdutils.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-07-14 16:43:51 +0200
committerAnton Khirnov <anton@khirnov.net>2023-07-20 20:47:46 +0200
commit39d5104332b1e78cb8e2d34dde072d3732d2eca1 (patch)
treea3a67e567b68af87f08fe7c8cfa4c0a28a802659 /fftools/cmdutils.c
parent49ac7fc48566a5cc33c0cd1a2806251fddb52a03 (diff)
fftools: handle errors in parse_options()
Diffstat (limited to 'fftools/cmdutils.c')
-rw-r--r--fftools/cmdutils.c15
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)