Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[std] Osstr lossy example #56142

Merged
merged 1 commit into from
Dec 14, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 33 additions & 8 deletions src/libstd/ffi/os_str.rs
Original file line number Diff line number Diff line change
Expand Up @@ -536,17 +536,42 @@ impl OsStr {
///
/// # Examples
///
/// Calling `to_string_lossy` on an `OsStr` with valid unicode:
/// Calling `to_string_lossy` on an `OsStr` with invalid unicode:
///
/// ```
/// use std::ffi::OsStr;
///
/// let os_str = OsStr::new("foo");
/// assert_eq!(os_str.to_string_lossy(), "foo");
/// // Note, due to differences in how Unix and Windows represent strings,
/// // we are forced to complicate this example, setting up example `OsStr`s
/// // with different source data and via different platform extensions.
/// // Understand that in reality you could end up with such example invalid
/// // sequences simply through collecting user command line arguments, for
/// // example.
///
/// #[cfg(any(unix, target_os = "redox"))] {
/// use std::ffi::OsStr;
/// use std::os::unix::ffi::OsStrExt;
///
/// // Here, the values 0x66 and 0x6f correspond to 'f' and 'o'
/// // respectively. The value 0x80 is a lone continuation byte, invalid
/// // in a UTF-8 sequence.
/// let source = [0x66, 0x6f, 0x80, 0x6f];
/// let os_str = OsStr::from_bytes(&source[..]);
///
/// assert_eq!(os_str.to_string_lossy(), "fo�o");
/// }
/// #[cfg(windows)] {
/// use std::ffi::OsString;
/// use std::os::windows::prelude::*;
///
/// // Here the values 0x0066 and 0x006f correspond to 'f' and 'o'
/// // respectively. The value 0xD800 is a lone surrogate half, invalid
/// // in a UTF-16 sequence.
/// let source = [0x0066, 0x006f, 0xD800, 0x006f];
/// let os_string = OsString::from_wide(&source[..]);
/// let os_str = os_string.as_os_str();
///
/// assert_eq!(os_str.to_string_lossy(), "fo�o");
/// }
/// ```
///
/// Had `os_str` contained invalid unicode, the `to_string_lossy` call might
/// have returned `"fo�"`.
#[stable(feature = "rust1", since = "1.0.0")]
pub fn to_string_lossy(&self) -> Cow<str> {
self.inner.to_string_lossy()
Expand Down