2022-09-05 10:57:09 +02:00
|
|
|
#include "memory.h"
|
2023-11-24 10:12:34 +08:00
|
|
|
#include "common/io/io.h"
|
2023-05-11 20:39:54 +08:00
|
|
|
#include "util/mallocHelper.h"
|
2022-09-05 10:57:09 +02:00
|
|
|
|
2023-11-24 10:12:34 +08:00
|
|
|
#include <inttypes.h>
|
2022-09-05 10:57:09 +02:00
|
|
|
|
2023-05-11 20:39:54 +08:00
|
|
|
const char* ffDetectMemory(FFMemoryResult* ram)
|
2022-09-05 10:57:09 +02:00
|
|
|
{
|
2023-12-04 16:47:00 +09:00
|
|
|
char buf[PROC_FILE_BUFFSIZ];
|
|
|
|
|
ssize_t nRead = ffReadFileData("/proc/meminfo", sizeof(buf) - 1, buf);
|
|
|
|
|
if(nRead < 0)
|
|
|
|
|
return "ffReadFileData(\"/proc/meminfo\", sizeof(buf)-1, buf)";
|
|
|
|
|
buf[nRead] = '\0';
|
2022-09-05 10:57:09 +02:00
|
|
|
|
2023-11-24 10:12:34 +08:00
|
|
|
uint64_t memTotal = 0,
|
2023-12-07 16:30:10 +08:00
|
|
|
memAvailable = 0,
|
2022-09-05 10:57:09 +02:00
|
|
|
shmem = 0,
|
|
|
|
|
memFree = 0,
|
|
|
|
|
buffers = 0,
|
|
|
|
|
cached = 0,
|
2022-10-18 23:46:42 +08:00
|
|
|
sReclaimable = 0;
|
2023-12-07 16:30:10 +08:00
|
|
|
|
2023-12-04 16:47:00 +09:00
|
|
|
char *token = NULL;
|
|
|
|
|
if((token = strstr(buf, "MemTotal:")) != NULL)
|
2023-12-04 20:34:41 +09:00
|
|
|
memTotal = strtoul(token + strlen("MemTotal:"), NULL, 10);
|
2023-12-07 16:30:10 +08:00
|
|
|
else
|
|
|
|
|
return "MemTotal not found in /proc/meminfo";
|
|
|
|
|
|
|
|
|
|
if((token = strstr(buf, "MemAvailable:")) != NULL)
|
|
|
|
|
memAvailable = strtoul(token + strlen("MemAvailable:"), NULL, 10);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
if((token = strstr(buf, "SReclaimable:")) != NULL)
|
|
|
|
|
sReclaimable = strtoul(token + strlen("SReclaimable:"), NULL, 10);
|
2023-12-04 16:47:00 +09:00
|
|
|
|
2023-12-07 16:30:10 +08:00
|
|
|
memAvailable = memFree + buffers + cached + sReclaimable - shmem;
|
|
|
|
|
}
|
2022-09-05 10:57:09 +02:00
|
|
|
|
2023-11-24 10:12:34 +08:00
|
|
|
ram->bytesTotal = memTotal * 1024lu;
|
2023-12-07 16:30:10 +08:00
|
|
|
ram->bytesUsed = (memTotal - memAvailable) * 1024lu;
|
2023-05-11 20:39:54 +08:00
|
|
|
|
|
|
|
|
return NULL;
|
2022-09-05 10:57:09 +02:00
|
|
|
}
|