diff options
| author | bors <bors@rust-lang.org> | 2021-07-02 20:00:51 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-07-02 20:00:51 +0000 |
| commit | 798baebde1fe77e5a660490ec64e727a5d79970d (patch) | |
| tree | 271df8bcac32ffd8ffd2d52d4a56f0094cecdcbf /library/std/src/sys_common/os_str_bytes.rs | |
| parent | 2545459bff0aae43288e2e17bff0d332c49a6353 (diff) | |
| parent | 1b136323dcd219241bf8b8949f50992a83b28954 (diff) | |
| download | rust-798baebde1fe77e5a660490ec64e727a5d79970d.tar.gz rust-798baebde1fe77e5a660490ec64e727a5d79970d.zip | |
Auto merge of #86817 - JohnTitor:rollup-rcysc95, r=JohnTitor
Rollup of 7 pull requests Successful merges: - #84029 (add `track_path::path` fn for usage in `proc_macro`s) - #85001 (Merge `sys_common::bytestring` back into `os_str_bytes`) - #86308 (Docs: clarify that certain intrinsics are not unsafe) - #86796 (Add a regression test for issue-70703) - #86803 (Remove & from Command::args calls in documentation) - #86807 (Fix double import in wasm thread ) - #86813 (Add a help message to `unused_doc_comments` lint) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'library/std/src/sys_common/os_str_bytes.rs')
| -rw-r--r-- | library/std/src/sys_common/os_str_bytes.rs | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/library/std/src/sys_common/os_str_bytes.rs b/library/std/src/sys_common/os_str_bytes.rs index 470f401a6d2..569600470db 100644 --- a/library/std/src/sys_common/os_str_bytes.rs +++ b/library/std/src/sys_common/os_str_bytes.rs @@ -2,16 +2,18 @@ //! systems: just a `Vec<u8>`/`[u8]`. use crate::borrow::Cow; - use crate::fmt; +use crate::fmt::Write; use crate::mem; use crate::rc::Rc; use crate::str; use crate::sync::Arc; -use crate::sys_common::bytestring::debug_fmt_bytestring; use crate::sys_common::{AsInner, IntoInner}; -use core::str::lossy::Utf8Lossy; +use core::str::lossy::{Utf8Lossy, Utf8LossyChunk}; + +#[cfg(test)] +mod tests; #[derive(Hash)] #[repr(transparent)] @@ -26,7 +28,19 @@ pub struct Slice { impl fmt::Debug for Slice { fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { - debug_fmt_bytestring(&self.inner, formatter) + // Writes out a valid unicode string with the correct escape sequences + + formatter.write_str("\"")?; + for Utf8LossyChunk { valid, broken } in Utf8Lossy::from_bytes(&self.inner).chunks() { + for c in valid.chars().flat_map(|c| c.escape_debug()) { + formatter.write_char(c)? + } + + for b in broken { + write!(formatter, "\\x{:02X}", b)?; + } + } + formatter.write_str("\"") } } |
