summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhanhui Li <[email protected]>2023-01-31 15:04:24 +0800
committerGitHub <[email protected]>2023-01-31 15:04:24 +0800
commitafba9eb3df2feaf5551ec9d3a4fa130449ac6540 (patch)
tree88457578d586698d917b75b68b01442cdc160789
parent26f0fa4c76e63648af274b6d1536a626c4640211 (diff)
Implement OpenOptionsExt trait for OpenOptions (#139)
* Implement OpenOptionsExt trait for OpenOptions Signed-off-by: Li Zhanhui <[email protected]> * Initialize custom_flags if target_os is unix Signed-off-by: Li Zhanhui <[email protected]> --------- Signed-off-by: Li Zhanhui <[email protected]>
-rw-r--r--monoio/src/driver/op/open.rs5
-rw-r--r--monoio/src/fs/open_options.rs19
2 files changed, 22 insertions, 2 deletions
diff --git a/monoio/src/driver/op/open.rs b/monoio/src/driver/op/open.rs
index 1952154..a104678 100644
--- a/monoio/src/driver/op/open.rs
+++ b/monoio/src/driver/op/open.rs
@@ -22,7 +22,10 @@ impl Op<Open> {
pub(crate) fn open<P: AsRef<Path>>(path: P, options: &OpenOptions) -> io::Result<Op<Open>> {
// Here the path will be copied, so its safe.
let path = cstr(path.as_ref())?;
- let flags = libc::O_CLOEXEC | options.access_mode()? | options.creation_mode()?;
+ let flags = libc::O_CLOEXEC
+ | options.access_mode()?
+ | options.creation_mode()?
+ | (options.custom_flags & !libc::O_ACCMODE);
let mode = options.mode;
Op::submit_with(Open { path, flags, mode })
diff --git a/monoio/src/fs/open_options.rs b/monoio/src/fs/open_options.rs
index e1cb199..913e88c 100644
--- a/monoio/src/fs/open_options.rs
+++ b/monoio/src/fs/open_options.rs
@@ -1,4 +1,4 @@
-use std::{io, path::Path};
+use std::{io, os::unix::prelude::OpenOptionsExt, path::Path};
use crate::{
driver::{op::Op, shared_fd::SharedFd},
@@ -59,6 +59,8 @@ pub struct OpenOptions {
create_new: bool,
#[cfg(unix)]
pub(crate) mode: libc::mode_t,
+ #[cfg(unix)]
+ pub(crate) custom_flags: libc::c_int,
}
impl OpenOptions {
@@ -89,6 +91,8 @@ impl OpenOptions {
create_new: false,
#[cfg(unix)]
mode: 0o666,
+ #[cfg(unix)]
+ custom_flags: 0,
}
}
@@ -351,3 +355,16 @@ impl OpenOptions {
})
}
}
+
+#[cfg(unix)]
+impl OpenOptionsExt for OpenOptions {
+ fn mode(&mut self, mode: u32) -> &mut Self {
+ self.mode = mode as libc::mode_t;
+ self
+ }
+
+ fn custom_flags(&mut self, flags: i32) -> &mut Self {
+ self.custom_flags = flags as libc::c_int;
+ self
+ }
+}