# HG changeset patch # User Yuya Nishihara <y...@tcha.org> # Date 1515762574 -32400 # Fri Jan 12 22:09:34 2018 +0900 # Node ID 44289d88954aaaa2a3c559c424fa1f2d85cb7e16 # Parent ea9bd35529f231c438630071119a309ba84dcc77 rust: extract function to convert Path to platform CString
It can be better on Unix. 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 @@ -14,7 +14,7 @@ use libc::{c_char, c_int}; use std::env; use std::path::PathBuf; -use std::ffi::CString; +use std::ffi::{CString, OsStr}; #[cfg(target_family = "unix")] use std::os::unix::ffi::OsStringExt; @@ -62,6 +62,10 @@ fn get_environment() -> Environment { } } +fn cstring_from_os<T: AsRef<OsStr>>(s: T) -> CString { + CString::new(s.as_ref().to_str().unwrap()).unwrap() +} + // On UNIX, argv starts as an array of char*. So it is easy to convert // to C strings. #[cfg(target_family = "unix")] @@ -86,9 +90,7 @@ fn args_to_cstrings() -> Vec<CString> { } fn set_python_home(env: &Environment) { - let raw = CString::new(env.python_home.to_str().unwrap()) - .unwrap() - .into_raw(); + let raw = cstring_from_os(&env.python_home).into_raw(); unsafe { python27_sys::Py_SetPythonHome(raw); } @@ -133,9 +135,7 @@ fn run() -> Result<(), i32> { // Python files. Apparently we could define our own ``Py_GetPath()`` // implementation. But this may require statically linking Python, which is // not desirable. - let program_name = CString::new(env.python_exe.to_str().unwrap()) - .unwrap() - .as_ptr(); + let program_name = cstring_from_os(&env.python_exe).as_ptr(); unsafe { python27_sys::Py_SetProgramName(program_name as *mut i8); } _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel