diff options
| author | bors <bors@rust-lang.org> | 2015-01-24 19:39:52 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-01-24 19:39:52 +0000 |
| commit | bb7cc4eb26e87ec4cb2acdc5bc3a7d25b9c817be (patch) | |
| tree | 04338cf8bf55a8510cd6ab0771698e320beb13e8 /src/libstd/sys/windows/ext.rs | |
| parent | 76fbb3583174ca8856b4e149929839888f503e6b (diff) | |
| parent | c5369ebc7f4791c4e291951751b8964052c7a523 (diff) | |
| download | rust-bb7cc4eb26e87ec4cb2acdc5bc3a7d25b9c817be.tar.gz rust-bb7cc4eb26e87ec4cb2acdc5bc3a7d25b9c817be.zip | |
Auto merge of #21488 - aturon:os-str, r=alexcrichton
Per [RFC 517](https://github.com/rust-lang/rfcs/pull/575/), this commit introduces platform-native strings. The API is essentially as described in the RFC. The WTF-8 implementation is adapted from @SimonSapin's [implementation](https://github.com/SimonSapin/rust-wtf8). To make this work, some encodign and decoding functionality in `libcore` is now exported in a "raw" fashion reusable for WTF-8. These exports are *not* reexported in `std`, nor are they stable.
Diffstat (limited to 'src/libstd/sys/windows/ext.rs')
| -rw-r--r-- | src/libstd/sys/windows/ext.rs | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/libstd/sys/windows/ext.rs b/src/libstd/sys/windows/ext.rs index 87ff31ab73c..de37c428288 100644 --- a/src/libstd/sys/windows/ext.rs +++ b/src/libstd/sys/windows/ext.rs @@ -16,7 +16,11 @@ #![unstable] -use sys_common::AsInner; +pub use sys_common::wtf8::{Wtf8Buf, EncodeWide}; + +use sys::os_str::Buf; +use sys_common::{AsInner, FromInner}; +use ffi::{OsStr, OsString}; use libc; use io; @@ -92,9 +96,35 @@ impl AsRawSocket for io::net::udp::UdpSocket { } } +// Windows-specific extensions to `OsString`. +pub trait OsStringExt { + /// Create an `OsString` from a potentially ill-formed UTF-16 slice of 16-bit code units. + /// + /// This is lossless: calling `.encode_wide()` on the resulting string + /// will always return the original code units. + fn from_wide(wide: &[u16]) -> Self; +} + +impl OsStringExt for OsString { + fn from_wide(wide: &[u16]) -> OsString { + FromInner::from_inner(Buf { inner: Wtf8Buf::from_wide(wide) }) + } +} + +// Windows-specific extensions to `OsStr`. +pub trait OsStrExt { + fn encode_wide(&self) -> EncodeWide; +} + +impl OsStrExt for OsStr { + fn encode_wide(&self) -> EncodeWide { + self.as_inner().inner.encode_wide() + } +} + /// A prelude for conveniently writing platform-specific code. /// /// Includes all extension traits, and some important type definitions. pub mod prelude { - pub use super::{Socket, Handle, AsRawSocket, AsRawHandle}; + pub use super::{Socket, Handle, AsRawSocket, AsRawHandle, OsStrExt, OsStringExt}; } |
