#include "memory.h" #include #include void ffDetectMemoryImpl(FFMemoryStorage* swap) { FILE* meminfo = fopen("/proc/meminfo", "r"); if(meminfo == NULL) { ffStrbufAppendS(&swap->error, "Failed to open /proc/meminfo"); return; } char* line = NULL; size_t len = 0; uint32_t memTotal = 0, shmem = 0, memFree = 0, buffers = 0, cached = 0, sReclaimable = 0; while (getline(&line, &len, meminfo) != EOF) { if(!sscanf(line, "MemTotal: %u", &memTotal)) if(!sscanf(line, "Shmem: %u", &shmem)) if(!sscanf(line, "MemFree: %u", &memFree)) if(!sscanf(line, "Buffers: %u", &buffers)) if(!sscanf(line, "Cached: %u", &cached)) sscanf(line, "SReclaimable: %u", &sReclaimable); } if(line != NULL) free(line); fclose(meminfo); swap->bytesTotal = memTotal * (uint64_t) 1024; if(swap->bytesTotal == 0) ffStrbufAppendS(&swap->error, "Failed to read MemTotal"); else swap->bytesUsed = (memTotal + shmem - memFree - buffers - cached - sReclaimable) * (uint64_t) 1024; }