From 8beb10b1bd13d1d5c669a5c1554a06de7ab49ecb Mon Sep 17 00:00:00 2001 From: Peter Limkilde Svendsen Date: Wed, 8 May 2019 23:20:30 +0200 Subject: [PATCH] Get page size through sysconf() --- src/header/stdlib/mod.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/header/stdlib/mod.rs b/src/header/stdlib/mod.rs index e8002abe69..843ae283ce 100644 --- a/src/header/stdlib/mod.rs +++ b/src/header/stdlib/mod.rs @@ -1,6 +1,7 @@ //! stdlib implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/stdlib.h.html use core::{intrinsics, iter, mem, ptr, slice}; +use core::convert::TryFrom; use rand::distributions::{Alphanumeric, Distribution, Uniform}; use rand::prng::XorShiftRng; use rand::rngs::JitterRng; @@ -14,6 +15,7 @@ use header::limits; use header::string::*; use header::time::constants::CLOCK_MONOTONIC; use header::time::timespec; +use header::unistd::{sysconf, _SC_PAGESIZE}; use header::wchar::*; use header::{ctype, errno, unistd}; use platform; @@ -1008,7 +1010,15 @@ pub unsafe extern "C" fn unsetenv(key: *const c_char) -> c_int { #[no_mangle] pub unsafe extern "C" fn valloc(size: size_t) -> *mut c_void { - memalign(4096, size) + /* _SC_PAGESIZE is a c_long and may in principle not convert + * correctly to a size_t. */ + match size_t::try_from(sysconf(_SC_PAGESIZE)) { + Ok(page_size) => memalign(page_size, size), + Err(_) => { + // A corner case. No errno setting. + ptr::null_mut() + } + } } #[no_mangle]