libstd/sys/*/net: very minor clean up of cvt*() utility functions.

Signed-off-by: NODA, Kai <nodakai@gmail.com>
This commit is contained in:
NODA, Kai 2014-11-06 00:40:08 +08:00
parent 346d0d5175
commit bf94aefd5a

View File

@ -61,27 +61,28 @@ fn last_error() -> io::Error {
} }
/// Checks if the signed integer is the Windows constant `SOCKET_ERROR` (-1) /// Checks if the signed integer is the Windows constant `SOCKET_ERROR` (-1)
/// and if so, returns the last error from the Windows socket interface. . This /// and if so, returns the last error from the Windows socket interface. This
/// function must be called before another call to the socket API is made. /// function must be called before another call to the socket API is made.
pub fn cvt<T: One + Neg<Output=T> + PartialEq>(t: T) -> io::Result<T> { pub fn cvt<T: One + PartialEq + Neg<Output=T>>(t: T) -> io::Result<T> {
let one: T = T::one(); if t == -T::one() {
if t == -one {
Err(last_error()) Err(last_error())
} else { } else {
Ok(t) Ok(t)
} }
} }
/// Provides the functionality of `cvt` for the return values of `getaddrinfo` /// A variant of `cvt` for `getaddrinfo` which return 0 for a success.
/// and similar, meaning that they return an error if the return value is 0.
pub fn cvt_gai(err: c_int) -> io::Result<()> { pub fn cvt_gai(err: c_int) -> io::Result<()> {
if err == 0 { return Ok(()) } if err == 0 {
cvt(err).map(|_| ()) Ok(())
} else {
Err(last_error())
}
} }
/// Provides the functionality of `cvt` for a closure. /// Just to provide the same interface as sys/unix/net.rs
pub fn cvt_r<T, F>(mut f: F) -> io::Result<T> pub fn cvt_r<T, F>(mut f: F) -> io::Result<T>
where F: FnMut() -> T, T: One + Neg<Output=T> + PartialEq where T: One + PartialEq + Neg<Output=T>, F: FnMut() -> T
{ {
cvt(f()) cvt(f())
} }