]> arthur.barton.de Git - netdata.git/commitdiff
Get rid of compilation errors on macOS
authorVladimir Kobal <vlad@prokk.net>
Wed, 21 Dec 2016 14:13:44 +0000 (09:13 -0500)
committerVladimir Kobal <vlad@prokk.net>
Wed, 21 Dec 2016 14:52:43 +0000 (09:52 -0500)
configure.ac
src/common.c
src/common.h
src/daemon.c
src/freebsd_sysctl.c
src/main.c
src/plugin_freebsd.h
src/web_client.c

index f5dcf4dfdc5f85f7e22a4cb45b1742b6ce5359b0..619d68c7b5c6ffbf2c0df6d41fdb164930fe4212 100644 (file)
@@ -44,6 +44,9 @@ case "$host_os" in
 freebsd*)
        build_target=freebsd
        ;;
+darwin*)
+       build_target=freebsd
+       ;;
 *)
        ;;
 esac
index 78e5896e98babc1ef91f67630256a2128ce7d6d4..36fa0c9be53468ff5cea44affbf86149da8b4422 100644 (file)
@@ -1,9 +1,12 @@
 #include "common.h"
 
-#ifdef __FreeBSD__
+#ifdef __APPLE__
+#define INHERIT_NONE 0
+#endif /* __APPLE__ */
+#if defined(__FreeBSD__) || defined(__APPLE__)
 #    define O_NOATIME     0
 #    define MADV_DONTFORK INHERIT_NONE
-#endif /* __FreeBSD__ */
+#endif /* __FreeBSD__ || __APPLE__*/
 
 char *global_host_prefix = "";
 int enable_ksm = 1;
