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