master ohmu/fastfetch-openbsd / src / detection / loadavg / loadavg_bsd.c
ohmu  ·  2026-10-15
 1#include "detection/loadavg/loadavg.h"
 2#include "common/debug.h"
 3
 4#include <errno.h>
 5#include <string.h>
 6#include <sys/sysctl.h>
 7
 8#if __FreeBSD__ || __OpenBSD__ || __NetBSD__
 9    #include <sys/types.h>
10    #include <sys/resource.h>
11    #if __FreeBSD__
12        #include <vm/vm_param.h>
13    #endif
14#endif
15
16const char* ffDetectLoadavg(double result[3]) {
17    struct loadavg load;
18    size_t size = sizeof(load);
19    if (sysctl((int[]) { CTL_VM, VM_LOADAVG }, 2, &load, &size, nullptr, 0) < 0) {
20        FF_DEBUG("sysctl({CTL_VM, VM_LOADAVG}) failed: %s", strerror(errno));
21        return "sysctl({CTL_VM, VM_LOADAVG}) failed";
22    }
23    for (int i = 0; i < 3; i++) {
24        result[i] = (double) load.ldavg[i] / (double) load.fscale;
25    }
26    return nullptr;
27}