diff --git a/cmdutils.c b/cmdutils.c index 54085fb7ec..c1edeb907f 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -149,6 +149,8 @@ unknown_opt: } else { po->u.func_arg(arg); } + if(po->flags & OPT_EXIT) + exit(0); } else { if (parse_arg_function) parse_arg_function(opt); diff --git a/cmdutils.h b/cmdutils.h index 27d295fe81..585f9a127e 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -70,6 +70,7 @@ typedef struct { #define OPT_SUBTITLE 0x0200 #define OPT_FUNC2 0x0400 #define OPT_INT64 0x0800 +#define OPT_EXIT 0x1000 union { void (*func_arg)(const char *); //FIXME passing error code as int return would be nicer then exit() in the func int *int_arg; diff --git a/ffmpeg.c b/ffmpeg.c index 4944dd6267..ae9a780265 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -3499,7 +3499,6 @@ static void opt_show_formats(void) "even though both encoding and decoding are supported. For example, the h263\n" "decoder corresponds to the h263 and h263p encoders, for file formats it is even\n" "worse.\n"); - av_exit(0); } static void parse_matrix_coeffs(uint16_t *dest, const char *str) @@ -3574,12 +3573,6 @@ static void show_help(void) av_opt_show(sws_opts, NULL); } -static void opt_show_help(void) -{ - show_help(); - av_exit(0); -} - static void opt_target(const char *arg) { int norm = -1; @@ -3763,12 +3756,6 @@ static int opt_bsf(const char *opt, const char *arg) return 0; } -static void opt_show_license(void) -{ - show_license(); - av_exit(0); -} - static void opt_show_version(void) { show_version(program_name); @@ -3777,10 +3764,10 @@ static void opt_show_version(void) static const OptionDef options[] = { /* main options */ - { "L", 0, {(void*)opt_show_license}, "show license" }, - { "h", 0, {(void*)opt_show_help}, "show help" }, + { "L", OPT_EXIT, {(void*)show_license}, "show license" }, + { "h", OPT_EXIT, {(void*)show_help}, "show help" }, { "version", 0, {(void*)opt_show_version}, "show version" }, - { "formats", 0, {(void*)opt_show_formats}, "show available formats, codecs, protocols, ..." }, + { "formats", OPT_EXIT, {(void*)opt_show_formats}, "show available formats, codecs, protocols, ..." }, { "f", HAS_ARG, {(void*)opt_format}, "force format", "fmt" }, { "i", HAS_ARG, {(void*)opt_input_file}, "input file name", "filename" }, { "y", OPT_BOOL, {(void*)&file_overwrite}, "overwrite output files" },