X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fprint_cpu_usage.c;h=2c59f69277ffc0452f62f2498cda0c7c093efa22;hb=c9dc67e0542a0f540b014e8b2607bfc269433951;hp=ecc81a2e50c9fcd9a716625ba30d26b94e178514;hpb=0eeded8bc013857a5e8a2efbc20002a22502897e;p=i3%2Fi3status diff --git a/src/print_cpu_usage.c b/src/print_cpu_usage.c index ecc81a2..2c59f69 100644 --- a/src/print_cpu_usage.c +++ b/src/print_cpu_usage.c @@ -1,4 +1,4 @@ -// vim:sw=8:sts=8:ts=8:expandtab +// vim:ts=4:sw=4:expandtab #include #include #include @@ -20,10 +20,17 @@ #include #endif +#if defined(__NetBSD__) +#include +#include +#include +#include +#endif + #include "i3status.h" static int prev_total = 0; -static int prev_idle = 0; +static int prev_idle = 0; /* * Reads the CPU utilization from /proc/stat and returns the usage as a @@ -31,74 +38,74 @@ static int prev_idle = 0; * */ void print_cpu_usage(yajl_gen json_gen, char *buffer, const char *format) { - const char *walk; - char *outwalk = buffer; - char buf[1024]; - int curr_user = 0, curr_nice = 0, curr_system = 0, curr_idle = 0, curr_total; - int diff_idle, diff_total, diff_usage; + const char *walk; + char *outwalk = buffer; + int curr_user = 0, curr_nice = 0, curr_system = 0, curr_idle = 0, curr_total; + int diff_idle, diff_total, diff_usage; #if defined(LINUX) - static char statpath[512]; - strcpy(statpath, "/proc/stat"); - if (!slurp(statpath, buf, sizeof(buf)) || - sscanf(buf, "cpu %d %d %d %d", &curr_user, &curr_nice, &curr_system, &curr_idle) != 4) - goto error; + static char statpath[512]; + char buf[1024]; + strcpy(statpath, "/proc/stat"); + if (!slurp(statpath, buf, sizeof(buf)) || + sscanf(buf, "cpu %d %d %d %d", &curr_user, &curr_nice, &curr_system, &curr_idle) != 4) + goto error; - curr_total = curr_user + curr_nice + curr_system + curr_idle; - diff_idle = curr_idle - prev_idle; - diff_total = curr_total - prev_total; - diff_usage = (diff_total ? (1000 * (diff_total - diff_idle)/diff_total + 5)/10 : 0); - prev_total = curr_total; - prev_idle = curr_idle; -#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) + curr_total = curr_user + curr_nice + curr_system + curr_idle; + diff_idle = curr_idle - prev_idle; + diff_total = curr_total - prev_total; + diff_usage = (diff_total ? (1000 * (diff_total - diff_idle) / diff_total + 5) / 10 : 0); + prev_total = curr_total; + prev_idle = curr_idle; +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) -#if defined(__FreeBSD__) || defined(__DragonFly__) - size_t size; - long cp_time[CPUSTATES]; - size = sizeof cp_time; - if (sysctlbyname("kern.cp_time", &cp_time, &size, NULL, 0) < 0) - goto error; +#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) + size_t size; + long cp_time[CPUSTATES]; + size = sizeof cp_time; + if (sysctlbyname("kern.cp_time", &cp_time, &size, NULL, 0) < 0) + goto error; #else - /* This information is taken from the boot cpu, any other cpus are currently ignored. */ - long cp_time[CPUSTATES]; - int mib[2]; - size_t size = sizeof(cp_time); + /* This information is taken from the boot cpu, any other cpus are currently ignored. */ + long cp_time[CPUSTATES]; + int mib[2]; + size_t size = sizeof(cp_time); - mib[0] = CTL_KERN; - mib[1] = KERN_CPTIME; + mib[0] = CTL_KERN; + mib[1] = KERN_CPTIME; - if (sysctl(mib, 2, cp_time, &size, NULL, 0)) - goto error; + if (sysctl(mib, 2, cp_time, &size, NULL, 0)) + goto error; #endif - curr_user = cp_time[CP_USER]; - curr_nice = cp_time[CP_NICE]; - curr_system = cp_time[CP_SYS]; - curr_idle = cp_time[CP_IDLE]; - curr_total = curr_user + curr_nice + curr_system + curr_idle; - diff_idle = curr_idle - prev_idle; - diff_total = curr_total - prev_total; - diff_usage = (diff_total ? (1000 * (diff_total - diff_idle)/diff_total + 5)/10 : 0); - prev_total = curr_total; - prev_idle = curr_idle; + curr_user = cp_time[CP_USER]; + curr_nice = cp_time[CP_NICE]; + curr_system = cp_time[CP_SYS]; + curr_idle = cp_time[CP_IDLE]; + curr_total = curr_user + curr_nice + curr_system + curr_idle; + diff_idle = curr_idle - prev_idle; + diff_total = curr_total - prev_total; + diff_usage = (diff_total ? (1000 * (diff_total - diff_idle) / diff_total + 5) / 10 : 0); + prev_total = curr_total; + prev_idle = curr_idle; #else - goto error; + goto error; #endif - for (walk = format; *walk != '\0'; walk++) { - if (*walk != '%') { - *(outwalk++) = *walk; - continue; - } + for (walk = format; *walk != '\0'; walk++) { + if (*walk != '%') { + *(outwalk++) = *walk; + continue; + } - if (strncmp(walk+1, "usage", strlen("usage")) == 0) { - outwalk += sprintf(outwalk, "%02d%%", diff_usage); - walk += strlen("usage"); - } + if (BEGINS_WITH(walk + 1, "usage")) { + outwalk += sprintf(outwalk, "%02d%%", diff_usage); + walk += strlen("usage"); } + } - OUTPUT_FULL_TEXT(buffer); - return; + OUTPUT_FULL_TEXT(buffer); + return; error: - OUTPUT_FULL_TEXT("cant read cpu usage"); - (void)fputs("i3status: Cannot read CPU usage\n", stderr); + OUTPUT_FULL_TEXT("cant read cpu usage"); + (void)fputs("i3status: Cannot read CPU usage\n", stderr); }