diff --git a/library/std/src/ffi/os_str.rs b/library/std/src/ffi/os_str.rs index ecaab67034908..ea4b286601777 100644 --- a/library/std/src/ffi/os_str.rs +++ b/library/std/src/ffi/os_str.rs @@ -71,7 +71,6 @@ use crate::sys_common::{AsInner, FromInner, IntoInner}; /// [`&str`]: str /// [`CStr`]: crate::ffi::CStr /// [conversions]: super#conversions -#[derive(Clone)] #[cfg_attr(not(test), rustc_diagnostic_item = "OsString")] #[stable(feature = "rust1", since = "1.0.0")] pub struct OsString { @@ -420,6 +419,19 @@ impl Default for OsString { } } +#[stable(feature = "rust1", since = "1.0.0")] +impl Clone for OsString { + #[inline] + fn clone(&self) -> Self { + OsString { inner: self.inner.clone() } + } + + #[inline] + fn clone_from(&mut self, source: &Self) { + self.inner.clone_from(&source.inner) + } +} + #[stable(feature = "rust1", since = "1.0.0")] impl fmt::Debug for OsString { fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { diff --git a/library/std/src/path.rs b/library/std/src/path.rs index f4020a428791e..ed0987064e8f7 100644 --- a/library/std/src/path.rs +++ b/library/std/src/path.rs @@ -1065,7 +1065,6 @@ impl FusedIterator for Ancestors<'_> {} /// ``` /// /// Which method works best depends on what kind of situation you're in. -#[derive(Clone)] #[cfg_attr(not(test), rustc_diagnostic_item = "PathBuf")] #[stable(feature = "rust1", since = "1.0.0")] // FIXME: @@ -1406,6 +1405,19 @@ impl PathBuf { } } +#[stable(feature = "rust1", since = "1.0.0")] +impl Clone for PathBuf { + #[inline] + fn clone(&self) -> Self { + PathBuf { inner: self.inner.clone() } + } + + #[inline] + fn clone_from(&mut self, source: &Self) { + self.inner.clone_from(&source.inner) + } +} + #[stable(feature = "box_from_path", since = "1.17.0")] impl From<&Path> for Box { fn from(path: &Path) -> Box { diff --git a/library/std/src/sys_common/os_str_bytes.rs b/library/std/src/sys_common/os_str_bytes.rs index 302c519740717..32705c432fa8a 100644 --- a/library/std/src/sys_common/os_str_bytes.rs +++ b/library/std/src/sys_common/os_str_bytes.rs @@ -14,7 +14,7 @@ use crate::sys_common::{AsInner, FromInner, IntoInner}; use core::str::lossy::Utf8Lossy; -#[derive(Clone, Hash)] +#[derive(Hash)] pub(crate) struct Buf { pub inner: Vec, } @@ -53,6 +53,18 @@ impl fmt::Display for Buf { } } +impl Clone for Buf { + #[inline] + fn clone(&self) -> Self { + Buf { inner: self.inner.clone() } + } + + #[inline] + fn clone_from(&mut self, source: &Self) { + self.inner.clone_from(&source.inner) + } +} + impl IntoInner> for Buf { fn into_inner(self) -> Vec { self.inner