From 4200a31ff835ba0cbb46a24562de9879bc025e55 Mon Sep 17 00:00:00 2001 From: nyx Date: Mon, 23 Sep 2024 16:54:22 -0400 Subject: [PATCH] refactor: Improve memory metric parsing --- src/detection/memory/memory_linux.c | 41 ++++++++--------------------- 1 file changed, 11 insertions(+), 30 deletions(-) diff --git a/src/detection/memory/memory_linux.c b/src/detection/memory/memory_linux.c index 6f9e87a0f3..11ec791272 100644 --- a/src/detection/memory/memory_linux.c +++ b/src/detection/memory/memory_linux.c @@ -12,41 +12,22 @@ const char* ffDetectMemory(FFMemoryResult* ram) return "ffReadFileData(\"/proc/meminfo\", sizeof(buf)-1, buf)"; buf[nRead] = '\0'; - uint64_t memTotal = 0, - memAvailable = 0, - shmem = 0, - memFree = 0, - buffers = 0, - cached = 0, - sReclaimable = 0; - - char *token = NULL; - if((token = strstr(buf, "MemTotal:")) != NULL) - memTotal = strtoul(token + strlen("MemTotal:"), NULL, 10); - else - return "MemTotal not found in /proc/meminfo"; + uint64_t memTotal = 0, memAvailable = 0, shmem = 0, memFree = 0, buffers = 0, cached = 0, sReclaimable = 0; + const char* keys[] = {"MemTotal:", "MemAvailable:", "MemFree:", "Buffers:", "Cached:", "Shmem:", "SReclaimable:"}; + uint64_t* values[] = {&memTotal, &memAvailable, &memFree, &buffers, &cached, &shmem, &sReclaimable}; - if((token = strstr(buf, "MemAvailable:")) != NULL) - memAvailable = strtoul(token + strlen("MemAvailable:"), NULL, 10); - else + for(size_t i = 0; i < sizeof(keys)/sizeof(keys[0]); ++i) { - if((token = strstr(buf, "MemFree:")) != NULL) - memFree = strtoul(token + strlen("MemFree:"), NULL, 10); - - if((token = strstr(buf, "Buffers:")) != NULL) - buffers = strtoul(token + strlen("Buffers:"), NULL, 10); - - if((token = strstr(buf, "Cached:")) != NULL) - cached = strtoul(token + strlen("Cached:"), NULL, 10); - - if((token = strstr(buf, "Shmem:")) != NULL) - shmem = strtoul(token + strlen("Shmem:"), NULL, 10); + char* token = strstr(buf, keys[i]); + if(token) + *values[i] = strtoul(token + strlen(keys[i]), NULL, 10); + } - if((token = strstr(buf, "SReclaimable:")) != NULL) - sReclaimable = strtoul(token + strlen("SReclaimable:"), NULL, 10); + if(!memTotal) + return "MemTotal not found in /proc/meminfo"; + if(!memAvailable) memAvailable = memFree + buffers + cached + sReclaimable - shmem; - } ram->bytesTotal = memTotal * 1024lu; ram->bytesUsed = (memTotal - memAvailable) * 1024lu;