diff options
Diffstat (limited to 'src/libstd/sys/common')
| -rw-r--r-- | src/libstd/sys/common/io.rs | 43 | ||||
| -rw-r--r-- | src/libstd/sys/common/net.rs | 21 |
2 files changed, 44 insertions, 20 deletions
diff --git a/src/libstd/sys/common/io.rs b/src/libstd/sys/common/io.rs index 9f2f0df3a64..7b08852ba51 100644 --- a/src/libstd/sys/common/io.rs +++ b/src/libstd/sys/common/io.rs @@ -52,13 +52,52 @@ pub unsafe fn read_to_end_uninitialized(r: &mut Read, buf: &mut Vec<u8>) -> io:: } #[cfg(test)] +pub mod test { + use prelude::v1::*; + use path::{Path, PathBuf}; + use env; + use rand::{self, Rng}; + use fs; + + pub struct TempDir(PathBuf); + + impl TempDir { + pub fn join(&self, path: &str) -> PathBuf { + let TempDir(ref p) = *self; + p.join(path) + } + + pub fn path<'a>(&'a self) -> &'a Path { + let TempDir(ref p) = *self; + p + } + } + + impl Drop for TempDir { + fn drop(&mut self) { + // Gee, seeing how we're testing the fs module I sure hope that we + // at least implement this correctly! + let TempDir(ref p) = *self; + fs::remove_dir_all(p).unwrap(); + } + } + + pub fn tmpdir() -> TempDir { + let p = env::temp_dir(); + let mut r = rand::thread_rng(); + let ret = p.join(&format!("rust-{}", r.next_u32())); + fs::create_dir(&ret).unwrap(); + TempDir(ret) + } +} + +#[cfg(test)] mod tests { use prelude::v1::*; use io::prelude::*; use super::*; use io; use io::{ErrorKind, Take, Repeat, repeat}; - use test; use slice::from_raw_parts; struct ErrorRepeat { @@ -129,7 +168,7 @@ mod tests { } #[bench] - fn bench_uninitialized(b: &mut test::Bencher) { + fn bench_uninitialized(b: &mut ::test::Bencher) { b.iter(|| { let mut lr = repeat(1).take(10000000); let mut vec = Vec::with_capacity(1024); diff --git a/src/libstd/sys/common/net.rs b/src/libstd/sys/common/net.rs index 42714feb921..3fa70d0ce4b 100644 --- a/src/libstd/sys/common/net.rs +++ b/src/libstd/sys/common/net.rs @@ -257,12 +257,7 @@ impl TcpStream { } pub fn take_error(&self) -> io::Result<Option<io::Error>> { - let raw: c_int = try!(getsockopt(&self.inner, c::SOL_SOCKET, c::SO_ERROR)); - if raw == 0 { - Ok(None) - } else { - Ok(Some(io::Error::from_raw_os_error(raw as i32))) - } + self.inner.take_error() } pub fn set_nonblocking(&self, nonblocking: bool) -> io::Result<()> { @@ -367,12 +362,7 @@ impl TcpListener { } pub fn take_error(&self) -> io::Result<Option<io::Error>> { - let raw: c_int = try!(getsockopt(&self.inner, c::SOL_SOCKET, c::SO_ERROR)); - if raw == 0 { - Ok(None) - } else { - Ok(Some(io::Error::from_raw_os_error(raw as i32))) - } + self.inner.take_error() } pub fn set_nonblocking(&self, nonblocking: bool) -> io::Result<()> { @@ -564,12 +554,7 @@ impl UdpSocket { } pub fn take_error(&self) -> io::Result<Option<io::Error>> { - let raw: c_int = try!(getsockopt(&self.inner, c::SOL_SOCKET, c::SO_ERROR)); - if raw == 0 { - Ok(None) - } else { - Ok(Some(io::Error::from_raw_os_error(raw as i32))) - } + self.inner.take_error() } pub fn set_nonblocking(&self, nonblocking: bool) -> io::Result<()> { |
