From b367b67cd0024ed4f9d6bf31fd001429b24d9b9a Mon Sep 17 00:00:00 2001 From: John Date: Sat, 8 Feb 2020 11:51:26 -0500 Subject: [PATCH 1/2] update sysctlbyname() --- src/sys/sys.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/sys/sys.c b/src/sys/sys.c index a338a117..8a63d786 100644 --- a/src/sys/sys.c +++ b/src/sys/sys.c @@ -33,19 +33,28 @@ DEFINE_SYSCALL(sysinfo, gaddr_t, info_ptr) int64_t memsize; len = sizeof memsize; - if (sysctlbyname("hw.memsize", &memsize, &len, NULL, 0) < 0) exit(1); + if (sysctlbyname("hw.memsize", &memsize, &len, NULL, 0) < 0){ + perror("sysinfo:"); + exit(1); + } info.totalram = memsize; int64_t freepages; len = sizeof freepages; - if (sysctlbyname("vm.page_free_count", &freepages, &len, NULL, 0) < 0) exit(1); + if (sysctlbyname("vm.page_free_count", &freepages, &len, NULL, 0) < 0){ + perror("sysinfo:"); + exit(1); + } info.freeram = freepages * 0x1000; - uint64_t swapinfo[3]; + uint64_t swapinfo[4]; len = sizeof swapinfo; - if (sysctlbyname("vm.swapusage", &swapinfo, &len, NULL, 0) < 0) exit(1); + if (sysctlbyname("vm.swapusage", &swapinfo, &len, NULL, 0) < 0){ + perror("sysinfo:"); + exit(1); + } info.totalswap = swapinfo[0]; - info.freeswap = swapinfo[2]; + info.freeswap = swapinfo[1]; /* TODO */ info.sharedram = 0; From c339845b6b0139d896621d231aaac8451f636ed6 Mon Sep 17 00:00:00 2001 From: John Date: Sat, 8 Feb 2020 12:46:28 -0500 Subject: [PATCH 2/2] Better fix for sysctlbyname() --- src/sys/sys.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/sys/sys.c b/src/sys/sys.c index 8a63d786..b79f09a4 100644 --- a/src/sys/sys.c +++ b/src/sys/sys.c @@ -47,14 +47,22 @@ DEFINE_SYSCALL(sysinfo, gaddr_t, info_ptr) } info.freeram = freepages * 0x1000; - uint64_t swapinfo[4]; + /* + * sysctlbyname() changed in macos 15. Any older os will leave swapinfo[4] as 0. + */ + + uint64_t swapinfo[4] = {0}; len = sizeof swapinfo; if (sysctlbyname("vm.swapusage", &swapinfo, &len, NULL, 0) < 0){ perror("sysinfo:"); exit(1); } info.totalswap = swapinfo[0]; - info.freeswap = swapinfo[1]; + + if(swapinfo[3] == 0) + info.freeswap = swapinfo[2]; + else + info.freeswap = swapinfo[1]; /* TODO */ info.sharedram = 0;