From 60b23003c7628ef2abb41431336cbee31a686460 Mon Sep 17 00:00:00 2001 From: Peter Limkilde Svendsen Date: Sun, 24 May 2020 18:17:27 +0200 Subject: [PATCH 1/2] Simplify alignment check in posix_memalign() --- src/header/stdlib/mod.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/header/stdlib/mod.rs b/src/header/stdlib/mod.rs index 484127dccd..e4d09cf6f3 100644 --- a/src/header/stdlib/mod.rs +++ b/src/header/stdlib/mod.rs @@ -643,13 +643,9 @@ pub unsafe extern "C" fn posix_memalign( alignment: size_t, size: size_t, ) -> c_int { - const void_ptr_size: usize = mem::size_of::<*mut c_void>(); + const VOID_PTR_SIZE: usize = mem::size_of::<*mut c_void>(); - /* Check that alignment is: - * a) a multiple of sizeof(void *) - * b) a power-of-two multiple of sizeof(void *). Integer division as - * below gives the correct result once a) is ensured. */ - if alignment % void_ptr_size == 0 && (alignment / void_ptr_size).is_power_of_two() { + if alignment % VOID_PTR_SIZE == 0 && alignment.is_power_of_two() { let ptr = platform::alloc_align(size, alignment); if !ptr.is_null() { *memptr = ptr; From da8d2fa7aab7a6a1ff816af734e05f7ca01eda3e Mon Sep 17 00:00:00 2001 From: Peter Limkilde Svendsen Date: Sun, 24 May 2020 18:29:57 +0200 Subject: [PATCH 2/2] Always set memptr in posix_memalign() --- src/header/stdlib/mod.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/header/stdlib/mod.rs b/src/header/stdlib/mod.rs index e4d09cf6f3..22cdb5a117 100644 --- a/src/header/stdlib/mod.rs +++ b/src/header/stdlib/mod.rs @@ -647,13 +647,14 @@ pub unsafe extern "C" fn posix_memalign( if alignment % VOID_PTR_SIZE == 0 && alignment.is_power_of_two() { let ptr = platform::alloc_align(size, alignment); - if !ptr.is_null() { - *memptr = ptr; - 0 - } else { + *memptr = ptr; + if ptr.is_null() { ENOMEM + } else { + 0 } } else { + *memptr = ptr::null_mut(); EINVAL } }