From: Michael Stapelberg Date: Tue, 21 Jul 2009 22:09:32 +0000 (+0200) Subject: Use getloadavg() instead of using /proc, patch by Baptiste Daroussin X-Git-Tag: 2.0~52 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=bb50e22fd3ad82381dbf750a790b8380a1a1bba5;p=i3%2Fi3status Use getloadavg() instead of using /proc, patch by Baptiste Daroussin --- diff --git a/src/get_load.c b/src/get_load.c index 4f82813..4f04b94 100644 --- a/src/get_load.c +++ b/src/get_load.c @@ -1,25 +1,21 @@ // vim:ts=8:expandtab #include "i3status.h" +#include +#include +#include +#include const char *get_load() { static char part[512]; /* Get load */ -#ifdef LINUX - slurp("/proc/loadavg", part, sizeof(part)); - *skip_character(part, ' ', 3) = '\0'; +#if defined(__FreeBSD__) || defined(linux) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE__) || defined(sun) + double loadavg[3]; + if (getloadavg(loadavg, 3) == -1) + errx(-1, "getloadavg() failed\n"); + (void)snprintf(part, sizeof(part), "%1.2f %1.2f %1.2f", loadavg[0], loadavg[1], loadavg[2]); #else - /* TODO: correctly check for NetBSD, check if it works the same on *BSD */ - struct loadavg load; - size_t length = sizeof(struct loadavg); - int mib[2] = { CTL_VM, VM_LOADAVG }; - if (sysctl(mib, 2, &load, &length, NULL, 0) < 0) - die("Could not sysctl({ CTL_VM, VM_LOADAVG })\n"); - double scale = load.fscale; - (void)snprintf(part, sizeof(part), "%.02f %.02f %.02f", - (double)load.ldavg[0] / scale, - (double)load.ldavg[1] / scale, - (double)load.ldavg[2] / scale); + part[0] = '\0'; #endif return part;