aboutsummaryrefslogtreecommitdiffstats
path: root/util.c
diff options
context:
space:
mode:
authordrkhsh <me@drkhsh.at>2025-07-24 22:41:25 +0200
committerdrkhsh <me@drkhsh.at>2025-07-24 22:41:25 +0200
commit8723e8b8c69c08bae8abe02ea1f4a49758b8bdfc (patch)
tree47dc5b477c58d6080f360adf3fcb3097ccb173f4 /util.c
parent6eb7887853537ac0cf91517019328e038382bdd8 (diff)
downloadslstatus-8723e8b8c69c08bae8abe02ea1f4a49758b8bdfc.tar.gz
more concise memory calculation on Linux
more flexible parsing for /proc/meminfo to take shared and reclaimable memory into account. this matches the output with free(1). additionally this could fix some corner cases, as the order of fields in /proc/meminfo is not strictly defined. slstatus: percent 81% free 2.5 Gi total 23.4 Gi used 19.0 Gi free(1): total used free shared buff/cache available Mem: 23Gi 19Gi 2.5Gi 1.3Gi 3.2Gi 3.6Gi
Diffstat (limited to 'util.c')
-rw-r--r--util.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/util.c b/util.c
index bca9b2e..d33cf9d 100644
--- a/util.c
+++ b/util.c
@@ -139,3 +139,20 @@ pscanf(const char *path, const char *fmt, ...)
return (n == EOF) ? -1 : n;
}
+
+int
+lscanf(FILE *fp, const char *key, const char *fmt, void *res)
+{
+ int n;
+ char line[256];
+
+ n = -1;
+ while (fgets(line, sizeof(line), fp))
+ if (strncmp(line, key, strlen(key)) == 0) {
+ n = sscanf(line + strlen(key), fmt, res);
+ break;
+ }
+
+ rewind(fp);
+ return (n == 1) ? 1 : -1;
+}