|
@@ -1,6 +1,7 @@
|
|
//! stdlib implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/stdlib.h.html
|
|
//! stdlib implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/stdlib.h.html
|
|
|
|
|
|
use core::{intrinsics, iter, mem, ptr, slice};
|
|
use core::{intrinsics, iter, mem, ptr, slice};
|
|
|
|
+use core::convert::TryFrom;
|
|
use rand::distributions::{Alphanumeric, Distribution, Uniform};
|
|
use rand::distributions::{Alphanumeric, Distribution, Uniform};
|
|
use rand::prng::XorShiftRng;
|
|
use rand::prng::XorShiftRng;
|
|
use rand::rngs::JitterRng;
|
|
use rand::rngs::JitterRng;
|
|
@@ -14,6 +15,7 @@ use header::limits;
|
|
use header::string::*;
|
|
use header::string::*;
|
|
use header::time::constants::CLOCK_MONOTONIC;
|
|
use header::time::constants::CLOCK_MONOTONIC;
|
|
use header::time::timespec;
|
|
use header::time::timespec;
|
|
|
|
+use header::unistd::{sysconf, _SC_PAGESIZE};
|
|
use header::wchar::*;
|
|
use header::wchar::*;
|
|
use header::{ctype, errno, unistd};
|
|
use header::{ctype, errno, unistd};
|
|
use platform;
|
|
use platform;
|
|
@@ -1008,7 +1010,15 @@ pub unsafe extern "C" fn unsetenv(key: *const c_char) -> c_int {
|
|
|
|
|
|
#[no_mangle]
|
|
#[no_mangle]
|
|
pub unsafe extern "C" fn valloc(size: size_t) -> *mut c_void {
|
|
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]
|
|
#[no_mangle]
|