diff options
| author | bors <bors@rust-lang.org> | 2014-06-30 19:26:35 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-06-30 19:26:35 +0000 |
| commit | a345c543344b8ff4f3aeecb816856101443bf907 (patch) | |
| tree | 3b17729e65b86e277270cf316892f7e65443018d /src/libnative/io | |
| parent | 94343da1bdf4de84d0ece90d920400697ad7e143 (diff) | |
| parent | 3d84b4be3d7691026993d5c733bc26cc637e7c50 (diff) | |
| download | rust-a345c543344b8ff4f3aeecb816856101443bf907.tar.gz rust-a345c543344b8ff4f3aeecb816856101443bf907.zip | |
auto merge of #14613 : schmee/rust/utf16-iterator, r=huonw
Closes #14358. ~~The tests are not yet moved to `utf16_iter`, so this probably won't compile. I'm submitting this PR anyway so it can be reviewed and since it was mentioned in #14611.~~ EDIT: Tests now use `utf16_iter`. This deprecates `.to_utf16`. `x.to_utf16()` should be replaced by either `x.utf16_iter().collect::<Vec<u16>>()` (the type annotation may be optional), or just `x.utf16_iter()` directly, if it can be used in an iterator context. [breaking-change] cc @huonw
Diffstat (limited to 'src/libnative/io')
| -rw-r--r-- | src/libnative/io/c_win32.rs | 4 | ||||
| -rw-r--r-- | src/libnative/io/file_win32.rs | 2 | ||||
| -rw-r--r-- | src/libnative/io/process.rs | 14 |
3 files changed, 14 insertions, 6 deletions
diff --git a/src/libnative/io/c_win32.rs b/src/libnative/io/c_win32.rs index 7e58102d241..802526c9196 100644 --- a/src/libnative/io/c_win32.rs +++ b/src/libnative/io/c_win32.rs @@ -70,6 +70,7 @@ extern "system" { pub mod compat { use std::intrinsics::{atomic_store_relaxed, transmute}; + use std::iter::Iterator; use libc::types::os::arch::extra::{LPCWSTR, HMODULE, LPCSTR, LPVOID}; extern "system" { @@ -82,7 +83,8 @@ pub mod compat { // layer (after it's loaded) shouldn't be any slower than a regular DLL // call. unsafe fn store_func(ptr: *mut uint, module: &str, symbol: &str, fallback: uint) { - let module = module.to_utf16().append_one(0); + let module: Vec<u16> = module.utf16_units().collect(); + let module = module.append_one(0); symbol.with_c_str(|symbol| { let handle = GetModuleHandleW(module.as_ptr()); let func: uint = transmute(GetProcAddress(handle, symbol)); diff --git a/src/libnative/io/file_win32.rs b/src/libnative/io/file_win32.rs index 3195fa4f2d4..98553603313 100644 --- a/src/libnative/io/file_win32.rs +++ b/src/libnative/io/file_win32.rs @@ -255,7 +255,7 @@ impl Drop for Inner { pub fn to_utf16(s: &CString) -> IoResult<Vec<u16>> { match s.as_str() { - Some(s) => Ok(s.to_utf16().append_one(0)), + Some(s) => Ok(s.utf16_units().collect::<Vec<u16>>().append_one(0)), None => Err(IoError { code: libc::ERROR_INVALID_NAME as uint, extra: 0, diff --git a/src/libnative/io/process.rs b/src/libnative/io/process.rs index b1c0d9a1506..6fab73115cf 100644 --- a/src/libnative/io/process.rs +++ b/src/libnative/io/process.rs @@ -294,6 +294,8 @@ fn spawn_process_os(cfg: ProcessConfig, use libc::funcs::extra::msvcrt::get_osfhandle; use std::mem; + use std::iter::Iterator; + use std::str::StrSlice; if cfg.gid.is_some() || cfg.uid.is_some() { return Err(IoError { @@ -328,7 +330,8 @@ fn spawn_process_os(cfg: ProcessConfig, lpSecurityDescriptor: ptr::mut_null(), bInheritHandle: 1, }; - let filename = "NUL".to_utf16().append_one(0); + let filename: Vec<u16> = "NUL".utf16_units().collect(); + let filename = filename.append_one(0); *slot = libc::CreateFileW(filename.as_ptr(), access, libc::FILE_SHARE_READ | @@ -371,7 +374,8 @@ fn spawn_process_os(cfg: ProcessConfig, with_envp(cfg.env, |envp| { with_dirp(cfg.cwd, |dirp| { - let mut cmd_str = cmd_str.to_utf16().append_one(0); + let mut cmd_str: Vec<u16> = cmd_str.as_slice().utf16_units().collect(); + cmd_str = cmd_str.append_one(0); let created = CreateProcessW(ptr::null(), cmd_str.as_mut_ptr(), ptr::mut_null(), @@ -770,7 +774,7 @@ fn with_envp<T>(env: Option<&[(CString, CString)]>, cb: |*mut c_void| -> T) -> T let kv = format!("{}={}", pair.ref0().as_str().unwrap(), pair.ref1().as_str().unwrap()); - blk.push_all(kv.to_utf16().as_slice()); + blk.extend(kv.as_slice().utf16_units()); blk.push(0); } @@ -788,7 +792,9 @@ fn with_dirp<T>(d: Option<&CString>, cb: |*const u16| -> T) -> T { Some(dir) => { let dir_str = dir.as_str() .expect("expected workingdirectory to be utf-8 encoded"); - let dir_str = dir_str.to_utf16().append_one(0); + let dir_str: Vec<u16> = dir_str.utf16_units().collect(); + let dir_str = dir_str.append_one(0); + cb(dir_str.as_ptr()) }, None => cb(ptr::null()) |
