xdg: replace stat() with g_file_test()

- title
- resolve dirp being leaked if XDG directory is found
This commit is contained in:
altffour 2021-01-11 15:51:38 +03:00
commit a3ff6baafb
No known key found for this signature in database
GPG key ID: B4ADFA86EDF5CCE9

View file

@ -202,7 +202,6 @@ void core_register_options(void)
void core_preinit(const char *path) void core_preinit(const char *path)
{ {
struct stat statbuf;
const char *home; const char *home;
char *str; char *str;
int len; int len;
@ -211,14 +210,13 @@ void core_preinit(const char *path)
if (irssi_dir == NULL) { if (irssi_dir == NULL) {
/* check if %XDG_CONFIG_HOME/irssi exists and use to it */ /* check if %XDG_CONFIG_HOME/irssi exists and use to it */
char *dirp = g_build_filename(g_get_user_config_dir(), "irssi", NULL); char *dirp = g_build_filename(g_get_user_config_dir(), "irssi", NULL);
if (stat(dirp, &statbuf) == 0) { if (!g_file_test(dirp, G_FILE_TEST_EXISTS)) {
use_xdg = 1; use_xdg = 1;
irssi_dir = g_build_filename(g_get_user_data_dir(), "irssi", NULL); irssi_dir = g_build_filename(g_get_user_data_dir(), "irssi", NULL);
irssi_cache_dir = g_build_filename(g_get_user_cache_dir(), "irssi", NULL); irssi_cache_dir = g_build_filename(g_get_user_cache_dir(), "irssi", NULL);
irssi_runtime_dir = irssi_runtime_dir =
g_build_filename(g_get_user_runtime_dir(), "irssi", NULL); g_build_filename(g_get_user_runtime_dir(), "irssi", NULL);
} else { /* fallback to non-xdg location */ } else { /* fallback to non-xdg location */
g_free(dirp);
home = g_get_home_dir(); home = g_get_home_dir();
if (home == NULL) if (home == NULL)
home = "."; home = ".";
@ -228,13 +226,14 @@ void core_preinit(const char *path)
irssi_cache_dir = irssi_dir; irssi_cache_dir = irssi_dir;
irssi_runtime_dir = irssi_dir; irssi_runtime_dir = irssi_dir;
} }
g_free(dirp);
} else { } else {
str = irssi_dir; str = irssi_dir;
irssi_dir = fix_path(str); irssi_dir = fix_path(str);
g_free(str); g_free(str);
len = strlen(irssi_dir); len = strlen(irssi_dir);
if (irssi_dir[len-1] == G_DIR_SEPARATOR) if (irssi_dir[len - 1] == G_DIR_SEPARATOR)
irssi_dir[len-1] = '\0'; irssi_dir[len - 1] = '\0';
} }
if (irssi_config_file == NULL) if (irssi_config_file == NULL)
irssi_config_file = use_xdg ? g_build_filename(g_get_user_config_dir(), "irssi", irssi_config_file = use_xdg ? g_build_filename(g_get_user_config_dir(), "irssi",