From ae37dbd8f0b53d34ae9f9b86995a23ad55a65b55 Mon Sep 17 00:00:00 2001
From: DarkGod <darkgod@net-core.org>
Date: Wed, 8 Mar 2017 17:52:30 +0100
Subject: [PATCH] BSD improvments

---
 src/getself.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/getself.c b/src/getself.c
index 88e3ab4d52..3197d94b0a 100644
--- a/src/getself.c
+++ b/src/getself.c
@@ -42,12 +42,18 @@ int get_number_cpus()
 #elif defined(SELFEXE_BSD)
 #include <limits.h>
 #include <stdlib.h>
+#include <unistd.h>
+#include <sys/sysctl.h>
 const char *get_self_executable(int argc, char **argv)
 {
 	static char res[PATH_MAX];
-	// Like linux, but /proc is not always mounted
-	//  return 0 if it's not
-	if (realpath("/proc/curproc/file", res)) return NULL;
+	int mib[4];
+	mib[0] = CTL_KERN;
+	mib[1] = KERN_PROC;
+	mib[2] = KERN_PROC_PATHNAME;
+	mib[3] = -1;
+	size_t cb = sizeof(res);
+	sysctl(mib,4,res,&cb,NULL,0);
 	return res;
 }
 
@@ -55,11 +61,7 @@ const char *get_self_executable(int argc, char **argv)
 
 int get_number_cpus()
 {
-	int count;
-	size_t size=sizeof(count);
-	
-	if (sysctlbyname("hw.ncpu",&count,&size,NULL,0)) return 1;
-	return count;
+       return sysconf(_SC_NPROCESSORS_ONLN);
 }
 
 #elif defined(SELFEXE_WINDOWS)
-- 
GitLab