- char *cf;
-
- daemon_close_log();
- if (conf.config_file_given)
- cf = para_strdup(conf.config_file_arg);
- else
- cf = make_message("%s/.paraslash/server.conf", home);
- free(user_list_file);
- if (!conf.user_list_given)
- user_list_file = make_message("%s/.paraslash/server.users", home);
- else
- user_list_file = para_strdup(conf.user_list_arg);
- ret = file_exists(cf);
- if (conf.config_file_given && !ret) {
- ret = -1;
- PARA_EMERG_LOG("can not read config file %s\n", cf);
- goto out;
- }
- if (ret) {
- int tmp = conf.daemon_given;
- struct server_cmdline_parser_params params = {
- .override = override,
- .initialize = 0,
- .check_required = 1,
- .check_ambiguity = 0,
- .print_errors = !conf.daemon_given
- };
- server_cmdline_parser_config_file(cf, &conf, ¶ms);
- daemon_set_loglevel(conf.loglevel_arg);
- conf.daemon_given = tmp;
+ unsigned flags = MCF_DONT_FREE;
+
+ if (server_lpr != cmdline_lpr)
+ lls_free_parse_result(server_lpr, CMD_PTR);
+ server_lpr = cmdline_lpr;
+ if (reload)
+ flags |= MCF_OVERRIDE;
+ ret = lsu_merge_config_file_options(OPT_STRING_VAL(CONFIG_FILE),
+ "server.conf", &server_lpr, CMD_PTR, server_suite, flags);
+ if (ret < 0) {
+ PARA_EMERG_LOG("failed to parse config file: %s\n",
+ para_strerror(-ret));
+ exit(EXIT_FAILURE);