- fix 2699
[oweals/gnunet.git] / src / util / os_installation.c
index c6dca83909528f323d00d38e4ffba91494c02566..d500580bfa36a20c9ea29c6217ebb374ea766026 100644 (file)
@@ -396,6 +396,9 @@ os_get_gnunet_path ()
 #if LINUX
   if (NULL != (ret = get_path_from_proc_maps ()))
     return ret;
+  /* try path *first*, before /proc/exe, as /proc/exe can be wrong */
+  if (NULL != (ret = get_path_from_PATH ("gnunet-arm")))
+    return ret;
   if (NULL != (ret = get_path_from_proc_exe ()))
     return ret;
 #endif
@@ -429,7 +432,7 @@ os_get_gnunet_path ()
 static char *
 os_get_exec_path ()
 {
-  char *ret;
+  char *ret = NULL;
 
 #if LINUX
   if (NULL != (ret = get_path_from_proc_exe ()))
@@ -444,7 +447,7 @@ os_get_exec_path ()
     return ret;
 #endif
   /* other attempts here */
-  return NULL;
+  return ret;
 }
 
 
@@ -487,27 +490,27 @@ GNUNET_OS_installation_get_path (enum GNUNET_OS_InstallationPathKind dirkind)
     execpath[--n] = '\0';
 
   isbasedir = 1;
-  if ((n > 5) &&
-      ((0 == strcasecmp (&execpath[n - 5], "lib32")) ||
-       (0 == strcasecmp (&execpath[n - 5], "lib64"))))
+  if ((n > 6) &&
+      ((0 == strcasecmp (&execpath[n - 6], "/lib32")) ||
+       (0 == strcasecmp (&execpath[n - 6], "/lib64"))))
   {
     if ( (GNUNET_OS_IPK_LIBDIR != dirkind) &&
         (GNUNET_OS_IPK_LIBEXECDIR != dirkind) )
     {
       /* strip '/lib32' or '/lib64' */
-      execpath[n - 5] = '\0';
-      n -= 5;
+      execpath[n - 6] = '\0';
+      n -= 6;
     }
     else
       isbasedir = 0;
   }
-  else if ((n > 3) &&
-           ((0 == strcasecmp (&execpath[n - 3], "bin")) ||
-            (0 == strcasecmp (&execpath[n - 3], "lib"))))
+  else if ((n > 4) &&
+           ((0 == strcasecmp (&execpath[n - 4], "/bin")) ||
+            (0 == strcasecmp (&execpath[n - 4], "/lib"))))
   {
     /* strip '/bin' or '/lib' */
-    execpath[n - 3] = '\0';
-    n -= 3;
+    execpath[n - 4] = '\0';
+    n -= 4;
   }
   /* in case this was a directory named foo-bin, remove "foo-" */
   while ((n > 1) && (execpath[n - 1] == DIR_SEPARATOR))