Skip to content

Commit

Permalink
unix: Better base dir calculation for Solaris.
Browse files Browse the repository at this point in the history
This idea came from libsdl-org/SDL#6681 (thanks!)

(cherry picked from commit 9266e77)
  • Loading branch information
icculus committed Nov 28, 2022
1 parent eb3383b commit bfa7997
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions src/physfs_platform_unix.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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... */
Expand All @@ -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, '/');
Expand Down

0 comments on commit bfa7997

Please sign in to comment.