diff --git a/scripts/scriptassist.pl b/scripts/scriptassist.pl index 1ba620e3..536ef33a 100644 --- a/scripts/scriptassist.pl +++ b/scripts/scriptassist.pl @@ -204,13 +204,7 @@ sub get_names { $xname =~ s/\W/_/g; my $pname = "${xname}::"; if ($xname ne $sname || $sname =~ /_/) { - my $dir = ""; - if (Irssi::is_xdg_supported()) { - $dir = Irssi::get_runtime_dir()."/scripts/"; - } - else { - $dir = Irssi::get_irssi_dir()."/scripts/"; - } + my $dir = Irssi::get_irssi_dir()."/scripts/"; if ($db && exists $db->{"$sname.pl"}) { # $found = 1; } elsif (-e $dir.$plname || -e $dir."$sname.pl" || -e $dir."autorun/$sname.pl") { diff --git a/src/common.h b/src/common.h index 88e9b1f4..111710d4 100644 --- a/src/common.h +++ b/src/common.h @@ -55,9 +55,11 @@ int g_input_add(GIOChannel *source, int condition, int g_input_add_full(GIOChannel *source, int priority, int condition, GInputFunction function, void *data); -/* return if xdg is being used */ -int is_xdg_supported(); -/* return full path for irssi folder */ +/* return full path for irssi runtime directory */ +const char *get_irssi_runtime_dir(void); +/* return full path for irssi cache directory */ +const char *get_irssi_cache_dir(void); +/* return full path for irssi data directory */ const char *get_irssi_dir(void); /* return full path for irssi config */ const char *get_irssi_config(void); diff --git a/src/core/core.c b/src/core/core.c index f8de46dc..56cbdbfe 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -65,18 +65,25 @@ void log_away_deinit(void); void wcwidth_wrapper_init(void); void wcwidth_wrapper_deinit(void); -int xdg_support; int irssi_gui; int irssi_init_finished; int sighup_received; time_t client_start_time; -static char *irssi_dir, *irssi_config_file; +static char *irssi_dir, /* XDG_DATA_HOME or ~/.irssi */ + *irssi_config_file, /* XDG_CONFIG_HOME/irssi/config or ~/.irssi/config */ + *irssi_cache_dir, /* XDG_CACHE_HOME/irssi or ~/.irssi */ + *irssi_runtime_dir; /* XDG_RUNTIME_HOME/irssi or ~/.irssi */ static GSList *dialog_type_queue, *dialog_text_queue; -int is_xdg_supported() +const char *get_irssi_runtime_dir(void) { - return xdg_support; + return irssi_runtime_dir; +} + +const char *get_irssi_cache_dir(void) +{ + return irssi_cache_dir; } const char *get_irssi_dir(void) @@ -84,7 +91,7 @@ const char *get_irssi_dir(void) return irssi_dir; } -/* return full path for ~/.irssi/config */ +/* return full path for irssi config */ const char *get_irssi_config(void) { return irssi_config_file; @@ -199,22 +206,27 @@ void core_preinit(const char *path) const char *home; char *str; int len; + int use_xdg = 0; - xdg_support = 0; if (irssi_dir == NULL) { - /* check if %XDG_CONFIG_HOME/irssi exists and default 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); if (stat(dirp, &statbuf) == 0) { - xdg_support = 1; - irssi_dir = dirp; + use_xdg = 1; + 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_runtime_dir = + g_build_filename(g_get_user_runtime_dir(), "irssi", NULL); } else { /* fallback to non-xdg location */ g_free(dirp); home = g_get_home_dir(); if (home == NULL) home = "."; - irssi_dir = g_strdup_printf(IRSSI_DIR_FULL, home); - xdg_support = 0; + /* all special XDG paths are equal to irssi_dir if XDG is not + * supported */ + irssi_cache_dir = irssi_dir; + irssi_runtime_dir = irssi_dir; } } else { str = irssi_dir; @@ -225,10 +237,9 @@ void core_preinit(const char *path) irssi_dir[len-1] = '\0'; } if (irssi_config_file == NULL) - if (is_xdg_supported()) - irssi_config_file = g_build_filename(irssi_dir, IRSSI_HOME_CONFIG, NULL); - else - irssi_config_file = g_strdup_printf("%s/" IRSSI_HOME_CONFIG, irssi_dir); + irssi_config_file = use_xdg ? g_build_filename(g_get_user_config_dir(), "irssi", + IRSSI_HOME_CONFIG, NULL) : + g_strdup_printf("%s/" IRSSI_HOME_CONFIG, irssi_dir); else { str = irssi_config_file; irssi_config_file = fix_path(str); diff --git a/src/core/log-away.c b/src/core/log-away.c index 6e58ad5d..b7dea03c 100644 --- a/src/core/log-away.c +++ b/src/core/log-away.c @@ -111,10 +111,7 @@ void log_away_init(void) away_filepos = 0; away_msgs = 0; - if (is_xdg_supported()) - awaylog_file = g_build_filename(g_get_user_cache_dir(), "irssi", "away.log", NULL); - else - awaylog_file = g_strconcat(get_irssi_dir(), "/away.log", NULL); + awaylog_file = g_strconcat(get_irssi_cache_dir(), "/away.log", NULL); settings_add_str("log", "awaylog_file", awaylog_file); g_free(awaylog_file); settings_add_level("log", "awaylog_level", "msgs hilight"); diff --git a/src/core/modules-load.c b/src/core/modules-load.c index b5c839f0..a3598c65 100644 --- a/src/core/modules-load.c +++ b/src/core/modules-load.c @@ -115,10 +115,7 @@ static GModule *module_open(const char *name, int *found) path = g_strdup(name); else { /* first try from home dir */ - if (is_xdg_supported()) - str = g_build_filename(g_get_user_data_dir(), "irssi", "modules", NULL); - else - str = g_strdup_printf("%s/modules", get_irssi_dir()); + str = g_strdup_printf("%s/modules", get_irssi_dir()); path = g_module_build_path(str, name); g_free(str); diff --git a/src/fe-common/core/themes.c b/src/fe-common/core/themes.c index f1939e2a..db19d2f3 100644 --- a/src/fe-common/core/themes.c +++ b/src/fe-common/core/themes.c @@ -932,11 +932,7 @@ THEME_REC *theme_load(const char *setname) theme = theme_find(name); /* check home dir */ - if (is_xdg_supported()) - fname = g_build_filename(g_get_user_data_dir(), "irssi", - g_strdup_printf("%s.theme", name), NULL); - else - fname = g_strdup_printf("%s/%s.theme", get_irssi_dir(), name, NULL); + fname = g_strdup_printf("%s/%s.theme", get_irssi_dir(), name, NULL); if (stat(fname, &statbuf) != 0) { /* check global config dir */ g_free(fname); @@ -1261,10 +1257,7 @@ static void theme_save(THEME_REC *theme, int save_all) basename = g_path_get_basename(theme->path); /* always save the theme */ - if (is_xdg_supported()) - path = g_build_filename(g_get_user_data_dir(), "irssi", basename, NULL); - else - path = g_strdup_printf("%s/%s", get_irssi_dir(), basename, NULL); + path = g_strdup_printf("%s/%s", get_irssi_dir(), basename, NULL); ok = config_write(config, path, 0660) == 0; g_free(basename); @@ -1420,11 +1413,7 @@ void themes_reload(void) /* first there's default theme.. */ current_theme = theme_load("default"); if (current_theme == NULL) { - if (is_xdg_supported()) - fname = - g_build_filename(g_get_user_data_dir(), "irssi", "default.theme", NULL); - else - fname = g_strdup_printf("%s/default.theme", get_irssi_dir()); + fname = g_strdup_printf("%s/default.theme", get_irssi_dir()); current_theme = theme_create(fname, "default"); current_theme->default_color = -1; theme_read(current_theme, NULL); diff --git a/src/perl/common/Core.xs b/src/perl/common/Core.xs index 0500cd83..ee913c05 100644 --- a/src/perl/common/Core.xs +++ b/src/perl/common/Core.xs @@ -599,17 +599,17 @@ PPCODE: XPUSHs(sv_2mortal(new_pv(ret))); g_free_not_null(ret); -bool -is_xdg_supported() +char * +get_runtime_dir() CODE: - RETVAL = (bool) is_xdg_supported(); + RETVAL = (char *) get_irssi_runtime_dir(); OUTPUT: RETVAL char * -get_runtime_dir() +get_cache_dir() CODE: - RETVAL = (char *) g_build_filename(g_get_user_runtime_dir(), "irssi", NULL); + RETVAL = (char *) get_irssi_cache_dir(); OUTPUT: RETVAL diff --git a/src/perl/perl-core.c b/src/perl/perl-core.c index 187eab1a..dac11b8c 100644 --- a/src/perl/perl-core.c +++ b/src/perl/perl-core.c @@ -390,25 +390,16 @@ char *perl_script_get_path(const char *name) file = IS_PERL_SCRIPT(name) ? g_strdup(name) : g_strdup_printf("%s.pl", name); - /* check if xdg paths are being used, if so locate scripts based on that */ - if (is_xdg_supported()) { - path = g_build_filename(g_get_user_data_dir(), "irssi", "scripts", file, NULL); + /* check from IRSSI_DATA_DIR/scripts/ */ + path = g_strdup_printf("%s/scripts/%s", get_irssi_dir(), file); + if (stat(path, &statbuf) != 0) { + /* check from SCRIPTDIR */ + g_free(path); + path = g_strdup_printf(SCRIPTDIR "/%s", file); if (stat(path, &statbuf) != 0) { g_free(path); path = NULL; } - } else { - /* check from ~/.irssi/scripts/ */ - path = g_strdup_printf("%s/scripts/%s", get_irssi_dir(), file); - if (stat(path, &statbuf) != 0) { - /* check from SCRIPTDIR */ - g_free(path); - path = g_strdup_printf(SCRIPTDIR "/%s", file); - if (stat(path, &statbuf) != 0) { - g_free(path); - path = NULL; - } - } } g_free(file); return path; @@ -433,10 +424,7 @@ void perl_scripts_autorun(void) struct stat statbuf; char *path, *fname; - if (is_xdg_supported()) - path = g_build_filename(g_get_user_data_dir(), "irssi", "scripts", "autorun", NULL); - else - path = g_strdup_printf("%s/scripts/autorun", get_irssi_dir()); + path = g_strdup_printf("%s/scripts/autorun", get_irssi_dir()); dirp = opendir(path); if (dirp == NULL) { g_free(path); diff --git a/src/perl/perl-fe.c b/src/perl/perl-fe.c index a0658ca0..ac84d67a 100644 --- a/src/perl/perl-fe.c +++ b/src/perl/perl-fe.c @@ -209,10 +209,7 @@ static void sig_complete_load(GList **list, WINDOW_REC *window, return; /* completing filename parameter for /SCRIPT LOAD */ - if (is_xdg_supported()) - user_dir = g_build_filename(g_get_user_data_dir(), "scripts", NULL); - else - user_dir = g_strdup_printf("%s/scripts", get_irssi_dir()); + user_dir = g_strdup_printf("%s/scripts", get_irssi_dir()); *list = filename_complete(word, user_dir); *list = g_list_concat(*list, filename_complete(word, SCRIPTDIR)); g_free(user_dir);