Mesa (main): util: make util_get_process_exec_path work on FreeBSD w/o procfs
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Oct 29 06:32:27 UTC 2021
Module: Mesa
Branch: main
Commit: 98dbd01a96fd1d715794c0fe8ad82392882a8129
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=98dbd01a96fd1d715794c0fe8ad82392882a8129
Author: Greg V <greg at unrelenting.technology>
Date: Thu Apr 9 01:41:00 2020 +0300
util: make util_get_process_exec_path work on FreeBSD w/o procfs
sysctl is the correct way of getting the current executable's path.
procfs is not mounted by default.
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Eric Engestrom <eric at engestrom.ch>
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/1598>
---
src/util/u_process.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/util/u_process.c b/src/util/u_process.c
index af808c7b196..2965e46a436 100644
--- a/src/util/u_process.c
+++ b/src/util/u_process.c
@@ -44,6 +44,11 @@
#include <mach-o/dyld.h>
#endif
+#if DETECT_OS_FREEBSD
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#endif
+
#if defined(__linux__) && defined(HAVE_PROGRAM_INVOCATION_NAME)
static char *path = NULL;
@@ -202,6 +207,13 @@ util_get_process_exec_path(char* process_path, size_t len)
int result = _NSGetExecutablePath(process_path, &bufSize);
return (result == 0) ? strlen(process_path) : 0;
+#elif DETECT_OS_FREEBSD
+ int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 };
+
+ (void) sysctl(mib, 4, process_path, &len, NULL, 0);
+ process_path[len - 1] = '\0';
+
+ return len;
#elif DETECT_OS_UNIX
ssize_t r;
More information about the mesa-commit
mailing list