Forgot string termination. My bad. Corrected patch below, or snapshot 201109170923.
Cheers,
Marc
--- mavis/spawnd_main.c 2011/08/21 13:18:16 1.79
+++ mavis/spawnd_main.c 2011/09/17 07:22:24
@@ -98,6 +98,7 @@
static void get_exec_path(char **path, char *dflt)
{
char tmp[PATH_MAX];
+ ssize_t rls;
if (strchr(dflt, '/')) {
*path = strdup(dflt);
@@ -138,18 +139,15 @@
}
#endif
- if (-1 < readlink("/proc/self/exe", tmp, sizeof(tmp))) {
- *path = strdup(tmp);
- return;
+ rls = readlink("/proc/self/exe", tmp, sizeof(tmp));
+ if (rls < 0)
+ rls = readlink("/proc/curproc/file", tmp, sizeof(tmp));
+ if (rls < 0) {
+ snprintf(tmp, sizeof(tmp), "/proc/%lu/exe", (u_long) getpid());
+ rls = readlink(tmp, tmp, sizeof(tmp));
}
-
- if (-1 < readlink("/proc/curproc/file", tmp, sizeof(tmp))) {
- *path = strdup(tmp);
- return;
- }
-
- snprintf(tmp, sizeof(tmp), "/proc/%lu/exe", (u_long) getpid());
- if (-1 < readlink(tmp, tmp, sizeof(tmp))) {
+ if (rls > 0) {
+ tmp[rls] = 0;
*path = strdup(tmp);
return;
}