提交 92c0e657 编写于 作者: J Juergen Lock 提交者: Blue Swirl

Use sysctl instead of /proc to find executable path on FreeBSD

..since /proc usually isn't mounted on FreeBSD.
Signed-off-by: NJuergen Lock <nox@jelal.kn-bremen.de>
Signed-off-by: NBlue Swirl <blauwirbel@gmail.com>
上级 2b5eb371
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
#include <libutil.h> #include <libutil.h>
#include <sys/sysctl.h>
#else #else
#include <util.h> #include <util.h>
#endif #endif
...@@ -2276,10 +2277,13 @@ static char *find_datadir(const char *argv0) ...@@ -2276,10 +2277,13 @@ static char *find_datadir(const char *argv0)
} }
#elif defined(__FreeBSD__) #elif defined(__FreeBSD__)
{ {
int len; static int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
len = readlink("/proc/curproc/file", buf, sizeof(buf) - 1); size_t len = sizeof(buf) - 1;
if (len > 0) {
buf[len] = 0; *buf = '\0';
if (!sysctl(mib, sizeof(mib)/sizeof(*mib), buf, &len, NULL, 0) &&
*buf) {
buf[sizeof(buf) - 1] = '\0';
p = buf; p = buf;
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册