From 5daaa7da02793bdb0b5eff9a87994f23f39a9b72 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sat, 24 Sep 2005 15:42:02 +0000 Subject: [PATCH] Hopefully gruikly ported to BSD --- src/probe.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/src/probe.c b/src/probe.c index 8f4e08f..2739db5 100644 --- a/src/probe.c +++ b/src/probe.c @@ -3,18 +3,59 @@ #include -#include #include +#ifdef LINUX +# include +#endif +#ifdef BSD +# include +# include +#endif #define PROBE_REFRESH 5 /* globals */ +static int _probe_error(char * message, int ret); +#ifdef BSD +struct sysinfo +{ + long uptime; + unsigned long loads[3]; +}; + +static int sysinfo(struct sysinfo * info) +{ + struct timeval tv; + struct loadavg la; + int mib[2]; + + mib[0] = CTL_KERN; + mib[1] = KERN_BOOTTIME; + if(sysctl(mib, 2, &tv, NULL, NULL, 0) != sizeof(tv)) + info->uptime = _probe_error("kern.boottime", 0); + else + info->uptime = tv.tv_sec; + /* FIXME getloadavg() looks portable */ + mib[0] = CTL_VM; + mib[1] = KERN_BOOTTIME; + if(sysctl(mib, 2, &la, NULL, NULL, 0) != sizeof(la)) + { + memset(info->loads, 0, sizeof(info->loads)); + _probe_error("vm.boottime", 0); + } + else + { + info->loads[0] = la.ldavg[0]; + info->loads[1] = la.ldavg[1]; + info->loads[2] = la.ldavg[2]; + } +} +#endif struct sysinfo info; /* Probe */ -static int _probe_error(char * message, int ret); static int _probe_timeout(struct sysinfo * info); static int _probe(void) {