From 7bde03603149c70d85d6986f278853db90a58878 Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jeremy@system76.com>
Date: Sun, 21 Apr 2019 15:45:55 -0600
Subject: [PATCH] Remove va_list submodule, format

---
 .gitmodules                   |   3 -
 Cargo.lock                    |   6 +-
 src/cxa.rs                    |   4 +-
 src/db.rs                     |  10 +-
 src/header/dl-tls/mod.rs      |  26 ++++-
 src/header/mod.rs             |   2 +-
 src/header/netdb/host.rs      |   2 +-
 src/header/netdb/mod.rs       |  12 +-
 src/header/netinet_ip/mod.rs  |   1 +
 src/header/sgtty/mod.rs       |   6 +-
 src/header/stdio/mod.rs       |   2 +-
 src/header/stdio/printf.rs    |  62 +++++++---
 src/header/stdio/scanf.rs     |   7 +-
 src/header/stdlib/mod.rs      |   9 +-
 src/header/string/mod.rs      |  14 +--
 src/header/sys_ioctl/redox.rs |  16 +--
 src/header/unistd/mod.rs      |   2 +-
 src/header/unistd/pathconf.rs |   4 +-
 src/header/wchar/mod.rs       |   2 +-
 src/ld_so/linker.rs           | 209 ++++++++++++++++++----------------
 src/ld_so/start.rs            |   4 +-
 src/ld_so/tcb.rs              |  46 ++++----
 src/platform/linux/mod.rs     |  11 +-
 src/platform/pte.rs           |  13 ++-
 src/platform/redox/mod.rs     |  16 ++-
 src/start.rs                  |   4 +-
 va_list                       |   1 -
 27 files changed, 271 insertions(+), 223 deletions(-)
 delete mode 160000 va_list

diff --git a/.gitmodules b/.gitmodules
index f4880e3f4..edbbe9b61 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -7,9 +7,6 @@
 [submodule "ralloc"]
 	path = ralloc
 	url = https://gitlab.redox-os.org/redox-os/ralloc.git
-[submodule "va_list"]
-	path = va_list
-	url = https://gitlab.redox-os.org/redox-os/va_list-rs.git
 [submodule "core_io"]
 	path = core_io
 	url = https://gitlab.redox-os.org/redox-os/core_io.git
diff --git a/Cargo.lock b/Cargo.lock
index 0af490c62..493206582 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -336,7 +336,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -434,7 +434,7 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "0.15.30"
+version = "0.15.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "proc-macro2 0.4.27 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -578,7 +578,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 "checksum standalone-syn 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "115808f5187c07c23cb93eee49d542fae54c6e8285d3a24c6ff683fcde9243db"
 "checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
 "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
-"checksum syn 0.15.30 (registry+https://github.com/rust-lang/crates.io-index)" = "66c8865bf5a7cbb662d8b011950060b3c8743dca141b054bf7195b20d314d8e2"
+"checksum syn 0.15.32 (registry+https://github.com/rust-lang/crates.io-index)" = "846620ec526c1599c070eff393bfeeeb88a93afa2513fc3b49f1fea84cf7b0ed"
 "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"
 "checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
 "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"
diff --git a/src/cxa.rs b/src/cxa.rs
index fa5574c47..62a47eefc 100644
--- a/src/cxa.rs
+++ b/src/cxa.rs
@@ -5,8 +5,8 @@ use platform::types::*;
 #[derive(Clone, Copy)]
 struct CxaAtExitFunc {
     //func: extern "C" fn(*mut c_void),
-    //arg: *mut c_void,
-    //dso: *mut c_void,
+//arg: *mut c_void,
+//dso: *mut c_void,
 }
 
 static mut CXA_ATEXIT_FUNCS: [Option<CxaAtExitFunc>; 32] = [None; 32];
