Sha256: 83bdacd9f655bd27b5430ab6cb5b4190b82806cbc1e0fd0aeb39eb7ae81d7573
Contents?: true
Size: 1008 Bytes
Versions: 1
Compression:
Stored size: 1008 Bytes
Contents
use libc::c_char; use std::ffi::{CStr, CString}; #[no_mangle] pub extern "C" fn basename(c_pth: *const c_char, c_ext: *const c_char) -> *const c_char { if c_pth.is_null() || c_ext.is_null() { return c_pth; } let pth = unsafe { CStr::from_ptr(c_pth) }.to_str().unwrap(); let ext = unsafe { CStr::from_ptr(c_ext) }.to_str().unwrap(); let name = rust::basename(pth, ext); CString::new(name).unwrap().into_raw() } pub mod rust { extern crate array_tool; use path_parsing::extract_last_path_segment; use self::array_tool::string::Squeeze; pub fn basename(pth: &str, ext: &str) -> String { // Known edge case match &pth.squeeze("/")[..] { "/" => { return "/".to_string() } _ => {} } let mut name = extract_last_path_segment(pth); if ext == ".*" { if let Some(dot_i) = name.rfind('.') { name = &name[0..dot_i]; } } else if name.ends_with(ext) { name = &name[..name.len() - ext.len()]; }; name.to_string() } }
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
faster_path-0.1.13 | src/basename.rs |