U64 VM_PageSize() {
	U64 result = getpagesize();
	return result;
}

U64 VM_AllocationGranularity() {
	U64 result = getpagesize();
	return result;
}

void *VM_Reserve(U64 size) {
	void *addr = mmap(0, size, PROT_NONE, MAP_ANON | MAP_PRIVATE, -1, 0);

	void *result = (addr == MAP_FAILED) ? 0 : addr;
	return result;
}

B32 VM_Commit(void *base, U64 size) {
	B32 result = mprotect(base, size, PROT_READ | PROT_WRITE) == 0;
	return result;
}

void VM_Decommit(void *base, U64 size) {
	mprotect(base, size, PROT_NONE);
}

void VM_Release(void *base, U64 size) {
	munmap(base, size);
}

#include "filesystem.c"
