# HG changeset patch # User Yuya Nishihara # Date 2018-01-12 13:18:42 # Node ID fa9747e7fc868ea4231b0c5f74ed44b4ec831f63 # Parent edbe11cfedcfd56fdfe6b7dc92d755ce7f941a30 rust: convert Unix path to CString transparently On Unix, path is just a sequence of bytes. We shouldn't convert it to UTF-8 string. diff --git a/rust/hgcli/src/main.rs b/rust/hgcli/src/main.rs --- a/rust/hgcli/src/main.rs +++ b/rust/hgcli/src/main.rs @@ -16,7 +16,7 @@ use std::env; use std::path::PathBuf; use std::ffi::{CString, OsStr}; #[cfg(target_family = "unix")] -use std::os::unix::ffi::OsStringExt; +use std::os::unix::ffi::{OsStrExt, OsStringExt}; #[derive(Debug)] struct Environment { @@ -62,6 +62,14 @@ fn get_environment() -> Environment { } } +// On UNIX, platform string is just bytes and should not contain NUL. +#[cfg(target_family = "unix")] +fn cstring_from_os>(s: T) -> CString { + CString::new(s.as_ref().as_bytes()).unwrap() +} + +// TODO convert to ANSI characters? +#[cfg(target_family = "windows")] fn cstring_from_os>(s: T) -> CString { CString::new(s.as_ref().to_str().unwrap()).unwrap() }