2020-05-18 13:16:45 -07:00
|
|
|
diff --git a/src/lib/efreet/efreet_cache.c b/src/lib/efreet/efreet_cache.c
|
2020-05-18 13:24:04 -07:00
|
|
|
index f859c630f0..f7d196ef6b 100644
|
2020-05-18 13:16:45 -07:00
|
|
|
--- 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) == '/')
|
2020-05-18 13:24:04 -07:00
|
|
|
+ snprintf(buf, PATH_MAX, "%.*s%s",
|
2020-05-18 13:16:45 -07:00
|
|
|
+ len,
|
|
|
|
+ start,
|
|
|
|
+ name);
|
|
|
|
+ else
|
2020-05-18 13:24:04 -07:00
|
|
|
+ snprintf(buf, PATH_MAX, "%.*s/%s",
|
2020-05-18 13:16:45 -07:00
|
|
|
+ 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:
|
2020-06-29 13:00:28 -07:00
|
|
|
+ snprintf(buf, PATH_MAX, PACKAGE_BIN_DIR "/efreetd");
|
2020-05-18 13:16:45 -07:00
|
|
|
+}
|
|
|
|
+
|
|
|
|
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
|