From 4f5e9fd5bda0d58c2907f75fa4ea0c92c3a2525f Mon Sep 17 00:00:00 2001
From: Samuel Venable <[EMAIL REDACTED]>
Date: Sun, 27 Nov 2022 21:19:41 -0500
Subject: [PATCH] [skip ci] Solaris getexecname() returns argv[0]
`argv[0]`/`getexexname()` are not always absolute paths by default and can be modified to anything the developer wants them to be.
Consider using `readSymLink("/proc/self/path/a.out")` instead and `getexecname()` as the fallback, since the symlink will always be the correct absolute path (unless /proc is ot mounted, but it is by default on Solaris and Illumos platforms).
---
src/filesystem/unix/SDL_sysfilesystem.c | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/src/filesystem/unix/SDL_sysfilesystem.c b/src/filesystem/unix/SDL_sysfilesystem.c
index 3e8fd9f49f7d..0c0505cd4de5 100644
--- a/src/filesystem/unix/SDL_sysfilesystem.c
+++ b/src/filesystem/unix/SDL_sysfilesystem.c
@@ -199,16 +199,6 @@ SDL_GetBasePath(void)
SDL_free(cmdline);
}
#endif
-#if defined(__SOLARIS__)
- const char *path = getexecname();
- if ((path != NULL) && (path[0] == '/')) { /* must be absolute path... */
- retval = SDL_strdup(path);
- if (retval == NULL) {
- SDL_OutOfMemory();
- return NULL;
- }
- }
-#endif
/* is a Linux-style /proc filesystem available? */
if (retval == NULL && (access("/proc", F_OK) == 0)) {
@@ -219,6 +209,8 @@ SDL_GetBasePath(void)
retval = readSymLink("/proc/curproc/file");
#elif defined(__NETBSD__)
retval = readSymLink("/proc/curproc/exe");
+#elif defined(__SOLARIS__)
+ retval = readSymLink("/proc/self/path/a.out");
#else
retval = readSymLink("/proc/self/exe"); /* linux. */
if (retval == NULL) {
@@ -233,7 +225,18 @@ SDL_GetBasePath(void)
}
#endif
}
-
+#if defined(__SOLARIS__)
+ else {
+ const char *path = getexecname();
+ if ((path != NULL) && (path[0] == '/')) { /* must be absolute path... */
+ retval = SDL_strdup(path);
+ if (retval == NULL) {
+ SDL_OutOfMemory();
+ return NULL;
+ }
+ }
+ }
+#endif
/* If we had access to argv[0] here, we could check it for a path,
or troll through $PATH looking for it, too. */