@@ -1027,9 +1030,13 @@ int fd_is_valid(int fd) {
 pid_t gettid(void) {
 #ifdef __FreeBSD__
     return (pid_t)pthread_getthreadid_np();
+#elif defined(__APPLE__)
+    uint64_t curthreadid;
+    pthread_threadid_np(NULL, &curthreadid);
+    return (pid_t)curthreadid;
 #else
     return (pid_t)syscall(SYS_gettid);
-#endif /* __FreeBSD__ */
+#endif /* __FreeBSD__, __APPLE__*/
 }
 
 char *fgets_trim_len(char *buf, size_t buf_size, FILE *fp, size_t *len) {
index c92c0496b3ad89bd78e218ab3a80ac5a17893c27..9821a925f644b3b9fb63d3cf065ed3e5c3228263 100644 (file)
@@ -20,9 +20,9 @@
 
 #else /* !defined(ENABLE_JEMALLOC) && !defined(ENABLE_TCMALLOC) */
 
-#ifndef __FreeBSD__
+#if !(defined(__FreeBSD__) || defined(__APPLE__))
 #include <malloc.h>
-#endif /* __FreeBSD__ */
+#endif /* __FreeBSD__ || __APPLE__ */
 
 #endif
 
@@ -54,9 +54,9 @@
 #include <signal.h>
 #include <syslog.h>
 #include <sys/mman.h>
-#ifndef __FreeBSD__
+#if !(defined(__FreeBSD__) || defined(__APPLE__))
 #include <sys/prctl.h>
-#endif /* __FreeBSD__ */
+#endif /* __FreeBSD__ || __APPLE__*/
 #include <sys/resource.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
 #include "plugin_checks.h"
 #include "plugin_idlejitter.h"
 #include "plugin_nfacct.h"
-#ifndef __FreeBSD__
+#if !(defined(__FreeBSD__) || defined(__APPLE__))
 #include "plugin_proc.h"
 #else
 #include "plugin_freebsd.h"
-#endif /* __FreeBSD__ */
+#endif /* __FreeBSD__ || __APPLE__*/
 #include "plugin_tc.h"
 #include "plugins_d.h"
 
index c63634f060d5b8b09b76bac6fe698c0fe6acc7c6..4fd8ca5e5984b1e32c14730bb3f7ca3e35644daf 100644 (file)
@@ -117,12 +117,20 @@ int become_user(const char *username, int pid_fd)
         ngroups = 0;
     }
 
+#ifdef __APPLE__
+    if(setregid(gid, gid) != 0) {
+#else
     if(setresgid(gid, gid, gid) != 0) {
+#endif /* __APPLE__ */
         error("Cannot switch to user's %s group (gid: %u).", username, gid);
         return -1;
     }
 
+#ifdef __APPLE__
+    if(setreuid(uid, uid) != 0) {
+#else
     if(setresuid(uid, uid, uid) != 0) {
+#endif /* __APPLE__ */
         error("Cannot switch to user %s (uid: %u).", username, uid);
         return -1;
     }
index da85b838331a862aaca5a4ffbb614d9b796e6940..30768ffa72243f981872bce2711abf7cce29ca07 100644 (file)
@@ -1,5 +1,6 @@
 #include "common.h"
 
+#ifndef __APPLE__
 // NEEDED BY: struct vmtotal, struct vmmeter
 #include <sys/vmmeter.h>
 // NEEDED BY: struct devstat
@@ -18,6 +19,7 @@
 #define _IFI_OQDROPS // It is for FreeNAS only. Most probably in future releases of FreeNAS it will be removed
 #include <net/if.h>
 #include <ifaddrs.h>
+#endif /* __APPLE__ */
 // NEEDED BY: do_disk_io
 #define RRD_TYPE_DISK "disk"
 
@@ -71,6 +73,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
     static usec_t last_loadavg_usec = 0;
     struct loadavg sysload;
 
+#ifndef __APPLE__
     // NEEDED BY: do_cpu, do_cpu_cores
     long cp_time[CPUSTATES];
 
@@ -177,6 +180,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
 
     // --------------------------------------------------------------------
 
+#endif /* __APPLE__ */
     if (last_loadavg_usec <= dt) {
         if (likely(do_loadavg)) {
             if (unlikely(GETSYSCTL("vm.loadavg", sysload))) {
@@ -203,6 +207,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
         last_loadavg_usec = st->update_every * USEC_PER_SEC;
     }
     else last_loadavg_usec -= dt;
+#ifndef __APPLE__
 
     // --------------------------------------------------------------------
 
@@ -1188,6 +1193,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
             freeifaddrs(ifap);
         }
     }
+#endif /* __APPLE__ */
 
     return 0;
 }
index b9ab4ef316148e57edb29dfbe514cd6de0e05a7c..ab651a7735169cdd38e0ecd201761909b20348e1 100644 (file)
@@ -45,11 +45,11 @@ struct netdata_static_thread {
 
     {"tc",                 "plugins",   "tc",         1, NULL, NULL, tc_main},
     {"idlejitter",         "plugins",   "idlejitter", 1, NULL, NULL, cpuidlejitter_main},
-#ifndef __FreeBSD__
+#if !(defined(__FreeBSD__) || defined(__APPLE__))
     {"proc",               "plugins",   "proc",       1, NULL, NULL, proc_main},
 #else
     {"freebsd",            "plugins",   "freebsd",    1, NULL, NULL, freebsd_main},
-#endif /* __FreeBSD__ */
+#endif /* __FreeBSD__ || __APPLE__*/
     {"cgroups",            "plugins",   "cgroups",    1, NULL, NULL, cgroups_main},
     {"check",              "plugins",   "checks",     0, NULL, NULL, checks_main},
     {"backends",            NULL,       NULL,         1, NULL, NULL, backends_main},
@@ -467,9 +467,9 @@ int main(int argc, char **argv)
             if(setrlimit(RLIMIT_CORE, &rl) != 0)
                 error("Cannot request unlimited core dumps for debugging... Proceeding anyway...");
 
-#ifndef __FreeBSD__
+#if !(defined(__FreeBSD__) || defined(__APPLE__))
             prctl(PR_SET_DUMPABLE, 1, 0, 0, 0);
-#endif /* __FreeBSD__ */
+#endif /* __FreeBSD__ || __APPLE__*/
         }
 
         // --------------------------------------------------------------------
@@ -644,9 +644,9 @@ int main(int argc, char **argv)
         struct rlimit rl = { RLIM_INFINITY, RLIM_INFINITY };
         if(setrlimit(RLIMIT_CORE, &rl) != 0)
             error("Cannot request unlimited core dumps for debugging... Proceeding anyway...");
-#ifndef __FreeBSD__
+#if !(defined(__FreeBSD__) || defined(__APPLE__))
         prctl(PR_SET_DUMPABLE, 1, 0, 0, 0);
-#endif /* __FreeBSD__ */
+#endif /* __FreeBSD__ || __APPLE__*/
     }
 #endif /* NETDATA_INTERNAL_CHECKS */
 
index 4ae1a4c21831e7b8ba7f291c6794dbb2190d8d5a..e4767a091310399a39eeade063c6d446e501ad75 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef NETDATA_PLUGIN_FREEBSD_H
 #define NETDATA_PLUGIN_FREEBSD_H 1
 
+#include <sys/sysctl.h>
+
 #define GETSYSCTL(name, var) getsysctl(name, &(var), sizeof(var))
 
 void *freebsd_main(void *ptr);
index 2d2e84f93c67b80e5063a86e7fa881a6adeb5acf..f6cb4c68d2cccfda3c9e0addaa56246f98bc89c0 100644 (file)
@@ -414,7 +414,11 @@ int mysendfile(struct web_client *w, char *filename)
     w->wait_send = 0;
     buffer_flush(w->response.data);
     w->response.rlen = stat.st_size;
+#ifdef __APPLE__
+    w->response.data->date = stat.st_mtimespec.tv_sec;
+#else
     w->response.data->date = stat.st_mtim.tv_sec;
+#endif /* __APPLE__ */
     buffer_cacheable(w->response.data);
 
     return 200;