From: Andre Noll Date: Thu, 15 Mar 2018 00:36:19 +0000 (+0100) Subject: gui: Use lsu_merge_config_file_options(). X-Git-Tag: v0.6.2~2^2~2 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=90023251721ca8540523f30499ddc5adbe39c19e;ds=sidebyside gui: Use lsu_merge_config_file_options(). para_gui supports config file reloading, so parse_config_file_or_die() needs to set MCF_DONT_FREE to keep a reference to the command line parse result and MCF_OVERRIDE in the reload case. Also, the code to check the key maps and to initialize the theme needs to be kept. --- diff --git a/configure.ac b/configure.ac index 94b3abb4..dc020486 100644 --- a/configure.ac +++ b/configure.ac @@ -572,6 +572,7 @@ if test $HAVE_CURSES = yes; then fd gui gui_theme + lsu time sched version diff --git a/gui.c b/gui.c index 6882a31c..0c8aceae 100644 --- a/gui.c +++ b/gui.c @@ -13,6 +13,7 @@ #include "gui.lsg.h" #include "para.h" #include "gui.h" +#include "lsu.h" #include "string.h" #include "ringbuffer.h" #include "fd.h" @@ -857,64 +858,23 @@ static void check_key_map_args_or_die(void) static void parse_config_file_or_die(bool reload) { int ret; - char *cf = NULL, *errctx = NULL; - void *map; - size_t sz; - int cf_argc; - char **cf_argv; - struct lls_parse_result *cf_lpr, *merged_lpr; - - if (OPT_GIVEN(CONFIG_FILE)) - cf = para_strdup(OPT_STRING_VAL(CONFIG_FILE)); - else { - char *home = para_homedir(); - cf = make_message("%s/.paraslash/gui.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(CONFIG_FILE)) - goto free_cf; - ret = 0; - lpr = cmdline_lpr; - goto success; - } - ret = lls(lls_convert_config(map, sz, NULL, &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_PTR, &cf_lpr, &errctx)); - lls_free_argv(cf_argv); - if (ret < 0) - goto free_cf; - if (reload) /* config file overrides command line */ - ret = lls(lls_merge(cf_lpr, cmdline_lpr, CMD_PTR, &merged_lpr, - &errctx)); - else /* command line options override config file options */ - ret = lls(lls_merge(cmdline_lpr, cf_lpr, CMD_PTR, &merged_lpr, - &errctx)); - lls_free_parse_result(cf_lpr, CMD_PTR); - if (ret < 0) - goto free_cf; + unsigned flags = MCF_DONT_FREE; + if (lpr != cmdline_lpr) lls_free_parse_result(lpr, CMD_PTR); - lpr = merged_lpr; -success: - loglevel = OPT_UINT32_VAL(LOGLEVEL); - check_key_map_args_or_die(); - theme_init(OPT_STRING_VAL(THEME), &theme); -free_cf: - free(cf); + lpr = cmdline_lpr; + if (reload) + flags |= MCF_OVERRIDE; + ret = lsu_merge_config_file_options(OPT_STRING_VAL(CONFIG_FILE), + "gui.conf", &lpr, CMD_PTR, gui_suite, flags); if (ret < 0) { - if (errctx) - PARA_ERROR_LOG("%s\n", errctx); - free(errctx); - PARA_EMERG_LOG("%s\n", para_strerror(-ret)); + PARA_EMERG_LOG("failed to parse config file: %s\n", + para_strerror(-ret)); exit(EXIT_FAILURE); } + loglevel = OPT_UINT32_VAL(LOGLEVEL); + check_key_map_args_or_die(); + theme_init(OPT_STRING_VAL(THEME), &theme); } /* Reread configuration, terminate on errors. */