diff options
Diffstat (limited to 'src/libstd/sys/unix/ext.rs')
| -rw-r--r-- | src/libstd/sys/unix/ext.rs | 35 | 
1 files changed, 34 insertions, 1 deletions
| diff --git a/src/libstd/sys/unix/ext.rs b/src/libstd/sys/unix/ext.rs index 0e4a9d1b307..9c659b56d93 100644 --- a/src/libstd/sys/unix/ext.rs +++ b/src/libstd/sys/unix/ext.rs @@ -31,7 +31,10 @@ #![unstable] -use sys_common::AsInner; +use vec::Vec; +use sys::os_str::Buf; +use sys_common::{AsInner, IntoInner, FromInner}; +use ffi::{OsStr, OsString}; use libc; use io; @@ -99,6 +102,36 @@ impl AsRawFd for io::net::udp::UdpSocket { } } +// Unix-specific extensions to `OsString`. +pub trait OsStringExt { + /// Create an `OsString` from a byte vector. + fn from_vec(vec: Vec<u8>) -> Self; + + /// Yield the underlying byte vector of this `OsString`. + fn into_vec(self) -> Vec<u8>; +} + +impl OsStringExt for OsString { + fn from_vec(vec: Vec<u8>) -> OsString { + FromInner::from_inner(Buf { inner: vec }) + } + + fn into_vec(self) -> Vec<u8> { + self.into_inner().inner + } +} + +// Unix-specific extensions to `OsStr`. +pub trait OsStrExt { + fn as_byte_slice(&self) -> &[u8]; +} + +impl OsStrExt for OsStr { + fn as_byte_slice(&self) -> &[u8] { + &self.as_inner().inner + } +} + /// A prelude for conveniently writing platform-specific code. /// /// Includes all extension traits, and some important type definitions. | 
