Skip to content
Permalink
Browse files

libstd::sys refactor

  • Loading branch information...
arcnmx committed Nov 2, 2015
1 parent 9c2489b commit 4aefe0d0833e635a53487c19ab34aa585c3b2212
Showing with 5,679 additions and 4,999 deletions.
  1. +6 −2 src/libstd/{sys/common/at_exit_imp.rs → at_exit.rs}
  2. +29 −33 src/libstd/{sys/common → }/backtrace.rs
  3. +12 −251 src/libstd/dynamic_lib.rs
  4. +37 −194 src/libstd/env.rs
  5. +5 −4 src/libstd/ffi/c_str.rs
  6. +19 −26 src/libstd/ffi/os_str.rs
  7. +63 −37 src/libstd/fs.rs
  8. +33 −15 src/libstd/io/error.rs
  9. +2 −2 src/libstd/io/lazy.rs
  10. +2 −0 src/libstd/io/mod.rs
  11. +11 −10 src/libstd/{sys/common/io.rs → io/read_uninitialized.rs}
  12. +21 −38 src/libstd/io/stdio.rs
  13. +30 −17 src/libstd/lib.rs
  14. +46 −55 src/libstd/net/addr.rs
  15. +47 −40 src/libstd/net/ip.rs
  16. +10 −24 src/libstd/net/mod.rs
  17. +67 −45 src/libstd/net/tcp.rs
  18. +36 −24 src/libstd/net/udp.rs
  19. +3 −3 src/libstd/num/f32.rs
  20. +2 −2 src/libstd/num/f64.rs
  21. +42 −34 src/libstd/panicking.rs
  22. +15 −139 src/libstd/path.rs
  23. +75 −127 src/libstd/process.rs
  24. +3 −2 src/libstd/rand/mod.rs
  25. +1 −331 src/libstd/rand/os.rs
  26. +0 −70 src/libstd/rt.rs
  27. +16 −16 src/libstd/sync/condvar.rs
  28. +4 −2 src/libstd/sync/mod.rs
  29. +3 −2 src/libstd/sync/mutex.rs
  30. +3 −3 src/libstd/{sys/common → sync}/poison.rs
  31. +5 −4 src/libstd/{sys/common → sync}/remutex.rs
  32. +5 −4 src/libstd/sync/rwlock.rs
  33. +5 −0 src/libstd/sys/c.rs
  34. +19 −0 src/libstd/sys/common/c.rs
  35. +0 −63 src/libstd/sys/common/condvar.rs
  36. +1 −1 src/libstd/sys/common/dwarf/eh.rs
  37. +41 −0 src/libstd/sys/common/env.rs
  38. +24 −0 src/libstd/sys/common/error.rs
  39. +11 −14 src/libstd/sys/common/gnu/libbacktrace.rs
  40. +0 −2 src/libstd/sys/common/libunwind.rs
  41. +14 −82 src/libstd/sys/common/mod.rs
  42. +0 −61 src/libstd/sys/common/mutex.rs
  43. +9 −437 src/libstd/sys/common/net.rs
  44. +135 −0 src/libstd/sys/common/net_bsd/addr.rs
  45. +125 −0 src/libstd/sys/common/net_bsd/ip.rs
  46. +314 −0 src/libstd/sys/common/net_bsd/mod.rs
  47. +214 −0 src/libstd/sys/common/os_str.rs
  48. +8 −0 src/libstd/sys/common/process.rs
  49. +35 −0 src/libstd/sys/common/rt.rs
  50. +0 −82 src/libstd/sys/common/rwlock.rs
  51. +7 −0 src/libstd/sys/common/stdio.rs
  52. +0 −24 src/libstd/sys/common/thread.rs
  53. +0 −62 src/libstd/sys/common/thread_info.rs
  54. +118 −71 src/libstd/sys/common/thread_local.rs
  55. +6 −6 src/libstd/sys/common/unwind/gcc.rs
  56. +27 −20 src/libstd/sys/common/unwind/mod.rs
  57. +1 −1 src/libstd/sys/common/unwind/seh64_gnu.rs
  58. +0 −46 src/libstd/sys/common/util.rs
  59. +56 −0 src/libstd/sys/deps.rs
  60. +28 −0 src/libstd/sys/error.rs
  61. +131 −0 src/libstd/sys/inner.rs
  62. +38 −0 src/libstd/sys/mod.rs
  63. +23 −0 src/libstd/sys/net.rs
  64. 0 src/libstd/{ → sys}/os/android/mod.rs
  65. 0 src/libstd/{ → sys}/os/android/raw.rs
  66. 0 src/libstd/{ → sys}/os/bitrig/mod.rs
  67. 0 src/libstd/{ → sys}/os/bitrig/raw.rs
  68. 0 src/libstd/{ → sys}/os/dragonfly/mod.rs
  69. 0 src/libstd/{ → sys}/os/dragonfly/raw.rs
  70. 0 src/libstd/{ → sys}/os/freebsd/mod.rs
  71. 0 src/libstd/{ → sys}/os/freebsd/raw.rs
  72. 0 src/libstd/{ → sys}/os/ios/mod.rs
  73. 0 src/libstd/{ → sys}/os/ios/raw.rs
  74. +1 −1 src/libstd/{ → sys}/os/linux/mod.rs
  75. +4 −4 src/libstd/{ → sys}/os/linux/raw.rs
  76. 0 src/libstd/{ → sys}/os/macos/mod.rs
  77. 0 src/libstd/{ → sys}/os/macos/raw.rs
  78. +3 −3 src/libstd/{ → sys}/os/mod.rs
  79. 0 src/libstd/{ → sys}/os/nacl/mod.rs
  80. 0 src/libstd/{ → sys}/os/nacl/raw.rs
  81. 0 src/libstd/{ → sys}/os/netbsd/mod.rs
  82. 0 src/libstd/{ → sys}/os/netbsd/raw.rs
  83. 0 src/libstd/{ → sys}/os/openbsd/mod.rs
  84. 0 src/libstd/{ → sys}/os/openbsd/raw.rs
  85. +8 −4 src/libstd/{ → sys}/os/raw.rs
  86. +5 −4 src/libstd/sys/{unix/ext → os/unix}/ffi.rs
  87. +29 −30 src/libstd/sys/{unix/ext → os/unix}/fs.rs
  88. +14 −17 src/libstd/sys/{unix/ext → os/unix}/io.rs
  89. +1 −1 src/libstd/sys/{unix/ext → os/unix}/mod.rs
  90. +10 −10 src/libstd/sys/{unix/ext → os/unix}/process.rs
  91. +5 −5 src/libstd/sys/{windows/ext → os/windows}/ffi.rs
  92. +5 −3 src/libstd/sys/{windows/ext → os/windows}/fs.rs
  93. +14 −13 src/libstd/sys/{windows/ext → os/windows}/io.rs
  94. 0 src/libstd/sys/{windows/ext → os/windows}/mod.rs
  95. +10 −10 src/libstd/sys/{windows/ext → os/windows}/process.rs
  96. 0 src/libstd/sys/{windows/ext → os/windows}/raw.rs
  97. +5 −0 src/libstd/sys/path.rs
  98. +23 −0 src/libstd/sys/process.rs
  99. +66 −0 src/libstd/sys/thread_local.rs
  100. +8 −16 src/libstd/sys/{common → unix}/args.rs
  101. +16 −1 src/libstd/sys/unix/backtrace/mod.rs
  102. +1 −1 src/libstd/sys/unix/backtrace/printing/gnu.rs
  103. +11 −19 src/libstd/sys/unix/backtrace/tracing/gcc_s.rs
  104. +6 −0 src/libstd/sys/unix/c.rs
  105. +13 −11 src/libstd/sys/unix/condvar.rs
  106. +6 −1 src/libstd/{rtdeps.rs → sys/unix/deps.rs}
  107. +123 −0 src/libstd/sys/unix/dynamic_lib.rs
  108. +543 −0 src/libstd/sys/unix/env.rs
  109. +125 −0 src/libstd/sys/unix/error.rs
  110. +24 −40 src/libstd/sys/unix/fd.rs
  111. +126 −170 src/libstd/sys/unix/fs.rs
  112. +17 −60 src/libstd/sys/unix/mod.rs
  113. +25 −27 src/libstd/sys/unix/mutex.rs
  114. +52 −51 src/libstd/sys/unix/net.rs
  115. +0 −488 src/libstd/sys/unix/os.rs
  116. +0 −80 src/libstd/sys/unix/os_str.rs
  117. +21 −0 src/libstd/sys/unix/path.rs
  118. +21 −14 src/libstd/sys/unix/pipe.rs
  119. +216 −165 src/libstd/sys/unix/process.rs
  120. +225 −0 src/libstd/sys/unix/rand.rs
  121. +2 −2 src/libstd/sys/unix/{ext → }/raw.rs
  122. +61 −0 src/libstd/sys/unix/rt.rs
  123. +9 −8 src/libstd/sys/unix/rwlock.rs
  124. +9 −11 src/libstd/sys/unix/stack_overflow.rs
  125. +30 −29 src/libstd/sys/unix/stdio.rs
  126. +4 −0 src/libstd/sys/unix/sync.rs
  127. +134 −126 src/libstd/sys/unix/thread.rs
  128. +208 −18 src/libstd/sys/unix/thread_local.rs
  129. +20 −24 src/libstd/sys/unix/time.rs
  130. +15 −2 src/libstd/sys/windows/backtrace.rs
  131. +86 −0 src/libstd/sys/windows/c.rs
  132. +1 −1 src/libstd/sys/windows/compat.rs
  133. +7 −7 src/libstd/sys/windows/condvar.rs
  134. +13 −0 src/libstd/sys/windows/deps.rs
  135. +110 −0 src/libstd/sys/windows/dynamic_lib.rs
  136. +69 −134 src/libstd/sys/windows/{os.rs → env.rs}
  137. +139 −0 src/libstd/sys/windows/error.rs
  138. +91 −87 src/libstd/sys/windows/fs.rs
  139. +17 −47 src/libstd/sys/windows/handle.rs
  140. +40 −79 src/libstd/sys/windows/mod.rs
  141. +12 −9 src/libstd/sys/windows/mutex.rs
  142. +43 −23 src/libstd/sys/windows/net.rs
  143. +102 −0 src/libstd/sys/windows/path.rs
  144. +20 −20 src/libstd/sys/windows/pipe.rs
  145. +4 −4 src/libstd/sys/windows/printing/gnu.rs
  146. +4 −4 src/libstd/sys/windows/printing/msvc.rs
  147. +182 −110 src/libstd/sys/windows/process.rs
  148. +93 −0 src/libstd/sys/windows/rand.rs
  149. +34 −0 src/libstd/sys/windows/rt.rs
  150. +7 −7 src/libstd/sys/windows/rwlock.rs
  151. +2 −2 src/libstd/sys/windows/stack_overflow.rs
  152. +49 −56 src/libstd/sys/windows/stdio.rs
  153. +44 −58 src/libstd/sys/windows/thread.rs
  154. +78 −47 src/libstd/sys/windows/thread_local.rs
  155. +5 −7 src/libstd/sys/windows/time.rs
  156. +1 −1 src/libstd/sys/{common → }/wtf8.rs
  157. +27 −0 src/libstd/thread/info.rs
  158. +9 −246 src/libstd/thread/local.rs
  159. +33 −28 src/libstd/thread/mod.rs
  160. +4 −20 src/libstd/thread/scoped_tls.rs
  161. +32 −0 src/libstd/thread/start.rs
  162. +3 −3 src/libstd/time/duration.rs
  163. +1 −2 src/libstd/time/mod.rs
