From 9266e773d34c341877bd32671d674df20c6fd904 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Sun, 27 Nov 2022 21:45:07 -0500 Subject: [PATCH] unix: Better base dir calculation for Solaris. This idea came from https://github.com/libsdl-org/SDL/pull/6681 (thanks!) --- src/physfs_platform_unix.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/physfs_platform_unix.c b/src/physfs_platform_unix.c index 10d93a7..b945e03 100644 --- a/src/physfs_platform_unix.c +++ b/src/physfs_platform_unix.c @@ -261,12 +261,6 @@ char *__PHYSFS_platformCalcBaseDir(const char *argv0) if (sysctl(mib, 4, fullpath, &buflen, NULL, 0) != -1) retval = __PHYSFS_strdup(fullpath); } - #elif defined(PHYSFS_PLATFORM_SOLARIS) - { - const char *path = getexecname(); - if ((path != NULL) && (path[0] == '/')) /* must be absolute path... */ - retval = __PHYSFS_strdup(path); - } #endif /* If there's a Linux-like /proc filesystem, you can get the full path to @@ -278,6 +272,7 @@ char *__PHYSFS_platformCalcBaseDir(const char *argv0) retval = readSymLink("/proc/self/exe"); if (!retval) retval = readSymLink("/proc/curproc/file"); if (!retval) retval = readSymLink("/proc/curproc/exe"); + if (!retval) retval = readSymLink("/proc/self/path/a.out"); if (retval == NULL) { /* older kernels don't have /proc/self ... try PID version... */ @@ -289,6 +284,15 @@ char *__PHYSFS_platformCalcBaseDir(const char *argv0) } /* if */ } /* if */ + #if defined(PHYSFS_PLATFORM_SOLARIS) + if (!retval) /* try getexecname() if /proc didn't pan out. This may not be an absolute path! */ + { + const char *path = getexecname(); + if ((path != NULL) && (path[0] == '/')) /* must be absolute path... */ + retval = __PHYSFS_strdup(path); + } /* if */ + #endif + if (retval != NULL) /* chop off filename. */ { char *ptr = strrchr(retval, '/');