memusage.c: Read 64-bit integers
[sysstatus.git] / src / status / memusage.c
index f69c0274b747e7749c0efdd043e8c048ccfeb5fd..d8a9de5f96906316b010f0edd8a00049e8032bca 100644 (file)
@@ -1,5 +1,6 @@
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 
 #include "common.h"
 #include "tools.h"
@@ -14,11 +15,11 @@ void status_memusage(GlobalData *g)
   size_t stlen;
   FILE *stfile;
 
-  int memtotal = 0;
-  int memfree = 0;
-  int memused;
-  int membuffers = 0;
-  int memcached = 0;
+  long long memtotal = 0;
+  long long memfree = 0;
+  long long memused;
+  long long membuffers = 0;
+  long long memcached = 0;
 
 
   statusitem_init(&s);
@@ -27,16 +28,19 @@ void status_memusage(GlobalData *g)
   stfile = fopen("/proc/meminfo", "r");
   if (stfile != NULL) {
     stlen = getline(&stline, &stlen, stfile);
-    memtotal = atoi(&stline[17]);
+    memtotal = atoll(&stline[16]);
 
     stlen = getline(&stline, &stlen, stfile);
-    memfree = atoi(&stline[17]);
+    memfree = atoll(&stline[16]);
 
     stlen = getline(&stline, &stlen, stfile);
-    membuffers = atoi(&stline[17]);
+    if (stlen > 13 && !memcmp(stline, "MemAvailable:", 13)) {
+      stlen = getline(&stline, &stlen, stfile);
+    }
+    membuffers = atoll(&stline[16]);
 
     stlen = getline(&stline, &stlen, stfile);
-    memcached = atoi(&stline[17]);
+    memcached = atoll(&stline[16]);
     free(stline);
 
     fclose(stfile);
@@ -47,12 +51,12 @@ void status_memusage(GlobalData *g)
 
     /* Change color based on % of RAM used */
     if ((float)memused / (float)memtotal < 0.85) {
-      s.color = "green";
+      s.color = "#22FF22";  // green
     } else {
-      s.color = "red";
+      s.color = "#FF0000";  // red
     }
 
-    snprintf(text, sizeof(text), "Mem: %d M", memused);
+    snprintf(text, sizeof(text), "Mem: %lld M", memused);
 
     line_append_item(g, &s);
   }