Procházet zdrojové kódy

Get page size through sysconf()

Peter Limkilde Svendsen před 6 roky
rodič
revize
8beb10b1bd
1 změnil soubory, kde provedl 11 přidání a 1 odebrání
  1. 11 1
      src/header/stdlib/mod.rs

+ 11 - 1
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]