# 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

Reply via email to