Browse Source

chore: GetApplicationDirectory definition for FreeBSD (#4318)

base 11 months ago
parent
commit
d02fcc5262
1 changed files with 26 additions and 0 deletions
  1. 26 0
      src/rcore.c

+ 26 - 0
src/rcore.c

@@ -165,6 +165,10 @@ unsigned int __stdcall timeBeginPeriod(unsigned int uPeriod);
 unsigned int __stdcall timeEndPeriod(unsigned int uPeriod);
 unsigned int __stdcall timeEndPeriod(unsigned int uPeriod);
 #elif defined(__linux__)
 #elif defined(__linux__)
     #include <unistd.h>
     #include <unistd.h>
+#elif defined(__FreeBSD__)
+    #include <sys/types.h>
+    #include <sys/sysctl.h>
+    #include <unistd.h>
 #elif defined(__APPLE__)
 #elif defined(__APPLE__)
     #include <sys/syslimits.h>
     #include <sys/syslimits.h>
     #include <mach-o/dyld.h>
     #include <mach-o/dyld.h>
@@ -2161,6 +2165,28 @@ const char *GetApplicationDirectory(void)
         appDir[0] = '.';
         appDir[0] = '.';
         appDir[1] = '/';
         appDir[1] = '/';
     }
     }
+#elif defined(__FreeBSD__)
+    size_t size = sizeof(appDir);
+    int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
+
+    if (sysctl(mib, 4, appDir, &size, NULL, 0) == 0)
+    {
+        int len = strlen(appDir);
+        for (int i = len; i >= 0; --i)
+        {
+            if (appDir[i] == '/')
+            {
+                appDir[i + 1] = '\0';
+                break;
+            }
+        }
+    }
+    else
+    {
+        appDir[0] = '.';
+        appDir[1] = '/';
+    }
+
 #endif
 #endif
 
 
     return appDir;
     return appDir;