diff options
| author | bors <bors@rust-lang.org> | 2024-08-17 11:39:08 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-08-17 11:39:08 +0000 |
| commit | c6f81a452e291dd4ff5bcbc6ecb9cd6f2271f164 (patch) | |
| tree | 190cb968c33ad6d4bbbdcc7221cb54507ec97a8b /library/std/src/sys | |
| parent | 426a60abc213b28a7c7198e475476b6e650d871f (diff) | |
| parent | 110c273f4fb40c318be59a557ba90314fbbc42a6 (diff) | |
| download | rust-c6f81a452e291dd4ff5bcbc6ecb9cd6f2271f164.tar.gz rust-c6f81a452e291dd4ff5bcbc6ecb9cd6f2271f164.zip | |
Auto merge of #126877 - GrigorenkoPV:clone_to_uninit, r=dtolnay
CloneToUninit impls As per #126799. Also implements it for `Wtf8` and both versions of `os_str::Slice`. Maybe it is worth to slap `#[inline]` on some of those impls. r? `@dtolnay`
Diffstat (limited to 'library/std/src/sys')
| -rw-r--r-- | library/std/src/sys/os_str/bytes.rs | 13 | ||||
| -rw-r--r-- | library/std/src/sys/os_str/wtf8.rs | 13 |
2 files changed, 26 insertions, 0 deletions
diff --git a/library/std/src/sys/os_str/bytes.rs b/library/std/src/sys/os_str/bytes.rs index 0f8bd645352..992767211d0 100644 --- a/library/std/src/sys/os_str/bytes.rs +++ b/library/std/src/sys/os_str/bytes.rs @@ -1,6 +1,9 @@ //! The underlying OsString/OsStr implementation on Unix and many other //! systems: just a `Vec<u8>`/`[u8]`. +use core::clone::CloneToUninit; +use core::ptr::addr_of_mut; + use crate::borrow::Cow; use crate::collections::TryReserveError; use crate::fmt::Write; @@ -345,3 +348,13 @@ impl Slice { self.inner.eq_ignore_ascii_case(&other.inner) } } + +#[unstable(feature = "clone_to_uninit", issue = "126799")] +unsafe impl CloneToUninit for Slice { + #[inline] + #[cfg_attr(debug_assertions, track_caller)] + unsafe fn clone_to_uninit(&self, dst: *mut Self) { + // SAFETY: we're just a wrapper around [u8] + unsafe { self.inner.clone_to_uninit(addr_of_mut!((*dst).inner)) } + } +} diff --git a/library/std/src/sys/os_str/wtf8.rs b/library/std/src/sys/os_str/wtf8.rs index ed975ba58b5..433237aa6e7 100644 --- a/library/std/src/sys/os_str/wtf8.rs +++ b/library/std/src/sys/os_str/wtf8.rs @@ -1,5 +1,8 @@ //! The underlying OsString/OsStr implementation on Windows is a //! wrapper around the "WTF-8" encoding; see the `wtf8` module for more. +use core::clone::CloneToUninit; +use core::ptr::addr_of_mut; + use crate::borrow::Cow; use crate::collections::TryReserveError; use crate::rc::Rc; @@ -268,3 +271,13 @@ impl Slice { self.inner.eq_ignore_ascii_case(&other.inner) } } + +#[unstable(feature = "clone_to_uninit", issue = "126799")] +unsafe impl CloneToUninit for Slice { + #[inline] + #[cfg_attr(debug_assertions, track_caller)] + unsafe fn clone_to_uninit(&self, dst: *mut Self) { + // SAFETY: we're just a wrapper around Wtf8 + unsafe { self.inner.clone_to_uninit(addr_of_mut!((*dst).inner)) } + } +} |
