Get rid of compilation errors on macOS
Vladimir Kobal committed
Dec 21, 2016 at 09:13 UTC
c7e01729efcae75eecec10bc1468bdaee582b087
8 files changed
+45
-15
configure.ac
+3
@@ -44,6 +44,9 @@ case "$host_os" in
44
freebsd*)
45
build_target=freebsd
46
;;
47
+darwin*)
48
+ build_target=freebsd
49
+ ;;
50
*)
51
;;
52
esac
src/common.c
+10
-3
@@ -1,9 +1,12 @@
1
#include "common.h"
2
3
-#ifdef __FreeBSD__
3
+#ifdef __APPLE__
4
+#define INHERIT_NONE 0
5
+#endif /* __APPLE__ */
6
+#if defined(__FreeBSD__) || defined(__APPLE__)
7
# define O_NOATIME 0
8
# define MADV_DONTFORK INHERIT_NONE
6
-#endif /* __FreeBSD__ */
9
+#endif /* __FreeBSD__ || __APPLE__*/
10
11
char *global_host_prefix = "";
12
int enable_ksm = 1;
@@ -1027,9 +1030,13 @@ int fd_is_valid(int fd) {
1030
pid_t gettid(void) {
1031
#ifdef __FreeBSD__
1032
return (pid_t)pthread_getthreadid_np();
1033
+#elif defined(__APPLE__)
1034
+ uint64_t curthreadid;
1035
+ pthread_threadid_np(NULL, &curthreadid);
1036
+ return (pid_t)curthreadid;
1037
#else
1038
return (pid_t)syscall(SYS_gettid);
1032
-#endif /* __FreeBSD__ */
1039
+#endif /* __FreeBSD__, __APPLE__*/
1040
}
1041
1042
char *fgets_trim_len(char *buf, size_t buf_size, FILE *fp, size_t *len) {
src/common.h
+6
-6
@@ -20,9 +20,9 @@
20
21
#else /* !defined(ENABLE_JEMALLOC) && !defined(ENABLE_TCMALLOC) */
22
23
-#ifndef __FreeBSD__
23
+#if !(defined(__FreeBSD__) || defined(__APPLE__))
24
#include <malloc.h>
25
-#endif /* __FreeBSD__ */
25
+#endif /* __FreeBSD__ || __APPLE__ */
26
27
#endif
28
@@ -54,9 +54,9 @@
54
#include <signal.h>
55
#include <syslog.h>
56
#include <sys/mman.h>
57
-#ifndef __FreeBSD__
57
+#if !(defined(__FreeBSD__) || defined(__APPLE__))
58
#include <sys/prctl.h>
59
-#endif /* __FreeBSD__ */
59
+#endif /* __FreeBSD__ || __APPLE__*/
60
#include <sys/resource.h>
61
#include <sys/socket.h>
62
#include <sys/stat.h>
@@ -116,11 +116,11 @@
116
#include "plugin_checks.h"
117
#include "plugin_idlejitter.h"
118
#include "plugin_nfacct.h"
119
-#ifndef __FreeBSD__
119
+#if !(defined(__FreeBSD__) || defined(__APPLE__))
120
#include "plugin_proc.h"
121
#else
122
#include "plugin_freebsd.h"
123
-#endif /* __FreeBSD__ */
123
+#endif /* __FreeBSD__ || __APPLE__*/
124
#include "plugin_tc.h"
125
#include "plugins_d.h"
126
src/daemon.c
+8
@@ -117,12 +117,20 @@ int become_user(const char *username, int pid_fd)
117
ngroups = 0;
118
}
119
120
+#ifdef __APPLE__
121
+ if(setregid(gid, gid) != 0) {
122
+#else
123
if(setresgid(gid, gid, gid) != 0) {
124
+#endif /* __APPLE__ */
125
error("Cannot switch to user's %s group (gid: %u).", username, gid);
126
return -1;
127
}
128
129
+#ifdef __APPLE__
130
+ if(setreuid(uid, uid) != 0) {
131
+#else
132
if(setresuid(uid, uid, uid) != 0) {
133
+#endif /* __APPLE__ */
134
error("Cannot switch to user %s (uid: %u).", username, uid);
135
return -1;
136
}
src/freebsd_sysctl.c
+6
@@ -1,5 +1,6 @@
1
#include "common.h"
2
3
+#ifndef __APPLE__
4
// NEEDED BY: struct vmtotal, struct vmmeter
5
#include <sys/vmmeter.h>
6
// NEEDED BY: struct devstat
@@ -18,6 +19,7 @@
19
#define _IFI_OQDROPS // It is for FreeNAS only. Most probably in future releases of FreeNAS it will be removed
20
#include <net/if.h>
21
#include <ifaddrs.h>
22
+#endif /* __APPLE__ */
23
// NEEDED BY: do_disk_io
24
#define RRD_TYPE_DISK "disk"
25
@@ -71,6 +73,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
73
static usec_t last_loadavg_usec = 0;
74
struct loadavg sysload;
75
76
+#ifndef __APPLE__
77
// NEEDED BY: do_cpu, do_cpu_cores
78
long cp_time[CPUSTATES];
79
@@ -177,6 +180,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
180
181
// --------------------------------------------------------------------
182
183
+#endif /* __APPLE__ */
184
if (last_loadavg_usec <= dt) {
185
if (likely(do_loadavg)) {
186
if (unlikely(GETSYSCTL("vm.loadavg", sysload))) {
@@ -203,6 +207,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
207
last_loadavg_usec = st->update_every * USEC_PER_SEC;
208
}
209
else last_loadavg_usec -= dt;
210
+#ifndef __APPLE__
211
212
// --------------------------------------------------------------------
213
@@ -1188,6 +1193,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
1193
freeifaddrs(ifap);
1194
}
1195
}
1196
+#endif /* __APPLE__ */
1197
1198
return 0;
1199
}
src/main.c
+6
-6
@@ -45,11 +45,11 @@ struct netdata_static_thread {
45
46
{"tc", "plugins", "tc", 1, NULL, NULL, tc_main},
47
{"idlejitter", "plugins", "idlejitter", 1, NULL, NULL, cpuidlejitter_main},
48
-#ifndef __FreeBSD__
48
+#if !(defined(__FreeBSD__) || defined(__APPLE__))
49
{"proc", "plugins", "proc", 1, NULL, NULL, proc_main},
50
#else
51
{"freebsd", "plugins", "freebsd", 1, NULL, NULL, freebsd_main},
52
-#endif /* __FreeBSD__ */
52
+#endif /* __FreeBSD__ || __APPLE__*/
53
{"cgroups", "plugins", "cgroups", 1, NULL, NULL, cgroups_main},
54
{"check", "plugins", "checks", 0, NULL, NULL, checks_main},
55
{"backends", NULL, NULL, 1, NULL, NULL, backends_main},
@@ -467,9 +467,9 @@ int main(int argc, char **argv)
467
if(setrlimit(RLIMIT_CORE, &rl) != 0)
468
error("Cannot request unlimited core dumps for debugging... Proceeding anyway...");
469
470
-#ifndef __FreeBSD__
470
+#if !(defined(__FreeBSD__) || defined(__APPLE__))
471
prctl(PR_SET_DUMPABLE, 1, 0, 0, 0);
472
-#endif /* __FreeBSD__ */
472
+#endif /* __FreeBSD__ || __APPLE__*/
473
}
474
475
// --------------------------------------------------------------------
@@ -644,9 +644,9 @@ int main(int argc, char **argv)
644
struct rlimit rl = { RLIM_INFINITY, RLIM_INFINITY };
645
if(setrlimit(RLIMIT_CORE, &rl) != 0)
646
error("Cannot request unlimited core dumps for debugging... Proceeding anyway...");
647
-#ifndef __FreeBSD__
647
+#if !(defined(__FreeBSD__) || defined(__APPLE__))
648
prctl(PR_SET_DUMPABLE, 1, 0, 0, 0);
649
-#endif /* __FreeBSD__ */
649
+#endif /* __FreeBSD__ || __APPLE__*/
650
}
651
#endif /* NETDATA_INTERNAL_CHECKS */
652
src/plugin_freebsd.h
+2
@@ -1,6 +1,8 @@
1
#ifndef NETDATA_PLUGIN_FREEBSD_H
2
#define NETDATA_PLUGIN_FREEBSD_H 1
3
4
+#include <sys/sysctl.h>
5
+
6
#define GETSYSCTL(name, var) getsysctl(name, &(var), sizeof(var))
7
8
void *freebsd_main(void *ptr);
src/web_client.c
+4
@@ -414,7 +414,11 @@ int mysendfile(struct web_client *w, char *filename)
414
w->wait_send = 0;
415
buffer_flush(w->response.data);
416
w->response.rlen = stat.st_size;
417
+#ifdef __APPLE__
418
+ w->response.data->date = stat.st_mtimespec.tv_sec;
419
+#else
420
w->response.data->date = stat.st_mtim.tv_sec;
421
+#endif /* __APPLE__ */
422
buffer_cacheable(w->response.data);
423
424
return 200;