diff options
Diffstat (limited to 'src/libstd/sys/unix/ext/fs.rs')
| -rw-r--r-- | src/libstd/sys/unix/ext/fs.rs | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/libstd/sys/unix/ext/fs.rs b/src/libstd/sys/unix/ext/fs.rs index 8d21ba8f661..2a3117864d0 100644 --- a/src/libstd/sys/unix/ext/fs.rs +++ b/src/libstd/sys/unix/ext/fs.rs @@ -118,8 +118,38 @@ pub trait OpenOptionsExt { /// /// If a new file is created as part of a `File::open_opts` call then this /// specified `mode` will be used as the permission bits for the new file. + /// If no `mode` is set, the default of `0o666` will be used. + /// The operating system masks out bits with the systems `umask`, to produce + /// the final permissions. #[stable(feature = "fs_ext", since = "1.1.0")] fn mode(&mut self, mode: raw::mode_t) -> &mut Self; + + /// Pass custom flags to the `flags` agument of `open`. + /// + /// The bits that define the access mode are masked out with `O_ACCMODE`, to + /// ensure they do not interfere with the access mode set by Rusts options. + /// + /// Custom flags can only set flags, not remove flags set by Rusts options. + /// This options overwrites any previously set custom flags. + /// + /// # Examples + /// + /// ```rust,ignore + /// extern crate libc; + /// use std::fs::OpenOptions; + /// use std::os::unix::fs::OpenOptionsExt; + /// + /// let mut options = OpenOptions::new(); + /// options.write(true); + /// if cfg!(unix) { + /// options.custom_flags(libc::O_NOFOLLOW); + /// } + /// let file = options.open("foo.txt"); + /// ``` + #[unstable(feature = "expand_open_options", + reason = "recently added", + issue = "30014")] + fn custom_flags(&mut self, flags: i32) -> &mut Self; } #[stable(feature = "fs_ext", since = "1.1.0")] @@ -127,6 +157,10 @@ impl OpenOptionsExt for OpenOptions { fn mode(&mut self, mode: raw::mode_t) -> &mut OpenOptions { self.as_inner_mut().mode(mode); self } + + fn custom_flags(&mut self, flags: i32) -> &mut OpenOptions { + self.as_inner_mut().custom_flags(flags); self + } } // Hm, why are there casts here to the returned type, shouldn't the types always @@ -281,4 +315,3 @@ impl DirBuilderExt for fs::DirBuilder { self } } - |
