@@ -1463,6 +1463,30 @@ impl PathBuf {
14631463 true
14641464 }
14651465
1466+ /// Yields a mutable reference to the underlying [`OsString`] instance.
1467+ ///
1468+ /// # Examples
1469+ ///
1470+ /// ```
1471+ /// #![feature(path_as_mut_os_str)]
1472+ /// use std::path::{Path, PathBuf};
1473+ ///
1474+ /// let mut path = PathBuf::from("/foo");
1475+ ///
1476+ /// path.push("bar");
1477+ /// assert_eq!(path, Path::new("/foo/bar"));
1478+ ///
1479+ /// // OsString's `push` does not add a separator.
1480+ /// path.as_mut_os_string().push("baz");
1481+ /// assert_eq!(path, Path::new("/foo/barbaz"));
1482+ /// ```
1483+ #[ unstable( feature = "path_as_mut_os_str" , issue = "105021" ) ]
1484+ #[ must_use]
1485+ #[ inline]
1486+ pub fn as_mut_os_string ( & mut self ) -> & mut OsString {
1487+ & mut self . inner
1488+ }
1489+
14661490 /// Consumes the `PathBuf`, yielding its internal [`OsString`] storage.
14671491 ///
14681492 /// # Examples
@@ -1993,6 +2017,28 @@ impl Path {
19932017 & self . inner
19942018 }
19952019
2020+ /// Yields a mutable reference to the underlying [`OsStr`] slice.
2021+ ///
2022+ /// # Examples
2023+ ///
2024+ /// ```
2025+ /// #![feature(path_as_mut_os_str)]
2026+ /// use std::path::{Path, PathBuf};
2027+ ///
2028+ /// let mut path = PathBuf::from("/Foo.TXT").into_boxed_path();
2029+ ///
2030+ /// assert_ne!(&*path, Path::new("/foo.txt"));
2031+ ///
2032+ /// path.as_mut_os_str().make_ascii_lowercase();
2033+ /// assert_eq!(&*path, Path::new("/foo.txt"));
2034+ /// ```
2035+ #[ unstable( feature = "path_as_mut_os_str" , issue = "105021" ) ]
2036+ #[ must_use]
2037+ #[ inline]
2038+ pub fn as_mut_os_str ( & mut self ) -> & mut OsStr {
2039+ & mut self . inner
2040+ }
2041+
19962042 /// Yields a [`&str`] slice if the `Path` is valid unicode.
19972043 ///
19982044 /// This conversion may entail doing a check for UTF-8 validity.
0 commit comments