Merge branch 'master' into master

This commit is contained in:
Tom Almeida
2018-03-22 12:49:55 +08:00
committed by GitHub
6 changed files with 65 additions and 59 deletions
+1
View File
@@ -12,3 +12,4 @@ platform = { path = "../platform" }
ralloc = { path = "../../ralloc", default-features = false }
ctype = { path = "../ctype" }
errno = { path = "../errno" }
rand = { git = "https://github.com/rust-lang-nursery/rand/", default-features = false }
+16 -4
View File
@@ -8,8 +8,10 @@ extern crate ctype;
extern crate errno;
extern crate platform;
extern crate ralloc;
extern crate rand;
use core::{ptr, str};
use rand::{Rng, SeedableRng, XorShiftRng};
use errno::*;
use platform::types::*;
@@ -19,8 +21,10 @@ static ALLOCATOR: ralloc::Allocator = ralloc::Allocator;
pub const EXIT_FAILURE: c_int = 1;
pub const EXIT_SUCCESS: c_int = 0;
pub const RAND_MAX: c_int = 2147483647;
static mut ATEXIT_FUNCS: [Option<extern "C" fn()>; 32] = [None; 32];
static mut RNG: Option<XorShiftRng> = None;
#[no_mangle]
pub unsafe extern "C" fn a64l(s: *const c_char) -> c_long {
@@ -375,8 +379,16 @@ pub extern "C" fn qsort(
}
#[no_mangle]
pub extern "C" fn rand() -> c_int {
unimplemented!();
pub unsafe extern "C" fn rand() -> c_int {
match RNG {
Some(ref mut rng) => rng.gen_range::<c_int>(0, RAND_MAX),
None => {
let mut rng = XorShiftRng::from_seed([1; 16]);
let ret = rng.gen_range::<c_int>(0, RAND_MAX);
RNG = Some(rng);
ret
}
}
}
#[no_mangle]
@@ -425,8 +437,8 @@ pub extern "C" fn setstate(state: *const c_char) -> *mut c_char {
}
#[no_mangle]
pub extern "C" fn srand(seed: c_uint) {
unimplemented!();
pub unsafe extern "C" fn srand(seed: c_uint) {
RNG = Some(XorShiftRng::from_seed([seed as u8; 16]));
}
#[no_mangle]