- if (OPT_GIVEN(DSS, CONFIG_FILE))
- return dss_strdup(OPT_STRING_VAL(DSS, CONFIG_FILE));
- home = get_homedir();
- config_file = make_message("%s/.dssrc", home);
- free(home);
- return config_file;
+ if (OPT_GIVEN(DSS, CONFIG_FILE)) {
+ const char *arg = OPT_STRING_VAL(DSS, CONFIG_FILE);
+ config_file = realpath(arg, NULL);
+ if (!config_file) {
+ DSS_EMERG_LOG(("could not resolve path %s: %s\n", arg,
+ strerror(errno)));
+ exit(EXIT_FAILURE);
+ }
+ } else {
+ char *home = get_homedir();
+ char *arg = make_message("%s/.dssrc", home);
+ free(home);
+ config_file = realpath(arg, NULL);
+ if (config_file)
+ free(arg);
+ else /* not fatal */
+ config_file = arg;
+ }
+ DSS_DEBUG_LOG(("config file: %s\n", config_file));