Replace sysctl on Mac with a syscall that is supported in all kernels
This commit is contained in:
parent
0f3c1c501e
commit
a05f51ee08
@ -1,6 +1,7 @@
|
||||
#include "FakeBlock.h"
|
||||
#include "FakeBlockStore.h"
|
||||
#include <cpp-utils/assert/assert.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
using std::make_shared;
|
||||
using std::string;
|
||||
@ -77,10 +78,21 @@ uint64_t FakeBlockStore::numBlocks() const {
|
||||
}
|
||||
|
||||
uint64_t FakeBlockStore::estimateNumFreeBytes() const {
|
||||
//For windows, see http://stackoverflow.com/a/2513561/829568
|
||||
uint64_t mem;
|
||||
#ifdef __APPLE__
|
||||
size_t size = sizeof(mem);
|
||||
int result = sysctlbyname("hw.memsize", &mem, &size, nullptr, 0);
|
||||
if (0 != result) {
|
||||
throw std::runtime_error("sysctlbyname syscall failed");
|
||||
}
|
||||
#elif __linux__
|
||||
long numRAMPages = sysconf(_SC_PHYS_PAGES);
|
||||
long pageSize = sysconf(_SC_PAGE_SIZE);
|
||||
return numRAMPages*pageSize;
|
||||
long pageSize = sysconf(_SC_PAGESIZE);
|
||||
mem = numRAMPages * pageSize;
|
||||
#else
|
||||
#error Not supported on windows yet, TODO http://stackoverflow.com/a/2513561/829568
|
||||
#endif
|
||||
return mem;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user