#include "page_routines.h"

#include <sys/mman.h>
#include <unistd.h>

void* platform_map_pages(void const* addr, size_t length, enum page_location location) {
    int additional_flags = (location == PAGE_FIXED) ? MAP_FIXED_NOREPLACE : 0;
    void* mapping = mmap( (void*) addr, length, PROT_READ | PROT_WRITE, MAP_PRIVATE | additional_flags, -1, 0 );
    return (mapping == MAP_FAILED) ? MAP_PAGES_FAILURE : mapping;
}

int platform_unmap_pages(void const* addr, size_t length) {
    return munmap(addr, length);
}

int platform_page_size() {
    return getpagesize();
}