- /* Strip executable file name, leaving path */
- *strrchr(strExePath, '\\') = '\0';
+#elif defined(HAVE_REALPATH) /* Assume POSIX.1-2008 */
+ /* Try Unices in order of likelihood. */
+ exepath = realpath("/proc/self/exe", NULL); /* Linux/Cygwin */
+ if (exepath == NULL)
+ exepath = realpath("/proc/self/path/a.out", NULL); /* Solaris */
+ if (exepath == NULL)
+ exepath = realpath("/proc/curproc/file", NULL); /* FreeBSD (Should be covered above) */
+#endif
+ } while (0);
+
+ if (exepath != NULL) {
+ /* Strip executable file name, leaving path */
+ *strrchr(exepath, '/') = '\0';
+ } else {
+ LOG_WARNING("Could not determine executable path, using configured BINDIR.");
+ LOG_DEBUG("BINDIR = %s", BINDIR);
+#ifdef HAVE_REALPATH
+ exepath = realpath(BINDIR, NULL);
+#else
+ exepath = strdup(BINDIR);
+#endif
+ }