Skip to content

Commit

Permalink
Auto merge of #84615 - a1phyr:clone_from_pathbuf_osstring, r=Mark-Sim…
Browse files Browse the repository at this point in the history
…ulacrum

Override `clone_from` method for PathBuf and OsString

This was not the case before because `#[derive(Clone)]` do not do it.
  • Loading branch information
bors committed Apr 28, 2021
2 parents ca075d2 + 4a8671a commit 50ca3ac
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 3 deletions.
14 changes: 13 additions & 1 deletion library/std/src/ffi/os_str.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down
14 changes: 13 additions & 1 deletion library/std/src/path.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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<Path> {
fn from(path: &Path) -> Box<Path> {
Expand Down
14 changes: 13 additions & 1 deletion library/std/src/sys_common/os_str_bytes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<u8>,
}
Expand Down Expand Up @@ -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<Vec<u8>> for Buf {
fn into_inner(self) -> Vec<u8> {
self.inner
Expand Down

0 comments on commit 50ca3ac

Please sign in to comment.