--- src/pulsecore/core-util.c | 44 ++++++++++++++++++++++++++------------------ src/pulsecore/core-util.h | 1 + 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c index cef9f88..1852b1c 100644 --- a/src/pulsecore/core-util.c +++ b/src/pulsecore/core-util.c @@ -1549,16 +1549,6 @@ int pa_unlock_lockfile(const char *fn, int fd) { return r; } -static char *get_config_home(char *home) { - char *t; - - t = getenv("XDG_CONFIG_HOME"); - if (t) - return pa_xstrdup(t); - - return pa_sprintf_malloc("%s" PA_PATH_SEP ".config", home); -} - static int check_ours(const char *p) { struct stat st; @@ -1576,7 +1566,7 @@ static int check_ours(const char *p) { } static char *get_pulse_home(void) { - char *h, *ret, *config_home; + char *h, *ret; int t; h = pa_get_home_dir_malloc(); @@ -1594,17 +1584,14 @@ static char *get_pulse_home(void) { /* If the old directory exists, use it. */ ret = pa_sprintf_malloc("%s" PA_PATH_SEP ".pulse", h); - if (access(ret, F_OK) >= 0) { - free(h); + pa_xfree(h); + if (access(ret, F_OK) >= 0) return ret; - } free(ret); /* Otherwise go for the XDG compliant directory. */ - config_home = get_config_home(h); - free(h); - ret = pa_sprintf_malloc("%s" PA_PATH_SEP "pulse", config_home); - free(config_home); + if (pa_get_config_home_dir(&ret) < 0) + return NULL; return ret; } @@ -1670,6 +1657,27 @@ int pa_append_to_home_dir(const char *path, char **_r) { return 0; } +int pa_get_config_home_dir(char **_r) { + const char *e; + char *home_dir; + + pa_assert(_r); + + e = getenv("XDG_CONFIG_HOME"); + if (e && *e) { + *_r = pa_sprintf_malloc("%s" PA_PATH_SEP "pulse", e); + return 0; + } + + home_dir = pa_get_home_dir_malloc(); + if (!home_dir) + return -PA_ERR_NOENTITY; + + *_r = pa_sprintf_malloc("%s" PA_PATH_SEP ".config" PA_PATH_SEP "pulse", home_dir); + pa_xfree(home_dir); + return 0; +} + char *pa_get_binary_name_malloc(void) { char *t; size_t allocated = 128; diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h index 9495e6d..d2ab771 100644 --- a/src/pulsecore/core-util.h +++ b/src/pulsecore/core-util.h @@ -139,6 +139,7 @@ char *pa_get_runtime_dir(void); char *pa_get_state_dir(void); char *pa_get_home_dir_malloc(void); int pa_append_to_home_dir(const char *path, char **_r); +int pa_get_config_home_dir(char **_r); char *pa_get_binary_name_malloc(void); char *pa_runtime_path(const char *fn); char *pa_state_path(const char *fn, bool prepend_machine_id); -- 1.9.3