From 464768a4604b1882a186c8319bc17d27d7f46606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 15 Jun 2023 11:19:53 +0800 Subject: [PATCH] Memory (FreeBSD): count cached memory as free memory As what neofetch did --- src/detection/memory/memory_bsd.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/detection/memory/memory_bsd.c b/src/detection/memory/memory_bsd.c index 05c74172f..e856b1256 100644 --- a/src/detection/memory/memory_bsd.c +++ b/src/detection/memory/memory_bsd.c @@ -3,19 +3,21 @@ const char* ffDetectMemory(FFMemoryResult* ram) { + uint64_t length = sizeof(ram->bytesTotal); + if (sysctl((int[]){ CTL_HW, HW_PHYSMEM }, 2, &ram->bytesTotal, &length, NULL, 0)) + return "Failed to read hw.physmem"; + uint32_t pageSize; - uint64_t length = sizeof(pageSize); + length = sizeof(pageSize); if (sysctl((int[]){ CTL_HW, HW_PAGESIZE }, 2, &pageSize, &length, NULL, 0)) return "Failed to read hw.pagesize"; - ram->bytesTotal = (uint64_t) ffSysctlGetInt64("vm.stats.vm.v_page_count", 0) * pageSize; - if(ram->bytesTotal == 0) - return "Failed to read vm.stats.vm.v_page_count"; + // vm.stats.vm.* are int values + int32_t pagesFree = ffSysctlGetInt("vm.stats.vm.v_free_count", 0) + + ffSysctlGetInt("vm.stats.vm.v_inactive_count", 0) + + ffSysctlGetInt("vm.stats.vm.v_cache_count", 0); - ram->bytesUsed = ram->bytesTotal - - (uint64_t) ffSysctlGetInt64("vm.stats.vm.v_free_count", 0) * pageSize - - (uint64_t) ffSysctlGetInt64("vm.stats.vm.v_inactive_count", 0) * pageSize - ; + ram->bytesUsed = ram->bytesTotal - (uint64_t) pagesFree * pageSize; return NULL; }