diff --git a/memory.c b/memory.c index 523e482..47060c2 100644 --- a/memory.c +++ b/memory.c @@ -25,30 +25,28 @@ void *memory_map(size_t size) { return p; } -int memory_map_fixed(void *ptr, size_t size) { +bool memory_map_fixed(void *ptr, size_t size) { void *p = mmap(ptr, size, PROT_NONE, MAP_ANONYMOUS|MAP_PRIVATE|MAP_FIXED, -1, 0); - if (unlikely(p == MAP_FAILED)) { - if (errno != ENOMEM) { - fatal_error("non-ENOMEM MAP_FIXED mmap failure"); - } - return 1; + bool ret = p == MAP_FAILED; + if (unlikely(ret) && errno != ENOMEM) { + fatal_error("non-ENOMEM MAP_FIXED mmap failure"); } - return 0; + return ret; } -int memory_unmap(void *ptr, size_t size) { - int ret = munmap(ptr, size); +bool memory_unmap(void *ptr, size_t size) { + bool ret = munmap(ptr, size); if (unlikely(ret) && errno != ENOMEM) { fatal_error("non-ENOMEM munmap failure"); } return ret; } -static int memory_protect_prot(void *ptr, size_t size, int prot, UNUSED int pkey) { +static bool memory_protect_prot(void *ptr, size_t size, int prot, UNUSED int pkey) { #ifdef USE_PKEY - int ret = pkey_mprotect(ptr, size, prot, pkey); + bool ret = pkey_mprotect(ptr, size, prot, pkey); #else - int ret = mprotect(ptr, size, prot); + bool ret = mprotect(ptr, size, prot); #endif if (unlikely(ret) && errno != ENOMEM) { fatal_error("non-ENOMEM mprotect failure"); @@ -56,43 +54,39 @@ static int memory_protect_prot(void *ptr, size_t size, int prot, UNUSED int pkey return ret; } -int memory_protect_ro(void *ptr, size_t size) { +bool memory_protect_ro(void *ptr, size_t size) { return memory_protect_prot(ptr, size, PROT_READ, -1); } -int memory_protect_rw(void *ptr, size_t size) { +bool memory_protect_rw(void *ptr, size_t size) { return memory_protect_prot(ptr, size, PROT_READ|PROT_WRITE, -1); } -int memory_protect_rw_metadata(void *ptr, size_t size) { +bool memory_protect_rw_metadata(void *ptr, size_t size) { return memory_protect_prot(ptr, size, PROT_READ|PROT_WRITE, get_metadata_key()); } #ifdef HAVE_COMPATIBLE_MREMAP -int memory_remap(void *old, size_t old_size, size_t new_size) { +bool memory_remap(void *old, size_t old_size, size_t new_size) { void *ptr = mremap(old, old_size, new_size, 0); - if (unlikely(ptr == MAP_FAILED)) { - if (errno != ENOMEM) { - fatal_error("non-ENOMEM mremap failure"); - } - return 1; + bool ret = ptr == MAP_FAILED; + if (unlikely(ret) && errno != ENOMEM) { + fatal_error("non-ENOMEM mremap failure"); } - return 0; + return ret; } -int memory_remap_fixed(void *old, size_t old_size, void *new, size_t new_size) { +bool memory_remap_fixed(void *old, size_t old_size, void *new, size_t new_size) { void *ptr = mremap(old, old_size, new_size, MREMAP_MAYMOVE|MREMAP_FIXED, new); - if (unlikely(ptr == MAP_FAILED)) { - if (errno != ENOMEM) { - fatal_error("non-ENOMEM MREMAP_FIXED mremap failure"); - } - return 1; + bool ret = ptr == MAP_FAILED; + if (unlikely(ret) && errno != ENOMEM) { + fatal_error("non-ENOMEM MREMAP_FIXED mremap failure"); } - return 0; + return ret; } #endif -int memory_purge(void *ptr, size_t size) { +bool memory_purge(void *ptr, size_t size) { int ret = madvise(ptr, size, MADV_DONTNEED); if (unlikely(ret) && errno != ENOMEM) { fatal_error("non-ENOMEM MADV_DONTNEED madvise failure"); diff --git a/memory.h b/memory.h index bd28f1c..b2e77ee 100644 --- a/memory.h +++ b/memory.h @@ -1,6 +1,7 @@ #ifndef MEMORY_H #define MEMORY_H +#include #include #ifdef __linux__ @@ -10,16 +11,16 @@ int get_metadata_key(void); void *memory_map(size_t size); -int memory_map_fixed(void *ptr, size_t size); -int memory_unmap(void *ptr, size_t size); -int memory_protect_ro(void *ptr, size_t size); -int memory_protect_rw(void *ptr, size_t size); -int memory_protect_rw_metadata(void *ptr, size_t size); +bool memory_map_fixed(void *ptr, size_t size); +bool memory_unmap(void *ptr, size_t size); +bool memory_protect_ro(void *ptr, size_t size); +bool memory_protect_rw(void *ptr, size_t size); +bool memory_protect_rw_metadata(void *ptr, size_t size); #ifdef HAVE_COMPATIBLE_MREMAP -int memory_remap(void *old, size_t old_size, size_t new_size); -int memory_remap_fixed(void *old, size_t old_size, void *new, size_t new_size); +bool memory_remap(void *old, size_t old_size, size_t new_size); +bool memory_remap_fixed(void *old, size_t old_size, void *new, size_t new_size); #endif -int memory_purge(void *ptr, size_t size); +bool memory_purge(void *ptr, size_t size); void memory_set_name(void *ptr, size_t size, const char *name); #endif