From 863c59d3c242edacbabdf36dc771a2616a762dbf Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jackpot51@gmail.com> Date: Tue, 20 Sep 2016 09:51:26 -0600 Subject: [PATCH] Increase buffer size when reading executable, update libstd --- scheme/user.rs | 2 +- syscall/process.rs | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/scheme/user.rs b/scheme/user.rs index c209ecfb..7da21d47 100644 --- a/scheme/user.rs +++ b/scheme/user.rs @@ -9,7 +9,7 @@ use syscall::{convert_to_result, Call, Error, Result}; use super::Scheme; -#[derive(Copy, Clone, Debug)] +#[derive(Copy, Clone, Debug, Default)] #[repr(packed)] pub struct Packet { pub id: usize, diff --git a/syscall/process.rs b/syscall/process.rs index 44175d7a..b6be85fa 100644 --- a/syscall/process.rs +++ b/syscall/process.rs @@ -178,6 +178,8 @@ pub fn clone(flags: usize, stack_base: usize) -> Result<usize> { } } + // If not cloning files, dup to get a new number from scheme + // This has to be done outside the context lock to prevent deadlocks if flags & CLONE_FILES == 0 { for (fd, mut file_option) in files.lock().iter_mut().enumerate() { let new_file_option = if let Some(file) = *file_option { @@ -357,7 +359,7 @@ pub fn exec(path: &[u8], arg_ptrs: &[[usize; 2]]) -> Result<usize> { //TODO: Only read elf header, not entire file. Then read required segments let mut data = vec![]; loop { - let mut buf = [0; 4096]; + let mut buf = [0; 16384]; let count = syscall::read(file, &mut buf)?; if count > 0 { data.extend_from_slice(&buf[..count]); -- GitLab