1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/// Extension trait for `cap_primitives::fs::OpenOptions` which adds
/// `sync`, `dsync`, `rsync`, and `nonblock` functions for controlling various
/// I/O modes for the opened file.
pub trait OpenOptionsSyncExt {
/// Requests write operations complete as defined by synchronized I/O file
/// integrity completion.
fn sync(&mut self, enable: bool) -> &mut Self;
/// Requests write operations complete as defined by synchronized I/O data
/// integrity completion.
fn dsync(&mut self, enable: bool) -> &mut Self;
/// Requests read operations complete as defined by the level of integrity
/// specified by `sync` and `dsync`.
fn rsync(&mut self, enable: bool) -> &mut Self;
/// Requests that I/O operations fail with `std::io::ErrorKind::WouldBlock`
/// if they would otherwise block.
///
/// This option is commonly not implemented for regular files, so blocking
/// may still occur.
fn nonblock(&mut self, enable: bool) -> &mut Self;
}
impl OpenOptionsSyncExt for cap_primitives::fs::OpenOptions {
#[inline]
fn sync(&mut self, enable: bool) -> &mut Self {
// `sync` functionality is implemented within `cap_primitives`;
// we're just exposing it here since `OpenOptions` is re-exported by
// `cap_std` etc. and `sync` isn't in `std`.
self._cap_fs_ext_sync(enable)
}
#[inline]
fn dsync(&mut self, enable: bool) -> &mut Self {
// `dsync` functionality is implemented within `cap_primitives`;
// we're just exposing it here since `OpenOptions` is re-exported by
// `cap_std` etc. and `dsync` isn't in `std`.
self._cap_fs_ext_dsync(enable)
}
#[inline]
fn rsync(&mut self, enable: bool) -> &mut Self {
// `rsync` functionality is implemented within `cap_primitives`;
// we're just exposing it here since `OpenOptions` is re-exported by
// `cap_std` etc. and `rsync` isn't in `std`.
self._cap_fs_ext_rsync(enable)
}
#[inline]
fn nonblock(&mut self, enable: bool) -> &mut Self {
// `nonblock` functionality is implemented within `cap_primitives`;
// we're just exposing it here since `OpenOptions` is re-exported by
// `cap_std` etc. and `nonblock` isn't in `std`.
self._cap_fs_ext_nonblock(enable)
}
}