Преглед изворни кода

fs: Use getexecpath() on OpenBSD for GetExePath().

Brad Smith пре 2 недеља
родитељ
комит
b7606be372
2 измењених фајлова са 11 додато и 0 уклоњено
  1. 1 0
      CMakeLists.txt
  2. 10 0
      src/filesystem/unix/SDL_sysfilesystem.c

+ 1 - 0
CMakeLists.txt

@@ -1225,6 +1225,7 @@ if(SDL_LIBC)
 
   if(NOT WINDOWS)
     check_symbol_exists(fdatasync "unistd.h" HAVE_FDATASYNC)
+    check_symbol_exists(getexecpath "unistd.h" HAVE_GETEXECPATH)
     check_symbol_exists(gethostname "unistd.h" HAVE_GETHOSTNAME)
     check_symbol_exists(getpagesize "unistd.h" HAVE_GETPAGESIZE)
     check_symbol_exists(getresgid "unistd.h" HAVE_GETRESGID)

+ 10 - 0
src/filesystem/unix/SDL_sysfilesystem.c

@@ -138,6 +138,15 @@ static char *GetExePath(void)
     }
 #endif
 #ifdef SDL_PLATFORM_OPENBSD
+#ifdef HAVE_GETEXECPATH
+    char fullpath[PATH_MAX];
+    if (getexecpath(fullpath, sizeof(fullpath)) == 0) {
+        result = SDL_strdup(fullpath);
+        if (!result) {
+            return NULL;
+        }
+    }
+#else
     // Please note that this will fail if the process was launched with a relative path and $PWD + the cwd have changed, or argv is altered. So don't do that. Or add a new sysctl to OpenBSD.
     char **cmdline;
     size_t len;
@@ -193,6 +202,7 @@ static char *GetExePath(void)
 
         SDL_free(cmdline);
     }
+#endif
 #endif
 
     // is a Linux-style /proc filesystem available?