2022-02-16 05:23:37 -06:00
|
|
|
use std::borrow::Cow::{Borrowed, Owned};
|
2022-04-27 16:00:45 -05:00
|
|
|
use std::ffi::CStr;
|
|
|
|
use std::os::raw::c_char;
|
2022-02-16 05:23:37 -06:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn to_str() {
|
|
|
|
let data = b"123\xE2\x80\xA6\0";
|
|
|
|
let ptr = data.as_ptr() as *const c_char;
|
|
|
|
unsafe {
|
|
|
|
assert_eq!(CStr::from_ptr(ptr).to_str(), Ok("123…"));
|
|
|
|
assert_eq!(CStr::from_ptr(ptr).to_string_lossy(), Borrowed("123…"));
|
|
|
|
}
|
|
|
|
let data = b"123\xE2\0";
|
|
|
|
let ptr = data.as_ptr() as *const c_char;
|
|
|
|
unsafe {
|
|
|
|
assert!(CStr::from_ptr(ptr).to_str().is_err());
|
|
|
|
assert_eq!(CStr::from_ptr(ptr).to_string_lossy(), Owned::<str>(format!("123\u{FFFD}")));
|
|
|
|
}
|
|
|
|
}
|