terminology/snap/local/efl-efreetd-search.patch

77 lines
2.3 KiB
Diff

diff --git a/src/lib/efreet/efreet_cache.c b/src/lib/efreet/efreet_cache.c
index f859c630f0..f7d196ef6b 100644
--- a/src/lib/efreet/efreet_cache.c
+++ b/src/lib/efreet/efreet_cache.c
@@ -112,6 +112,53 @@ EAPI int EFREET_EVENT_DESKTOP_CACHE_BUILD = 0;
if (e->server != ipc) \
return ECORE_CALLBACK_PASS_ON
+static void
+_find_binary(char buf[PATH_MAX])
+{
+ char *path_env = getenv("PATH");
+ char *names[] = { "efreetd", "terminology.efreetd"};
+ int i, n_names = sizeof(names) / sizeof(names[0]);
+
+ if (!path_env)
+ goto error;
+
+ for (i = 0; i < n_names; i++)
+ {
+ char *name = names[i];
+ char *start = path_env;
+ char *end = strchrnul(start, ':');
+ while (*start)
+ {
+ if (end > start)
+ {
+ struct stat st;
+ int res;
+ int len = (int)(end - start);
+ if (*(end-1) == '/')
+ snprintf(buf, PATH_MAX, "%.*s%s",
+ len,
+ start,
+ name);
+ else
+ snprintf(buf, PATH_MAX, "%.*s/%s",
+ len,
+ start,
+ name);
+ res = stat(buf, &st);
+ if (res == 0 && S_ISREG(st.st_mode) && (S_IXUSR & st.st_mode))
+ return;
+ }
+ if (!*end)
+ break;
+ start = end + 1;
+ end = strchrnul(start, ':');
+ }
+ }
+
+error:
+ snprintf(buf, PATH_MAX, PACKAGE_BIN_DIR "/efreetd");
+}
+
static void
_ipc_launch(void)
{
@@ -146,7 +193,7 @@ _ipc_launch(void)
if (run_in_tree)
bs_binary_get(buf, sizeof(buf), "efreet", "efreetd");
else
- snprintf(buf, sizeof(buf), PACKAGE_BIN_DIR "/efreetd");
+ _find_binary(buf);
ecore_exe_run(buf, NULL);
num = 0;
while ((!ipc) && (num < tries))
@@ -155,7 +202,7 @@ _ipc_launch(void)
usleep(try_gap);
ipc = ecore_ipc_server_connect(ECORE_IPC_LOCAL_USER, "efreetd", 0, NULL);
}
- if (!ipc) ERR("Timeout in trying to start and then connect to efreetd");
+ if (!ipc) ERR("Timeout in trying to start '%s' and then connect to efreetd", buf);
}
static Eina_Bool