Add FreeBSD support to os.cpp
This commit is contained in:
parent
24e54799fd
commit
9a541c1214
26
src/os.cpp
26
src/os.cpp
|
@ -50,10 +50,13 @@ typedef SSIZE_T ssize_t;
|
|||
|
||||
#endif
|
||||
|
||||
#if defined(ZIG_OS_LINUX)
|
||||
#if defined(ZIG_OS_LINUX) || defined(ZIG_OS_FREEBSD)
|
||||
#include <link.h>
|
||||
#endif
|
||||
|
||||
#if defined(ZIG_OS_FREEBSD)
|
||||
#include <sys/sysctl.h>
|
||||
#endif
|
||||
|
||||
#if defined(__MACH__)
|
||||
#include <mach/clock.h>
|
||||
|
@ -75,7 +78,9 @@ static clock_serv_t cclock;
|
|||
#if defined(__APPLE__) && !defined(environ)
|
||||
#include <crt_externs.h>
|
||||
#define environ (*_NSGetEnviron())
|
||||
#endif
|
||||
#elif defined(ZIG_OS_FREEBSD)
|
||||
extern char **environ;
|
||||
#endif
|
||||
|
||||
#if defined(ZIG_OS_POSIX)
|
||||
static void populate_termination(Termination *term, int status) {
|
||||
|
@ -1442,6 +1447,15 @@ Error os_self_exe_path(Buf *out_path) {
|
|||
}
|
||||
buf_resize(out_path, amt);
|
||||
return ErrorNone;
|
||||
#elif defined(ZIG_OS_FREEBSD)
|
||||
buf_resize(out_path, PATH_MAX);
|
||||
int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 };
|
||||
size_t cb = PATH_MAX;
|
||||
if (sysctl(mib, 4, buf_ptr(out_path), &cb, nullptr, 0) != 0) {
|
||||
return ErrorUnexpected;
|
||||
}
|
||||
buf_resize(out_path, cb);
|
||||
return ErrorNone;
|
||||
#endif
|
||||
return ErrorFileNotFound;
|
||||
}
|
||||
|
@ -1747,7 +1761,7 @@ Error os_get_app_data_dir(Buf *out_path, const char *appname) {
|
|||
buf_resize(out_path, 0);
|
||||
buf_appendf(out_path, "%s/Library/Application Support/%s", home_dir, appname);
|
||||
return ErrorNone;
|
||||
#elif defined(ZIG_OS_LINUX)
|
||||
#elif defined(ZIG_OS_POSIX)
|
||||
const char *home_dir = getenv("HOME");
|
||||
if (home_dir == nullptr) {
|
||||
// TODO use /etc/passwd
|
||||
|
@ -1760,7 +1774,7 @@ Error os_get_app_data_dir(Buf *out_path, const char *appname) {
|
|||
}
|
||||
|
||||
|
||||
#if defined(ZIG_OS_LINUX)
|
||||
#if defined(ZIG_OS_LINUX) || defined(ZIG_OS_FREEBSD)
|
||||
static int self_exe_shared_libs_callback(struct dl_phdr_info *info, size_t size, void *data) {
|
||||
ZigList<Buf *> *libs = reinterpret_cast< ZigList<Buf *> *>(data);
|
||||
if (info->dlpi_name[0] == '/') {
|
||||
|
@ -1771,7 +1785,7 @@ static int self_exe_shared_libs_callback(struct dl_phdr_info *info, size_t size,
|
|||
#endif
|
||||
|
||||
Error os_self_exe_shared_libs(ZigList<Buf *> &paths) {
|
||||
#if defined(ZIG_OS_LINUX)
|
||||
#if defined(ZIG_OS_LINUX) || defined(ZIG_OS_FREEBSD)
|
||||
paths.resize(0);
|
||||
dl_iterate_phdr(self_exe_shared_libs_callback, &paths);
|
||||
return ErrorNone;
|
||||
|
@ -1940,7 +1954,7 @@ Error os_file_mtime(OsFile file, OsTimeStamp *mtime) {
|
|||
mtime->sec = (((ULONGLONG) last_write_time.dwHighDateTime) << 32) + last_write_time.dwLowDateTime;
|
||||
mtime->nsec = 0;
|
||||
return ErrorNone;
|
||||
#elif defined(ZIG_OS_LINUX)
|
||||
#elif defined(ZIG_OS_LINUX) || defined(ZIG_OS_FREEBSD)
|
||||
struct stat statbuf;
|
||||
if (fstat(file, &statbuf) == -1)
|
||||
return ErrorFileSystem;
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
#define ZIG_OS_WINDOWS
|
||||
#elif defined(__linux__)
|
||||
#define ZIG_OS_LINUX
|
||||
#elif defined(__FreeBSD__)
|
||||
#define ZIG_OS_FREEBSD
|
||||
#else
|
||||
#define ZIG_OS_UNKNOWN
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue
Block a user