dwmstatus

dwmstatus fork with some Raspberry Pi workaround additions.
git clone git://bsandro.tech/dwmstatus
Log | Files | Refs | LICENSE

commit 1a22e74299cee75b85e00b509f319f83d9e08c2e
parent ae8a1ff1c171ecf0518321edaed3568e5cd9b8b2
Author: bsandro <email@bsandro.tech>
Date:   Sun, 20 Jul 2025 12:54:49 +0300

netbsd mem usage fix

Diffstat:
Mdwmstatus.c | 67+++++++++++++++++++++++++++----------------------------------------
1 file changed, 27 insertions(+), 40 deletions(-)

diff --git a/dwmstatus.c b/dwmstatus.c @@ -14,7 +14,8 @@ #include <time.h> #include <sys/types.h> #include <sys/wait.h> - +#include <sys/sysctl.h> +#include <uvm/uvm_extern.h> #include <X11/Xlib.h> char *tzcyprus = "Asia/Nicosia"; @@ -111,7 +112,8 @@ readfile(char *base, char *file) return smprintf("%s", line); } -char *get_cpu() +char * +get_cpu() { static char status[128]; char buffer[256]; @@ -164,52 +166,37 @@ char *get_cpu() return status; } -char *get_mem() -{ - static char status[128]; - char buffer[256]; - FILE *mem_fp; - unsigned long memtotal, memfree, buffers, cached, meminuse = 0; - unsigned long swaptotal, swapfree, swapused = 0; - - mem_fp = fopen("/proc/meminfo", "r"); +#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a))) +#include <errno.h> - if (mem_fp == NULL) - return 0; +char * +get_mem() +{ + static char status[128] = ""; - while (!feof(mem_fp)) - { - if (fgets(buffer, 255, mem_fp) == NULL) - break; + static const int mib[] = {CTL_VM, VM_UVMEXP2}; + struct uvmexp_sysctl uvm; + size_t len = sizeof(uvm); + printf("len: %zu\n", len); - if (strncmp(buffer, "MemTotal:", 9) == 0) - sscanf(buffer, "%*s %lu", &memtotal); - else if (strncmp(buffer, "MemFree:", 8) == 0) - sscanf(buffer, "%*s %lu", &memfree); - else if (strncmp(buffer, "Buffers:", 8) == 0) - sscanf(buffer, "%*s %lu", &buffers); - else if (strncmp(buffer, "SwapTotal:", 10) == 0) - sscanf(buffer, "%*s %lu", &swaptotal); - else if (strncmp(buffer, "SwapFree:", 9) == 0) - sscanf(buffer, "%*s %lu", &swapfree); - else if (strncmp(buffer, "Cached:", 7) == 0) - sscanf(buffer, "%*s %lu", &cached); + if (sysctl(mib, ARRAY_SIZE(mib), &uvm, &len, NULL, 0)!=0) { + printf("sysctl error: %d\n", errno); + return NULL; } - fclose(mem_fp); - - memfree = memfree + buffers + cached; - meminuse = memtotal - memfree; - swapused = swaptotal - swapfree; + uint64_t meminuse = (uvm.npages-(uvm.free+uvm.inactive))<<uvm.pageshift; + uint64_t memtotal = uvm.npages<<uvm.pageshift; + uint64_t swapused = uvm.swpginuse<<uvm.pageshift; + uint64_t swaptotal = uvm.swpages<<uvm.pageshift; - snprintf(status, 128, "%.0f%%(%dM/%dM) swap:%.0f%%(%dM/%dM)", - //snprintf(status, 128, "%.0f%% swap:%.1f%%", + static const uint64_t nmegs = 1024*1024; + snprintf(status, 128, "%.0f%%(%lldM/%lldM) swap:%.0f%%(%lldM/%lldM)", (float)meminuse/memtotal*100, - (int)meminuse/1024, - (int)memtotal/1024, + meminuse/nmegs, + memtotal/nmegs, (float)swapused/swaptotal*100, - (int)swapused/1024, - (int)swaptotal/1024); + swapused/nmegs, + swaptotal/nmegs); #ifdef DEBUG printf("MEM: %.0f%% (%dM/%dM)\n",