diff --git a/src/db.rs b/src/db.rs
index 67f4d75be..9c2acce19 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -18,10 +18,7 @@ pub struct Db<R: BufRead> {
 
 impl<R: BufRead> Db<R> {
     pub fn new(reader: R, separator: Separator) -> Self {
-        Db {
-            reader,
-            separator
-        }
+        Db { reader, separator }
     }
 
     pub fn read(&mut self) -> io::Result<Option<Vec<String>>> {
@@ -48,9 +45,6 @@ pub type FileDb = Db<BufReader<File>>;
 impl FileDb {
     pub fn open(path: &CStr, separator: Separator) -> io::Result<Self> {
         let file = File::open(path, fcntl::O_RDONLY | fcntl::O_CLOEXEC)?;
-        Ok(Db::new(
-            BufReader::new(file),
-            separator
-        ))
+        Ok(Db::new(BufReader::new(file), separator))
     }
 }
diff --git a/src/header/dl-tls/mod.rs b/src/header/dl-tls/mod.rs
index 63a00fc7b..62f67cfca 100644
--- a/src/header/dl-tls/mod.rs
+++ b/src/header/dl-tls/mod.rs
@@ -11,17 +11,35 @@ pub struct dl_tls_index {
 
 #[no_mangle]
 pub unsafe extern "C" fn __tls_get_addr(ti: *mut dl_tls_index) -> *mut c_void {
-    trace!("__tls_get_addr({:p}: {:#x}, {:#x})", ti, (*ti).ti_module, (*ti).ti_offset);
+    trace!(
+        "__tls_get_addr({:p}: {:#x}, {:#x})",
+        ti,
+        (*ti).ti_module,
+        (*ti).ti_offset
+    );
     if let Some(tcb) = Tcb::current() {
         if let Some(tls) = tcb.tls() {
             if let Some(masters) = tcb.masters() {
                 if let Some(master) = masters.get((*ti).ti_module as usize) {
-                    let addr = tls.as_mut_ptr().add(master.offset + (*ti).ti_offset as usize);
-                    trace!("__tls_get_addr({:p}: {:#x}, {:#x}) = {:p}", ti, (*ti).ti_module, (*ti).ti_offset, addr);
+                    let addr = tls
+                        .as_mut_ptr()
+                        .add(master.offset + (*ti).ti_offset as usize);
+                    trace!(
+                        "__tls_get_addr({:p}: {:#x}, {:#x}) = {:p}",
+                        ti,
+                        (*ti).ti_module,
+                        (*ti).ti_offset,
+                        addr
+                    );
                     return addr as *mut c_void;
                 }
             }
         }
     }
-    panic!("__tls_get_addr({:p}: {:#x}, {:#x}) failed", ti, (*ti).ti_module, (*ti).ti_offset);
+    panic!(
+        "__tls_get_addr({:p}: {:#x}, {:#x}) failed",
+        ti,
+        (*ti).ti_module,
+        (*ti).ti_offset
+    );
 }
diff --git a/src/header/mod.rs b/src/header/mod.rs
index 316433d1a..a03a7b970 100644
--- a/src/header/mod.rs
+++ b/src/header/mod.rs
@@ -4,9 +4,9 @@ pub mod arpa_inet;
 pub mod assert;
 pub mod ctype;
 pub mod dirent;
-pub mod dlfcn;
 #[path = "dl-tls/mod.rs"]
 pub mod dl_tls;
+pub mod dlfcn;
 pub mod errno;
 pub mod fcntl;
 pub mod float;
diff --git a/src/header/netdb/host.rs b/src/header/netdb/host.rs
index cde8a138e..2fe486e06 100644
--- a/src/header/netdb/host.rs
+++ b/src/header/netdb/host.rs
@@ -9,9 +9,9 @@ use header::fcntl::O_RDONLY;
 use header::netinet_in::in_addr;
 use header::sys_socket::constants::AF_INET;
 use header::unistd::SEEK_SET;
-use platform::{Pal, Sys};
 use platform::rlb::{Line, RawLineBuffer};
 use platform::types::*;
+use platform::{Pal, Sys};
 
 use super::{bytes_to_box_str, hostent};
 
diff --git a/src/header/netdb/mod.rs b/src/header/netdb/mod.rs
index 8bfb17b16..0978bb366 100644
--- a/src/header/netdb/mod.rs
+++ b/src/header/netdb/mod.rs
@@ -17,7 +17,7 @@ use header::fcntl::O_RDONLY;
 use header::netinet_in::{in_addr, sockaddr_in, sockaddr_in6};
 use header::stdlib::atoi;
 use header::strings::strcasecmp;
-use header::sys_socket::constants::{AF_INET};
+use header::sys_socket::constants::AF_INET;
 use header::sys_socket::{sa_family_t, sockaddr, socklen_t};
 use header::unistd::SEEK_SET;
 use platform;
@@ -666,9 +666,9 @@ pub unsafe extern "C" fn getaddrinfo(
 
     //TODO: Use hints
     let mut ai_flags = hints_opt.map_or(0, |hints| hints.ai_flags);
-    let mut ai_family;// = hints_opt.map_or(AF_UNSPEC, |hints| hints.ai_family);
+    let mut ai_family; // = hints_opt.map_or(AF_UNSPEC, |hints| hints.ai_family);
     let ai_socktype = hints_opt.map_or(0, |hints| hints.ai_socktype);
-    let mut ai_protocol;// = hints_opt.map_or(0, |hints| hints.ai_protocol);
+    let mut ai_protocol; // = hints_opt.map_or(0, |hints| hints.ai_protocol);
 
     *res = ptr::null_mut();
 
@@ -677,7 +677,7 @@ pub unsafe extern "C" fn getaddrinfo(
         //TODO: Support other service definitions as well as AI_NUMERICSERV
         match str::from_utf8_unchecked(service.to_bytes()).parse::<u16>() {
             Ok(ok) => port = ok,
-            Err(_err) => ()
+            Err(_err) => (),
         }
     }
 
@@ -700,7 +700,7 @@ pub unsafe extern "C" fn getaddrinfo(
                 sin_family: ai_family as sa_family_t,
                 sin_port: htons(port),
                 sin_addr: in_addr,
-                sin_zero: [0; 8]
+                sin_zero: [0; 8],
             })) as *mut sockaddr;
 
             let ai_addrlen = mem::size_of::<sockaddr_in>();
@@ -725,7 +725,7 @@ pub unsafe extern "C" fn getaddrinfo(
 
             let mut indirect = res;
             while !(*indirect).is_null() {
-                indirect=&mut (**indirect).ai_next;
+                indirect = &mut (**indirect).ai_next;
             }
             *indirect = Box::into_raw(addrinfo);
         }
diff --git a/src/header/netinet_ip/mod.rs b/src/header/netinet_ip/mod.rs
index e69de29bb..8b1378917 100644
--- a/src/header/netinet_ip/mod.rs
+++ b/src/header/netinet_ip/mod.rs
@@ -0,0 +1 @@
+
diff --git a/src/header/sgtty/mod.rs b/src/header/sgtty/mod.rs
index 6ffeaeb31..6d474daa5 100644
--- a/src/header/sgtty/mod.rs
+++ b/src/header/sgtty/mod.rs
@@ -5,10 +5,6 @@ use platform::types::*;
 
 #[no_mangle]
 pub extern "C" fn gtty(fd: c_int, out: *mut sgttyb) -> c_int {
-    eprintln!(
-        "unimplemented: gtty({}, {:p})",
-        fd,
-        out
-    );
+    eprintln!("unimplemented: gtty({}, {:p})", fd, out);
     -1
 }
diff --git a/src/header/stdio/mod.rs b/src/header/stdio/mod.rs
index a3c44a6cc..bda780205 100644
--- a/src/header/stdio/mod.rs
+++ b/src/header/stdio/mod.rs
@@ -3,10 +3,10 @@
 use alloc::borrow::{Borrow, BorrowMut};
 use alloc::boxed::Box;
 use alloc::vec::Vec;
+use core::ffi::VaList as va_list;
 use core::fmt::Write as WriteFmt;
 use core::ops::{Deref, DerefMut};
 use core::{fmt, mem, ptr, slice, str};
-use core::ffi::VaList as va_list;
 
 use c_str::CStr;
 use fs::File;
diff --git a/src/header/stdio/printf.rs b/src/header/stdio/printf.rs
index 83583ddda..e41f24b30 100644
--- a/src/header/stdio/printf.rs
+++ b/src/header/stdio/printf.rs
@@ -1,9 +1,9 @@
 use alloc::string::String;
 use alloc::string::ToString;
 use alloc::vec::Vec;
+use core::ffi::VaList as va_list;
 use core::ops::Range;
 use core::{fmt, slice};
-use core::ffi::VaList as va_list;
 use io::{self, Write};
 
 use platform;
@@ -34,7 +34,7 @@ enum ArgType {
     CharPtr,
     VoidPtr,
     IntPtr,
-    ArgDefault
+    ArgDefault,
 }
 
 #[derive(Clone, Copy)]
@@ -51,7 +51,7 @@ union VaArg {
     char_ptr: *const c_char,
     void_ptr: *const c_void,
     int_ptr: *mut c_int,
-    arg_default: usize
+    arg_default: usize,
 }
 
 struct BufferedVaList<'a> {
@@ -71,19 +71,45 @@ impl<'a> BufferedVaList<'a> {
 
     unsafe fn get_arg(&mut self, ty: ArgType) -> VaArg {
         match ty {
-            ArgType::Byte => VaArg { byte: self.list.arg::<c_char>() },
-            ArgType::Short => VaArg { short: self.list.arg::<c_short>() },
-            ArgType::Int => VaArg { int: self.list.arg::<c_int>() },
-            ArgType::Long => VaArg { long: self.list.arg::<c_long>() },
-            ArgType::LongLong => VaArg { longlong: self.list.arg::<c_longlong>() },
-            ArgType::PtrDiff => VaArg { ptrdiff: self.list.arg::<ptrdiff_t>() },
-            ArgType::Size => VaArg { size: self.list.arg::<ssize_t>() },
-            ArgType::IntMax => VaArg { intmax: self.list.arg::<intmax_t>() },
-            ArgType::Double => VaArg { double: self.list.arg::<c_double>() },
-            ArgType::CharPtr => VaArg { char_ptr: self.list.arg::<*const c_char>() },
-            ArgType::VoidPtr => VaArg { void_ptr: self.list.arg::<*const c_void>() },
-            ArgType::IntPtr => VaArg { int_ptr: self.list.arg::<*mut c_int>() },
-            ArgType::ArgDefault => VaArg { arg_default: self.list.arg::<usize>() }
+            ArgType::Byte => VaArg {
+                byte: self.list.arg::<c_char>(),
+            },
+            ArgType::Short => VaArg {
+                short: self.list.arg::<c_short>(),
+            },
+            ArgType::Int => VaArg {
+                int: self.list.arg::<c_int>(),
+            },
+            ArgType::Long => VaArg {
+                long: self.list.arg::<c_long>(),
+            },
+            ArgType::LongLong => VaArg {
+                longlong: self.list.arg::<c_longlong>(),
+            },
+            ArgType::PtrDiff => VaArg {
+                ptrdiff: self.list.arg::<ptrdiff_t>(),
+            },
+            ArgType::Size => VaArg {
+                size: self.list.arg::<ssize_t>(),
+            },
+            ArgType::IntMax => VaArg {
+                intmax: self.list.arg::<intmax_t>(),
+            },
+            ArgType::Double => VaArg {
+                double: self.list.arg::<c_double>(),
+            },
+            ArgType::CharPtr => VaArg {
+                char_ptr: self.list.arg::<*const c_char>(),
+            },
+            ArgType::VoidPtr => VaArg {
+                void_ptr: self.list.arg::<*const c_void>(),
+            },
+            ArgType::IntPtr => VaArg {
+                int_ptr: self.list.arg::<*mut c_int>(),
+            },
+            ArgType::ArgDefault => VaArg {
+                arg_default: self.list.arg::<usize>(),
+            },
         }
     }
 
@@ -425,7 +451,9 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, ap: va_list) -> io
                         IntKind::Short => fmt_int(fmt, ap.get(ArgType::Short, index).short),
                         IntKind::Int => fmt_int(fmt, ap.get(ArgType::Int, index).int),
                         IntKind::Long => fmt_int(fmt, ap.get(ArgType::Long, index).long),
-                        IntKind::LongLong => fmt_int(fmt, ap.get(ArgType::LongLong, index).longlong),
+                        IntKind::LongLong => {
+                            fmt_int(fmt, ap.get(ArgType::LongLong, index).longlong)
+                        }
                         IntKind::PtrDiff => fmt_int(fmt, ap.get(ArgType::PtrDiff, index).ptrdiff),
                         IntKind::Size => fmt_int(fmt, ap.get(ArgType::Size, index).size),
                         IntKind::IntMax => fmt_int(fmt, ap.get(ArgType::IntMax, index).intmax),
diff --git a/src/header/stdio/scanf.rs b/src/header/stdio/scanf.rs
index fd7a655d0..1b7f8ddb1 100644
--- a/src/header/stdio/scanf.rs
+++ b/src/header/stdio/scanf.rs
@@ -1,8 +1,8 @@
 use alloc::string::String;
 use alloc::vec::Vec;
+use core::ffi::VaList as va_list;
 use io::Read;
 use platform::types::*;
-use core::ffi::VaList as va_list;
 
 #[derive(PartialEq, Eq)]
 enum IntKind {
@@ -403,7 +403,8 @@ unsafe fn inner_scanf<R: Read>(
                     let mut ptr: Option<*mut c_char> = if ignore { None } else { Some(ap.arg()) };
 
                     // While we haven't used up all the width, and it matches
-                    while width.map(|w| w > 0).unwrap_or(true) && !invert == matches.contains(&byte) {
+                    while width.map(|w| w > 0).unwrap_or(true) && !invert == matches.contains(&byte)
+                    {
                         if let Some(ref mut ptr) = ptr {
                             **ptr = byte as c_char;
                             *ptr = ptr.offset(1);
@@ -422,7 +423,7 @@ unsafe fn inner_scanf<R: Read>(
                         *ptr = 0;
                         matched += 1;
                     }
-                },
+                }
                 b'n' => {
                     if !ignore {
                         *ap.arg::<*mut c_int>() = count as c_int;
diff --git a/src/header/stdlib/mod.rs b/src/header/stdlib/mod.rs
index 61192f605..402bbfab8 100644
--- a/src/header/stdlib/mod.rs
+++ b/src/header/stdlib/mod.rs
@@ -195,8 +195,8 @@ pub unsafe extern "C" fn calloc(nelem: size_t, elsize: size_t) -> *mut c_void {
                 intrinsics::write_bytes(ptr as *mut u8, 0, size);
             }
             ptr
-        },
-        None => core::ptr::null_mut()
+        }
+        None => core::ptr::null_mut(),
     }
 }
 
@@ -632,10 +632,7 @@ pub unsafe extern "C" fn realpath(pathname: *const c_char, resolved: *mut c_char
         };
 
         let len = out.len();
-        let read = Sys::fpath(
-            *file,
-            &mut out[..len - 1],
-        );
+        let read = Sys::fpath(*file, &mut out[..len - 1]);
         if read < 0 {
             return ptr::null_mut();
         }
diff --git a/src/header/string/mod.rs b/src/header/string/mod.rs
index ec2598edb..8c8acb216 100644
--- a/src/header/string/mod.rs
+++ b/src/header/string/mod.rs
@@ -28,12 +28,16 @@ pub unsafe extern "C" fn memccpy(
 }
 
 #[no_mangle]
-pub unsafe extern "C" fn memchr(haystack: *const c_void, needle: c_int, len: size_t) -> *mut c_void {
+pub unsafe extern "C" fn memchr(
+    haystack: *const c_void,
+    needle: c_int,
+    len: size_t,
+) -> *mut c_void {
     let haystack = slice::from_raw_parts(haystack as *const u8, len as usize);
 
     match memchr::memchr(needle as u8, haystack) {
         Some(index) => haystack[index..].as_ptr() as *mut c_void,
-        None => ptr::null_mut()
+        None => ptr::null_mut(),
     }
 }
 
@@ -226,11 +230,7 @@ pub unsafe extern "C" fn strerror(errnum: c_int) -> *mut c_char {
 }
 
 #[no_mangle]
-pub unsafe extern "C" fn strerror_r(
-    errnum: c_int,
-    buf: *mut c_char,
-    buflen: size_t,
-) -> c_int {
+pub unsafe extern "C" fn strerror_r(errnum: c_int, buf: *mut c_char, buflen: size_t) -> c_int {
     let msg = strerror(errnum);
     let len = strlen(msg);
 
diff --git a/src/header/sys_ioctl/redox.rs b/src/header/sys_ioctl/redox.rs
index b0f0d1dd8..005a4d73a 100644
--- a/src/header/sys_ioctl/redox.rs
+++ b/src/header/sys_ioctl/redox.rs
@@ -31,7 +31,7 @@ fn dup_read<T>(fd: c_int, name: &str, t: &mut T) -> syscall::Result<usize> {
 
     let _ = syscall::close(dup);
 
-    res.map(|bytes| bytes/size)
+    res.map(|bytes| bytes / size)
 }
 
 fn dup_write<T>(fd: c_int, name: &str, t: &T) -> syscall::Result<usize> {
@@ -45,7 +45,7 @@ fn dup_write<T>(fd: c_int, name: &str, t: &T) -> syscall::Result<usize> {
 
     let _ = syscall::close(dup);
 
-    res.map(|bytes| bytes/size)
+    res.map(|bytes| bytes / size)
 }
 
 #[no_mangle]
@@ -67,7 +67,7 @@ pub unsafe extern "C" fn ioctl(fd: c_int, request: c_ulong, out: *mut c_void) ->
             } else {
                 0
             }
-        },
+        }
         TCFLSH => {
             let queue = out as c_int;
             if e(dup_write(fd, "flush", &queue)) == !0 {
@@ -75,7 +75,7 @@ pub unsafe extern "C" fn ioctl(fd: c_int, request: c_ulong, out: *mut c_void) ->
             } else {
                 0
             }
-        },
+        }
         TIOCGPGRP => {
             let pgrp = &mut *(out as *mut pid_t);
             if e(dup_read(fd, "pgrp", pgrp)) == !0 {
@@ -83,7 +83,7 @@ pub unsafe extern "C" fn ioctl(fd: c_int, request: c_ulong, out: *mut c_void) ->
             } else {
                 0
             }
-        },
+        }
         TIOCSPGRP => {
             let pgrp = &*(out as *const pid_t);
             if e(dup_write(fd, "pgrp", pgrp)) == !0 {
@@ -91,7 +91,7 @@ pub unsafe extern "C" fn ioctl(fd: c_int, request: c_ulong, out: *mut c_void) ->
             } else {
                 0
             }
-        },
+        }
         TIOCGWINSZ => {
             let winsize = &mut *(out as *mut winsize);
             if e(dup_read(fd, "winsize", winsize)) == !0 {
@@ -99,7 +99,7 @@ pub unsafe extern "C" fn ioctl(fd: c_int, request: c_ulong, out: *mut c_void) ->
             } else {
                 0
             }
-        },
+        }
         TIOCSWINSZ => {
             let winsize = &*(out as *const winsize);
             if e(dup_write(fd, "winsize", winsize)) == !0 {
@@ -107,7 +107,7 @@ pub unsafe extern "C" fn ioctl(fd: c_int, request: c_ulong, out: *mut c_void) ->
             } else {
                 0
             }
-        },
+        }
         _ => {
             platform::errno = errno::EINVAL;
             -1
diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs
index 48d1ae6c6..7e2b935b5 100644
--- a/src/header/unistd/mod.rs
+++ b/src/header/unistd/mod.rs
@@ -558,7 +558,7 @@ pub extern "C" fn sleep(seconds: c_uint) -> c_uint {
 #[no_mangle]
 pub extern "C" fn swab(src: *const c_void, dest: *mut c_void, nbytes: ssize_t) {
     if nbytes <= 0 {
-        return
+        return;
     }
     let number_of_swaps = nbytes / 2;
     let mut offset = 0;
diff --git a/src/header/unistd/pathconf.rs b/src/header/unistd/pathconf.rs
index a0c308255..767d6f614 100644
--- a/src/header/unistd/pathconf.rs
+++ b/src/header/unistd/pathconf.rs
@@ -49,7 +49,9 @@ fn pc(name: c_int) -> c_long {
         _PC_SYMLINK_MAX => -1,
         _PC_2_SYMLINKS => 1,
         _ => {
-            unsafe { platform::errno = errno::EINVAL; }
+            unsafe {
+                platform::errno = errno::EINVAL;
+            }
             -1
         }
     }
diff --git a/src/header/wchar/mod.rs b/src/header/wchar/mod.rs
index 18dd985d0..72e2a74e2 100644
--- a/src/header/wchar/mod.rs
+++ b/src/header/wchar/mod.rs
@@ -1,7 +1,7 @@
 //! wchar implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/wchar.h.html
 
-use core::{mem, ptr, usize};
 use core::ffi::VaList as va_list;
+use core::{mem, ptr, usize};
 
 use header::stdio::*;
 use header::stdlib::MB_CUR_MAX;
diff --git a/src/ld_so/linker.rs b/src/ld_so/linker.rs
index a48e26dc2..8ed79f9bf 100644
--- a/src/ld_so/linker.rs
+++ b/src/ld_so/linker.rs
@@ -3,7 +3,7 @@ use alloc::collections::BTreeMap;
 use alloc::string::{String, ToString};
 use alloc::vec::Vec;
 use core::{mem, ptr, slice};
-use goblin::elf::{Elf, program_header, reloc, sym};
+use goblin::elf::{program_header, reloc, sym, Elf};
 use goblin::error::{Error, Result};
 
 use c_str::CString;
@@ -12,8 +12,8 @@ use header::{fcntl, sys_mman, unistd};
 use io::Read;
 use platform::types::c_void;
 
+use super::tcb::{Master, Tcb};
 use super::PAGE_SIZE;
-use super::tcb::{Tcb, Master};
 
 #[cfg(target_os = "redox")]
 const PATH_SEP: char = ';';
@@ -23,7 +23,7 @@ const PATH_SEP: char = ':';
 
 pub struct Linker {
     library_path: String,
-    objects: BTreeMap<String, Box<[u8]>>
+    objects: BTreeMap<String, Box<[u8]>>,
 }
 
 impl Linker {
@@ -39,19 +39,16 @@ impl Linker {
 
         let mut data = Vec::new();
 
-        let path_c = CString::new(path).map_err(|err| Error::Malformed(
-            format!("invalid path '{}': {}", path, err)
-        ))?;
+        let path_c = CString::new(path)
+            .map_err(|err| Error::Malformed(format!("invalid path '{}': {}", path, err)))?;
 
         {
             let flags = fcntl::O_RDONLY | fcntl::O_CLOEXEC;
-            let mut file = File::open(&path_c, flags).map_err(|err| Error::Malformed(
-                format!("failed to open '{}': {}", path, err)
-            ))?;
+            let mut file = File::open(&path_c, flags)
+                .map_err(|err| Error::Malformed(format!("failed to open '{}': {}", path, err)))?;
 
-            file.read_to_end(&mut data).map_err(|err| Error::Malformed(
-                format!("failed to read '{}': {}", path, err)
-            ))?;
+            file.read_to_end(&mut data)
+                .map_err(|err| Error::Malformed(format!("failed to read '{}': {}", path, err)))?;
         }
 
         self.load_data(name, data.into_boxed_slice())
@@ -64,7 +61,7 @@ impl Linker {
             //println!("{:#?}", elf);
 
             for library in elf.libraries.iter() {
-                if ! self.objects.contains_key(&library.to_string()) {
+                if !self.objects.contains_key(&library.to_string()) {
                     self.load_library(library)?;
                 }
             }
@@ -90,9 +87,9 @@ impl Linker {
                 println!("check {}", path);
 
                 let access = unsafe {
-                    let path_c = CString::new(path.as_bytes()).map_err(|err| Error::Malformed(
-                        format!("invalid path '{}': {}", path, err)
-                    ))?;
+                    let path_c = CString::new(path.as_bytes()).map_err(|err| {
+                        Error::Malformed(format!("invalid path '{}': {}", path, err))
+                    })?;
 
                     // TODO: Use R_OK | X_OK
                     unistd::access(path_c.as_ptr(), unistd::F_OK) == 0
@@ -104,9 +101,7 @@ impl Linker {
                 }
             }
 
-            Err(Error::Malformed(
-                format!("failed to locate '{}'", name)
-            ))
+            Err(Error::Malformed(format!("failed to locate '{}'", name)))
         }
     }
 
@@ -138,7 +133,8 @@ impl Linker {
                 for ph in elf.program_headers.iter() {
                     let voff = ph.p_vaddr as usize % PAGE_SIZE;
                     let vaddr = ph.p_vaddr as usize - voff;
-                    let vsize = ((ph.p_memsz as usize + voff + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE;
+                    let vsize =
+                        ((ph.p_memsz as usize + voff + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE;
 
                     match ph.p_type {
                         program_header::PT_LOAD => {
@@ -154,15 +150,15 @@ impl Linker {
                             } else {
                                 bounds_opt = Some((vaddr, vaddr + vsize));
                             }
-                        },
+                        }
                         program_header::PT_TLS => {
                             println!("  load tls {:#x}: {:x?}", vsize, ph);
                             tls_size += vsize;
                             if *elf_name == primary {
                                 tls_primary += vsize;
                             }
-                        },
-                        _ => ()
+                        }
+                        _ => (),
                     }
                 }
                 match bounds_opt {
@@ -182,12 +178,12 @@ impl Linker {
                     sys_mman::PROT_READ | sys_mman::PROT_WRITE,
                     sys_mman::MAP_ANONYMOUS | sys_mman::MAP_PRIVATE,
                     -1,
-                    0
+                    0,
                 );
-                if ptr as usize == !0 /* MAP_FAILED */ {
-                    return Err(Error::Malformed(
-                        format!("failed to map {}", elf_name)
-                    ));
+                if ptr as usize == !0
+                /* MAP_FAILED */
+                {
+                    return Err(Error::Malformed(format!("failed to map {}", elf_name)));
                 }
                 slice::from_raw_parts_mut(ptr as *mut u8, size)
             };
@@ -225,7 +221,7 @@ impl Linker {
 
             let mmap = match mmaps.get_mut(elf_name) {
                 Some(some) => some,
-                None => continue
+                None => continue,
             };
 
             println!("load {}", elf_name);
@@ -242,9 +238,12 @@ impl Linker {
                             let range = ph.file_range();
                             match object.get(range.clone()) {
                                 Some(some) => some,
-                                None => return Err(Error::Malformed(
-                                    format!("failed to read {:?}", range)
-                                )),
+                                None => {
+                                    return Err(Error::Malformed(format!(
+                                        "failed to read {:?}",
+                                        range
+                                    )))
+                                }
                             }
                         };
 
@@ -252,19 +251,28 @@ impl Linker {
                             let range = ph.p_vaddr as usize..ph.p_vaddr as usize + obj_data.len();
                             match mmap.get_mut(range.clone()) {
                                 Some(some) => some,
-                                None => return Err(Error::Malformed(
-                                    format!("failed to write {:?}", range)
-                                )),
+                                None => {
+                                    return Err(Error::Malformed(format!(
+                                        "failed to write {:?}",
+                                        range
+                                    )))
+                                }
                             }
                         };
 
-                        println!("  copy {:#x}, {:#x}: {:#x}, {:#x}", vaddr, vsize, voff, obj_data.len());
+                        println!(
+                            "  copy {:#x}, {:#x}: {:#x}, {:#x}",
+                            vaddr,
+                            vsize,
+                            voff,
+                            obj_data.len()
+                        );
 
                         mmap_data.copy_from_slice(obj_data);
-                    },
+                    }
                     program_header::PT_TLS => {
                         let valign = if ph.p_align > 0 {
-                            ((ph.p_memsz + (ph.p_align - 1))/ph.p_align) * ph.p_align
+                            ((ph.p_memsz + (ph.p_align - 1)) / ph.p_align) * ph.p_align
                         } else {
                             ph.p_memsz
                         } as usize;
@@ -277,10 +285,7 @@ impl Linker {
 
                         println!(
                             "  tls master {:p}, {:#x}: {:#x}, {:#x}",
-                            tcb_master.ptr,
-                            tcb_master.len,
-                            tcb_master.offset,
-                            valign,
+                            tcb_master.ptr, tcb_master.len, tcb_master.offset, valign,
                         );
 
                         if *elf_name == primary {
@@ -293,8 +298,8 @@ impl Linker {
                             tls_ranges.insert(elf_name, (tls_index, tcb_master.range()));
                             tcb_masters.push(tcb_master);
                         }
-                    },
-                    _ => ()
+                    }
+                    _ => (),
                 }
             }
         }
@@ -309,13 +314,18 @@ impl Linker {
         for (elf_name, elf) in elfs.iter() {
             let mmap = match mmaps.get_mut(elf_name) {
                 Some(some) => some,
-                None => continue
+                None => continue,
             };
 
             println!("link {}", elf_name);
 
             // Relocate
-            for rel in elf.dynrelas.iter().chain(elf.dynrels.iter()).chain(elf.pltrelocs.iter()) {
+            for rel in elf
+                .dynrelas
+                .iter()
+                .chain(elf.dynrels.iter())
+                .chain(elf.pltrelocs.iter())
+            {
                 // println!("  rel {}: {:x?}",
                 //     reloc::r_to_str(rel.r_type, elf.header.e_machine),
                 //     rel
@@ -326,13 +336,18 @@ impl Linker {
                 let b = mmap.as_mut_ptr() as usize;
 
                 let s = if rel.r_sym > 0 {
-                    let sym = elf.dynsyms.get(rel.r_sym).ok_or(Error::Malformed(
-                        format!("missing symbol for relocation {:?}", rel)
-                    ))?;
-
-                    let name = elf.dynstrtab.get(sym.st_name).ok_or(Error::Malformed(
-                        format!("missing name for symbol {:?}", sym)
-                    ))??;
+                    let sym = elf.dynsyms.get(rel.r_sym).ok_or(Error::Malformed(format!(
+                        "missing symbol for relocation {:?}",
+                        rel
+                    )))?;
+
+                    let name =
+                        elf.dynstrtab
+                            .get(sym.st_name)
+                            .ok_or(Error::Malformed(format!(
+                                "missing name for symbol {:?}",
+                                sym
+                            )))??;
 
                     if let Some(value) = globals.get(name) {
                         // println!("    sym {}: {:x?} = {:#x}", name, sym, value);
@@ -351,34 +366,37 @@ impl Linker {
                     (0, 0)
                 };
 
-                let ptr = unsafe {
-                    mmap.as_mut_ptr().add(rel.r_offset as usize)
-                };
+                let ptr = unsafe { mmap.as_mut_ptr().add(rel.r_offset as usize) };
 
                 let set_u64 = |value| {
                     // println!("    set_u64 {:#x}", value);
-                    unsafe { *(ptr as *mut u64) = value; }
+                    unsafe {
+                        *(ptr as *mut u64) = value;
+                    }
                 };
 
                 match rel.r_type {
                     reloc::R_X86_64_64 => {
                         set_u64((s + a) as u64);
-                    },
+                    }
                     reloc::R_X86_64_DTPMOD64 => {
                         set_u64(tm as u64);
-                    },
+                    }
                     reloc::R_X86_64_GLOB_DAT | reloc::R_X86_64_JUMP_SLOT => {
                         set_u64(s as u64);
-                    },
+                    }
                     reloc::R_X86_64_RELATIVE => {
                         set_u64((b + a) as u64);
-                    },
+                    }
                     reloc::R_X86_64_TPOFF64 => {
                         set_u64((s + a).wrapping_sub(t) as u64);
-                    },
+                    }
                     reloc::R_X86_64_IRELATIVE => (), // Handled below
                     _ => {
-                        println!("    {} unsupported", reloc::r_to_str(rel.r_type, elf.header.e_machine));
+                        println!(
+                            "    {} unsupported",
+                            reloc::r_to_str(rel.r_type, elf.header.e_machine)
+                        );
                     }
                 }
             }
@@ -389,7 +407,8 @@ impl Linker {
                     program_header::PT_LOAD => {
                         let voff = ph.p_vaddr as usize % PAGE_SIZE;
                         let vaddr = ph.p_vaddr as usize - voff;
-                        let vsize = ((ph.p_memsz as usize + voff + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE;
+                        let vsize =
+                            ((ph.p_memsz as usize + voff + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE;
 
                         let mut prot = 0;
 
@@ -408,20 +427,17 @@ impl Linker {
                             let ptr = mmap.as_mut_ptr().add(vaddr);
                             println!("  prot {:#x}, {:#x}: {:p}, {:#x}", vaddr, vsize, ptr, prot);
 
-                            sys_mman::mprotect(
-                                ptr as *mut c_void,
-                                vsize,
-                                prot
-                            )
+                            sys_mman::mprotect(ptr as *mut c_void, vsize, prot)
                         };
 
                         if res < 0 {
-                            return Err(Error::Malformed(
-                                format!("failed to mprotect {}", elf_name)
-                            ));
+                            return Err(Error::Malformed(format!(
+                                "failed to mprotect {}",
+                                elf_name
+                            )));
                         }
-                    },
-                    _ => ()
+                    }
+                    _ => (),
                 }
             }
         }
@@ -436,7 +452,7 @@ impl Linker {
         for (elf_name, elf) in elfs.iter() {
             let mmap = match mmaps.get_mut(elf_name) {
                 Some(some) => some,
-                None => continue
+                None => continue,
             };
 
             println!("entry {}", elf_name);
@@ -446,7 +462,12 @@ impl Linker {
             }
 
             // Relocate
-            for rel in elf.dynrelas.iter().chain(elf.dynrels.iter()).chain(elf.pltrelocs.iter()) {
+            for rel in elf
+                .dynrelas
+                .iter()
+                .chain(elf.dynrels.iter())
+                .chain(elf.pltrelocs.iter())
+            {
                 // println!("  rel {}: {:x?}",
                 //     reloc::r_to_str(rel.r_type, elf.header.e_machine),
                 //     rel
@@ -456,21 +477,21 @@ impl Linker {
 
                 let b = mmap.as_mut_ptr() as usize;
 
-                let ptr = unsafe {
-                    mmap.as_mut_ptr().add(rel.r_offset as usize)
-                };
+                let ptr = unsafe { mmap.as_mut_ptr().add(rel.r_offset as usize) };
 
                 let set_u64 = |value| {
                     // println!("    set_u64 {:#x}", value);
-                    unsafe { *(ptr as *mut u64) = value; }
+                    unsafe {
+                        *(ptr as *mut u64) = value;
+                    }
                 };
 
                 match rel.r_type {
                     reloc::R_X86_64_IRELATIVE => unsafe {
-                        let f: unsafe extern "C" fn () -> u64 = mem::transmute(b + a);
+                        let f: unsafe extern "C" fn() -> u64 = mem::transmute(b + a);
                         set_u64(f());
                     },
-                    _ => ()
+                    _ => (),
                 }
             }
 
@@ -480,7 +501,8 @@ impl Linker {
                     program_header::PT_LOAD => {
                         let voff = ph.p_vaddr as usize % PAGE_SIZE;
                         let vaddr = ph.p_vaddr as usize - voff;
-                        let vsize = ((ph.p_memsz as usize + voff + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE;
+                        let vsize =
+                            ((ph.p_memsz as usize + voff + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE;
 
                         let mut prot = 0;
 
@@ -499,26 +521,21 @@ impl Linker {
                             let ptr = mmap.as_mut_ptr().add(vaddr);
                             println!("  prot {:#x}, {:#x}: {:p}, {:#x}", vaddr, vsize, ptr, prot);
 
-                            sys_mman::mprotect(
-                                ptr as *mut c_void,
-                                vsize,
-                                prot
-                            )
+                            sys_mman::mprotect(ptr as *mut c_void, vsize, prot)
                         };
 
                         if res < 0 {
-                            return Err(Error::Malformed(
-                                format!("failed to mprotect {}", elf_name)
-                            ));
+                            return Err(Error::Malformed(format!(
+                                "failed to mprotect {}",
+                                elf_name
+                            )));
                         }
-                    },
-                    _ => ()
+                    }
+                    _ => (),
                 }
             }
         }
 
-        entry_opt.ok_or(Error::Malformed(
-            format!("missing entry for {}", primary)
-        ))
+        entry_opt.ok_or(Error::Malformed(format!("missing entry for {}", primary)))
     }
 }
diff --git a/src/ld_so/start.rs b/src/ld_so/start.rs
index 120c57967..1407639d8 100644
--- a/src/ld_so/start.rs
+++ b/src/ld_so/start.rs
@@ -61,7 +61,7 @@ pub extern "C" fn relibc_ld_so_start(sp: &'static mut Stack) -> usize {
                     if let Some(value) = parts.next() {
                         match key {
                             "LD_LIBRARY_PATH" => library_path = value,
-                            _ => ()
+                            _ => (),
                         }
                     }
                 }
@@ -120,7 +120,7 @@ pub extern "C" fn relibc_ld_so_start(sp: &'static mut Stack) -> usize {
             eprintln!("ld.so: entry '{}': {:#x}", path, entry);
             //unistd::_exit(0);
             entry
-        },
+        }
         Err(err) => {
             eprintln!("ld.so: failed to link '{}': {}", path, err);
             unistd::_exit(1);
diff --git a/src/ld_so/tcb.rs b/src/ld_so/tcb.rs
index 7bd67fea4..157876828 100644
--- a/src/ld_so/tcb.rs
+++ b/src/ld_so/tcb.rs
@@ -1,6 +1,6 @@
 use alloc::boxed::Box;
-use core::{mem, ptr, slice};
 use core::ops::Range;
+use core::{mem, ptr, slice};
 use goblin::error::{Error, Result};
 
 use header::sys_mman;
@@ -20,10 +20,7 @@ pub struct Master {
 impl Master {
     /// The initial data for this TLS region
     pub unsafe fn data(&self) -> &'static [u8] {
-        slice::from_raw_parts(
-            self.ptr,
-            self.len
-        )
+        slice::from_raw_parts(self.ptr, self.len)
     }
 
     /// The region of TLS that the master will initialize
@@ -56,14 +53,17 @@ impl Tcb {
 
         let tcb_ptr = tcb_page.as_mut_ptr() as *mut Self;
         // println!("New TCB: {:p}", tcb_ptr);
-        ptr::write(tcb_ptr, Self {
-            tls_end: tls.as_mut_ptr().add(tls.len()),
-            tls_len: tls.len(),
-            tcb_ptr: tcb_ptr,
-            tcb_len: tcb_page.len(),
-            masters_ptr: ptr::null_mut(),
-            masters_len: 0,
-        });
+        ptr::write(
+            tcb_ptr,
+            Self {
+                tls_end: tls.as_mut_ptr().add(tls.len()),
+                tls_len: tls.len(),
+                tcb_ptr: tcb_ptr,
+                tcb_len: tcb_page.len(),
+                masters_ptr: ptr::null_mut(),
+                masters_len: 0,
+            },
+        );
 
         Ok(&mut *tcb_ptr)
     }
@@ -86,7 +86,7 @@ impl Tcb {
         } else {
             Some(slice::from_raw_parts_mut(
                 self.tls_end.offset(-(self.tls_len as isize)),
-                self.tls_len
+                self.tls_len,
             ))
         }
     }
@@ -98,7 +98,7 @@ impl Tcb {
         } else {
             Some(slice::from_raw_parts_mut(
                 self.masters_ptr,
-                self.masters_len / mem::size_of::<Master>()
+                self.masters_len / mem::size_of::<Master>(),
             ))
         }
     }
@@ -121,9 +121,7 @@ impl Tcb {
 
                         tls_data.copy_from_slice(data);
                     } else {
-                        return Err(Error::Malformed(
-                            format!("failed to copy tls master {}", i)
-                        ));
+                        return Err(Error::Malformed(format!("failed to copy tls master {}", i)));
                     }
                 }
             }
@@ -152,12 +150,12 @@ impl Tcb {
             sys_mman::PROT_READ | sys_mman::PROT_WRITE,
             sys_mman::MAP_ANONYMOUS | sys_mman::MAP_PRIVATE,
             -1,
-            0
+            0,
         );
-        if ptr as usize == !0 /* MAP_FAILED */ {
-            return Err(Error::Malformed(
-                format!("failed to map tls")
-            ));
+        if ptr as usize == !0
+        /* MAP_FAILED */
+        {
+            return Err(Error::Malformed(format!("failed to map tls")));
         }
         Ok(slice::from_raw_parts_mut(ptr as *mut u8, size))
     }
@@ -180,7 +178,7 @@ impl Tcb {
         Ok((
             tls,
             //TODO: Consider allocating TCB as part of TLS
-            slice::from_raw_parts_mut(tcb_addr as *mut u8, PAGE_SIZE)
+            slice::from_raw_parts_mut(tcb_addr as *mut u8, PAGE_SIZE),
         ))
     }
 
diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs
index c3018d25a..fcd1f3b13 100644
--- a/src/platform/linux/mod.rs
+++ b/src/platform/linux/mod.rs
@@ -193,10 +193,7 @@ impl Pal for Sys {
         write!(proc_path, "{}", fildes).unwrap();
         proc_path.push(0);
 
-        Self::readlink(
-            CStr::from_bytes_with_nul(&proc_path).unwrap(),
-            out
-        )
+        Self::readlink(CStr::from_bytes_with_nul(&proc_path).unwrap(), out)
     }
 
     fn fsync(fildes: c_int) -> c_int {
@@ -329,11 +326,7 @@ impl Pal for Sys {
 
     #[cfg(target_arch = "x86_64")]
     unsafe fn pte_clone(stack: *mut usize) -> pid_t {
-        let flags =
-            CLONE_VM |
-            CLONE_FS |
-            CLONE_FILES |
-            CLONE_SIGHAND;
+        let flags = CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND;
         let pid;
         asm!("
             # Call clone syscall
diff --git a/src/platform/pte.rs b/src/platform/pte.rs
index 3cf3e7e06..cdbc60b64 100644
--- a/src/platform/pte.rs
+++ b/src/platform/pte.rs
@@ -7,7 +7,7 @@ use core::{intrinsics, ptr};
 
 use header::sys_mman;
 use header::time::timespec;
-use ld_so::tcb::{Tcb, Master};
+use ld_so::tcb::{Master, Tcb};
 use mutex::{FUTEX_WAIT, FUTEX_WAKE};
 use platform::types::{c_int, c_uint, c_void, pid_t, size_t};
 use platform::{Pal, Sys};
@@ -67,11 +67,11 @@ unsafe extern "C" fn pte_osThreadShim(
     mutex: pte_osMutexHandle,
     tls_size: usize,
     tls_masters_ptr: *mut Master,
-    tls_masters_len: usize
+    tls_masters_len: usize,
 ) {
     // The kernel allocated TLS does not have masters set, so do not attempt to copy it.
     // It will be copied by the kernel.
-    if ! tls_masters_ptr.is_null() {
+    if !tls_masters_ptr.is_null() {
         let tcb = Tcb::new(tls_size).unwrap();
         tcb.masters_ptr = tls_masters_ptr;
         tcb.masters_len = tls_masters_len;
@@ -107,7 +107,7 @@ pub unsafe extern "C" fn pte_osThreadCreate(
         sys_mman::PROT_READ | sys_mman::PROT_WRITE,
         sys_mman::MAP_SHARED | sys_mman::MAP_ANONYMOUS,
         -1,
-        0
+        0,
     );
     if stack_base as isize == -1 {
         return PTE_OS_GENERAL_FAILURE;
@@ -154,7 +154,10 @@ pub unsafe extern "C" fn pte_osThreadCreate(
     if pid_stacks.is_none() {
         pid_stacks = Some(BTreeMap::new());
     }
-    pid_stacks.as_mut().unwrap().insert(id, (stack_base, stack_size));
+    pid_stacks
+        .as_mut()
+        .unwrap()
+        .insert(id, (stack_base, stack_size));
     pte_osMutexUnlock(&mut pid_stacks_lock);
 
     *ppte_osThreadHandle = id;
diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs
index a2dfa9667..a6092cc7a 100644
--- a/src/platform/redox/mod.rs
+++ b/src/platform/redox/mod.rs
@@ -765,6 +765,11 @@ impl Pal for Sys {
                 time.tv_nsec -= 1000000000;
             }
 
+            // Teehee
+            if timeout == 0 {
+                time.tv_sec += 1;
+            }
+
             if timeout_file.write(&time).is_err() {
                 return -1;
             }
@@ -817,12 +822,11 @@ impl Pal for Sys {
 
     #[cfg(target_arch = "x86_64")]
     unsafe fn pte_clone(stack: *mut usize) -> pid_t {
-        let flags =
-            syscall::CLONE_VM |
-            syscall::CLONE_FS |
-            syscall::CLONE_FILES |
-            syscall::CLONE_SIGHAND |
-            syscall::CLONE_STACK;
+        let flags = syscall::CLONE_VM
+            | syscall::CLONE_FS
+            | syscall::CLONE_FILES
+            | syscall::CLONE_SIGHAND
+            | syscall::CLONE_STACK;
         let pid;
         asm!("
             # Call clone syscall
diff --git a/src/start.rs b/src/start.rs
index 79c22d8e7..af8477bcd 100644
--- a/src/start.rs
+++ b/src/start.rs
@@ -3,8 +3,8 @@ use core::{intrinsics, ptr};
 
 use header::{stdio, stdlib};
 use platform;
-use platform::{Pal, Sys};
 use platform::types::*;
+use platform::{Pal, Sys};
 
 #[repr(C)]
 pub struct Stack {
@@ -49,7 +49,7 @@ unsafe fn copy_string_array(array: *const *const c_char, len: usize) -> Vec<*mut
 // other. This will test that the current system is compatible with the current binary
 #[no_mangle]
 pub unsafe fn relibc_verify_host() {
-    if ! Sys::verify() {
+    if !Sys::verify() {
         intrinsics::abort();
     }
 }
diff --git a/va_list b/va_list
deleted file mode 160000
index 1e7a8b6b6..000000000
--- a/va_list
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 1e7a8b6b6f8171caab6c8c531ee9f1983bc2ebe0
-- 
GitLab