diff --git a/library/std/src/sys/unix/ext/fs.rs b/library/std/src/sys/unix/ext/fs.rs index 0a00c64e6c545..afda21d00e050 100644 --- a/library/std/src/sys/unix/ext/fs.rs +++ b/library/std/src/sys/unix/ext/fs.rs @@ -346,9 +346,13 @@ pub trait OpenOptionsExt { #[stable(feature = "open_options_ext", since = "1.10.0")] fn custom_flags(&mut self, flags: i32) -> &mut Self; - /// Get the flags of this OpenOptions as libc::c_int. + /// Get the flags of this OpenOptions as [`libc::c_int`]. + /// With: [`libc::open`] /// - /// This method allows the reuse of the OpenOptions as flags argument for `libc::open()`. + /// This method allows the reuse of the OpenOptions as flags argument for [`fs::OpenOptions`]. + /// + /// [`libc::c_int`]: https://docs.rs/libc/*/libc/type.c_int.html + /// [`libc::open`]: https://docs.rs/libc/*/libc/fn.open.html /// /// # Examples /// @@ -359,16 +363,10 @@ pub trait OpenOptionsExt { /// use std::fs::OpenOptions; /// use std::os::unix::fs::OpenOptionsExt; /// - /// # fn main() { /// let mut options = OpenOptions::new(); /// options.write(true).read(true); - /// if cfg!(unix) { - /// options.custom_flags(libc::O_NOFOLLOW); - /// } /// let file_name = CString::new("foo.txt").unwrap(); - /// let file = unsafe{ libc::open(file_name.as_c_str().as_ptr(), options.as_flags().unwrap()) }; - /// - /// # } + /// let file = unsafe { libc::open(file_name.as_c_str().as_ptr(), options.as_flags().unwrap()) }; /// ``` #[stable(feature = "open_options_ext_as_flags", since = "1.47.0")] fn as_flags(&self) -> io::Result; @@ -385,6 +383,7 @@ impl OpenOptionsExt for OpenOptions { self.as_inner_mut().custom_flags(flags); self } + fn as_flags(&self) -> io::Result { self.as_inner().as_flags() } diff --git a/library/std/src/sys/unix/fs.rs b/library/std/src/sys/unix/fs.rs index 13d8d59b03457..1281fcc47bcb3 100644 --- a/library/std/src/sys/unix/fs.rs +++ b/library/std/src/sys/unix/fs.rs @@ -660,6 +660,7 @@ impl OpenOptions { let creation_mode = self.get_creation_mode()?; Ok(creation_mode | access_mode | self.custom_flags) } + fn get_access_mode(&self) -> io::Result { match (self.read, self.write, self.append) { (true, false, false) => Ok(libc::O_RDONLY),