From: Andre Noll Date: Thu, 15 Mar 2018 01:14:37 +0000 (+0100) Subject: mixer: Use lsu_merge_config_file_options(). X-Git-Tag: v0.6.2~2^2~1 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=62f16302b6cdb35de8b33894858cec81b34639be mixer: Use lsu_merge_config_file_options(). para_mixer is special in the way the config file is handled because it is the only executable which allows options for subcommands to be stored in the config file. Therefore the mixer specific parse_and_merge_config_file() is called twice. First to merge the global (supercommand) options, then to merge the subcommand options. This does not cause any problems regarding the conversion, though. --- diff --git a/configure.ac b/configure.ac index dc020486..b8c8817e 100644 --- a/configure.ac +++ b/configure.ac @@ -546,7 +546,7 @@ fi if test $HAVE_OSS = yes -o $HAVE_ALSA = yes; then build_mixer="yes" executables="$executables mixer" - mixer_errlist_objs="mixer exec string fd version" + mixer_errlist_objs="mixer exec string fd lsu version" if test $HAVE_OSS = yes; then mixer_errlist_objs="$mixer_errlist_objs oss_mix" fi diff --git a/mixer.c b/mixer.c index 52af25f9..ad674bf5 100644 --- a/mixer.c +++ b/mixer.c @@ -8,6 +8,7 @@ #include "mixer.lsg.h" #include "para.h" +#include "lsu.h" #include "fd.h" #include "string.h" #include "mix.h" @@ -453,60 +454,16 @@ static void handle_help_flags(void) static int parse_and_merge_config_file(const struct lls_command *cmd) { int ret; - int cf_argc; - char **cf_argv; - char *cf, *errctx = NULL; - struct lls_parse_result **lprp, *cf_lpr, *merged_lpr; - void *map; - size_t sz; - const char *subcmd_name; - - if (cmd == lls_cmd(0, mixer_suite)) { - lprp = &lpr; - subcmd_name = NULL; - } else { - lprp = &sub_lpr; - subcmd_name = lls_command_name(cmd); - } - if (OPT_GIVEN(PARA_MIXER, CONFIG_FILE)) - cf = para_strdup(OPT_STRING_VAL(PARA_MIXER, CONFIG_FILE)); - else { - char *home = para_homedir(); - cf = make_message("%s/.paraslash/mixer.conf", home); - free(home); - } - ret = mmap_full_file(cf, O_RDONLY, &map, &sz, NULL); - if (ret < 0) { - if (ret != -E_EMPTY && ret != -ERRNO_TO_PARA_ERROR(ENOENT)) - goto free_cf; - if (ret == -ERRNO_TO_PARA_ERROR(ENOENT) && - OPT_GIVEN(PARA_MIXER, CONFIG_FILE)) - goto free_cf; - } else { - ret = lls(lls_convert_config(map, sz, subcmd_name, &cf_argv, &errctx)); - para_munmap(map, sz); - if (ret < 0) - goto free_cf; - cf_argc = ret; - ret = lls(lls_parse(cf_argc, cf_argv, cmd, &cf_lpr, &errctx)); - lls_free_argv(cf_argv); - if (ret < 0) - goto free_cf; - ret = lls(lls_merge(*lprp, cf_lpr, cmd, &merged_lpr, &errctx)); - lls_free_parse_result(cf_lpr, cmd); - if (ret < 0) - goto free_cf; - lls_free_parse_result(*lprp, cmd); - *lprp = merged_lpr; - loglevel = OPT_UINT32_VAL(PARA_MIXER, LOGLEVEL); - } - ret = 1; -free_cf: - free(cf); - if (errctx) - PARA_ERROR_LOG("%s\n", errctx); - free(errctx); - return ret; + struct lls_parse_result **lprp = (cmd == lls_cmd(0, mixer_suite))? + &lpr : &sub_lpr; + + ret = lsu_merge_config_file_options(OPT_STRING_VAL(PARA_MIXER, + CONFIG_FILE), "mixer.conf", lprp, cmd, mixer_suite, + 0 /* flags */); + if (ret < 0) + return ret; + loglevel = OPT_UINT32_VAL(PARA_MIXER, LOGLEVEL); + return 1; } /**