summaryrefslogtreecommitdiffstats
path: root/library/alloc/tests/c_str.rs
diff options
context:
space:
mode:
Diffstat (limited to 'library/alloc/tests/c_str.rs')
-rw-r--r--library/alloc/tests/c_str.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/library/alloc/tests/c_str.rs b/library/alloc/tests/c_str.rs
new file mode 100644
index 000000000..4a5817939
--- /dev/null
+++ b/library/alloc/tests/c_str.rs
@@ -0,0 +1,19 @@
+use std::borrow::Cow::{Borrowed, Owned};
+use std::ffi::CStr;
+use std::os::raw::c_char;
+
+#[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}")));
+ }
+}