summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-06-09 10:13:04 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-06-09 10:16:24 +0100
commit9be9e9f5ffd50b0079143f18a9c99ff793daa81a (patch)
treeedc25f2c8eef7bb01457febff6680711aa1b40e8
parent0ab3575f700f961ba89a9477f010ca97294a0cf7 (diff)
downloadefl-9be9e9f5ffd50b0079143f18a9c99ff793daa81a.tar.gz
efreet - handle runtime relocation right with default XDG_DATA_DIRS
XDG_DATA_DIRS was only set up to a default including where efl was installed prefix-wise as the compiled-=in prefix, not runtime determined prefix. it shouldn't actually affect most people except those making use of this. @fix
-rw-r--r--src/lib/efreet/efreet_base.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/src/lib/efreet/efreet_base.c b/src/lib/efreet/efreet_base.c
index 6497e8d955..736a3a05fc 100644
--- a/src/lib/efreet/efreet_base.c
+++ b/src/lib/efreet/efreet_base.c
@@ -51,6 +51,8 @@ static const char *xdg_pictures_dir = NULL;
static const char *xdg_videos_dir = NULL;
static const char *hostname = NULL;
+static Eina_Prefix *pfx= NULL;
+
static void efreet_dirs_init(void);
static const char *efreet_dir_get(const char *key, const char *fallback);
static Eina_List *efreet_dirs_get(const char *key,
@@ -72,6 +74,9 @@ efreet_base_init(void)
EINA_LOG_ERR("Efreet: Could not create a log domain for efreet_base.\n");
return 0;
}
+ if (!pfx) pfx = eina_prefix_new
+ (NULL, efreet_init, "EFREET", "efreet", "checkme",
+ PACKAGE_BIN_DIR, PACKAGE_LIB_DIR, PACKAGE_DATA_DIR, PACKAGE_DATA_DIR);
efreet_dirs_init();
return 1;
}
@@ -105,6 +110,11 @@ efreet_base_shutdown(void)
IF_RELEASE(hostname);
+ if (pfx)
+ {
+ eina_prefix_free(pfx);
+ pfx = NULL;
+ }
eina_log_domain_unregister(_efreet_base_log_dom);
_efreet_base_log_dom = -1;
}
@@ -280,6 +290,7 @@ efreet_dirs_reset(void)
static void
efreet_dirs_init(void)
{
+ char *data_dir = DATA_DIR;
char buf[PATH_MAX];
/* efreet_home_dir */
@@ -294,13 +305,27 @@ efreet_dirs_init(void)
xdg_cache_home = efreet_dir_get("XDG_CACHE_HOME", "/.cache");
/* xdg_data_dirs */
+ if (pfx)
+ {
+ const char *dir = eina_prefix_get(pfx);
+ if (dir)
+ {
+ size_t len = strlen(dir);
+
+ data_dir = alloca(len + 1 + 5 /*"share" */ + 1);
#ifdef _WIN32
- snprintf(buf, sizeof(buf), "%s\\Efl;" DATA_DIR ";", getenv("APPDATA"));
- xdg_data_dirs = efreet_dirs_get("XDG_DATA_DIRS", buf);
+ snprintf(data_dir, len + 1 + 5 + 1, "%s\\share", dir);
#else
- xdg_data_dirs = efreet_dirs_get("XDG_DATA_DIRS",
- DATA_DIR ":/usr/share:/usr/local/share");
+ snprintf(data_dir, len + 1 + 5 + 1, "%s/share", dir);
#endif
+ }
+ }
+#ifdef _WIN32
+ snprintf(buf, sizeof(buf), "%s\\Efl;%s;", data_dir, getenv("APPDATA"));
+#else
+ snprintf(buf, sizeof(buf), "%s:/usr/share:/usr/local/share", data_dir);
+#endif
+ xdg_data_dirs = efreet_dirs_get("XDG_DATA_DIRS", buf);
/* xdg_config_dirs */
#ifdef _WIN32
xdg_config_dirs = efreet_dirs_get("XDG_CONFIG_DIRS", getenv("APPDATA"));