@@ -12,10 +12,10 @@
//!
//! Documentation can be found on the `rt::at_exit` function.

use sys::sync::Mutex;
use alloc::boxed::FnBox;
use boxed::Box;
use ptr;
use sys_common::mutex::Mutex;
use vec::Vec;

type Queue = Vec<Box<FnBox()>>;
@@ -67,7 +67,7 @@ pub fn cleanup() {
}
}

pub fn push(f: Box<FnBox()>) -> bool {
fn push(f: Box<FnBox()>) -> bool {
let mut ret = true;
unsafe {
LOCK.lock();
@@ -80,3 +80,7 @@ pub fn push(f: Box<FnBox()>) -> bool {
}
ret
}

pub fn at_exit<F: FnOnce() + Send + 'static>(f: F) -> Result<(), ()> {
if push(Box::new(f)) {Ok(())} else {Err(())}
}
@@ -10,25 +10,46 @@

#![cfg_attr(target_os = "nacl", allow(dead_code))]

use env;
use io::prelude::*;
use sys::inner::*;
use sys::error as sys_error;
use io;
use libc;
use str;
use sync::atomic::{self, Ordering};

pub use sys::backtrace::write;

#[cfg(target_pointer_width = "64")]
pub const HEX_WIDTH: usize = 18;

#[cfg(target_pointer_width = "32")]
pub const HEX_WIDTH: usize = 10;

pub fn output(w: &mut Write, idx: isize, addr: *mut (),
s: Option<&[u8]>) -> sys_error::Result<()> {
try!(write!(w, " {:2}: {:2$?} - ", idx, addr, HEX_WIDTH).map_err(IntoInner::into_inner));
match s.and_then(|s| str::from_utf8(s).ok()) {
Some(string) => try!(demangle(w, string).map_err(IntoInner::into_inner)),
None => try!(write!(w, "<unknown>").map_err(IntoInner::into_inner)),
}
w.write_all(&['\n' as u8]).map_err(IntoInner::into_inner)
}

pub fn output_fileline(w: &mut Write, file: &[u8], line: i32,
more: bool) -> sys_error::Result<()> {
let file = str::from_utf8(file).unwrap_or("<unknown>");
// prior line: " ##: {:2$} - func"
try!(write!(w, " {:3$}at {}:{}", "", file, line, HEX_WIDTH).map_err(IntoInner::into_inner));
if more {
try!(write!(w, " <... and possibly more>").map_err(IntoInner::into_inner));
}
w.write_all(&['\n' as u8]).map_err(IntoInner::into_inner)
}

// For now logging is turned off by default, and this function checks to see
// whether the magical environment variable is present to see if it's turned on.
pub fn log_enabled() -> bool {
static ENABLED: atomic::AtomicIsize = atomic::AtomicIsize::new(0);
use env;
use sync::atomic::{AtomicIsize, Ordering};

static ENABLED: AtomicIsize = AtomicIsize::new(0);
match ENABLED.load(Ordering::SeqCst) {
1 => return false,
2 => return true,
@@ -37,36 +58,12 @@ pub fn log_enabled() -> bool {

let val = match env::var_os("RUST_BACKTRACE") {
Some(..) => 2,
None => 1,
_ => 1,
};
ENABLED.store(val, Ordering::SeqCst);
val == 2
}

// These output functions should now be used everywhere to ensure consistency.
pub fn output(w: &mut Write, idx: isize, addr: *mut libc::c_void,
s: Option<&[u8]>) -> io::Result<()> {
try!(write!(w, " {:2}: {:2$?} - ", idx, addr, HEX_WIDTH));
match s.and_then(|s| str::from_utf8(s).ok()) {
Some(string) => try!(demangle(w, string)),
None => try!(write!(w, "<unknown>")),
}
w.write_all(&['\n' as u8])
}

#[allow(dead_code)]
pub fn output_fileline(w: &mut Write, file: &[u8], line: libc::c_int,
more: bool) -> io::Result<()> {
let file = str::from_utf8(file).unwrap_or("<unknown>");
// prior line: " ##: {:2$} - func"
try!(write!(w, " {:3$}at {}:{}", "", file, line, HEX_WIDTH));
if more {
try!(write!(w, " <... and possibly more>"));
}
w.write_all(&['\n' as u8])
}


// All rust symbols are in theory lists of "::"-separated identifiers. Some
// assemblers, however, can't handle these characters in symbol names. To get
// around this, we use C++-style mangling. The mangling method is:
@@ -190,10 +187,9 @@ pub fn demangle(writer: &mut Write, s: &str) -> io::Result<()> {
#[cfg(test)]
mod tests {
use prelude::v1::*;
use sys_common;
macro_rules! t { ($a:expr, $b:expr) => ({
let mut m = Vec::new();
sys_common::backtrace::demangle(&mut m, $a).unwrap();
super::demangle(&mut m, $a).unwrap();
assert_eq!(String::from_utf8(m).unwrap(), $b);
}) }

Oops, something went wrong.

0 comments on commit 4aefe0d

Please sign in to comment.
You can’t perform that action at this time.