1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
pub use cap_primitives::fs::FollowSymlinks;

/// Extension trait for `cap_primitives::fs::OpenOptions` which adds
/// `follow`, a function for controlling whether a symlink in the last
/// component of a path is followed.
pub trait OpenOptionsFollowExt {
    /// Sets the option for following symlinks in the last component of a path.
    ///
    /// This option, when set to `FollowSymlinks::Yes`, will indicate that a
    /// symbolic link in the last component of a path will be followed. When
    /// set to `FollowSymlinks::No`, it will indicate that attempting to
    /// resolve a path which ends in a symbolic link will fail.
    fn follow(&mut self, follow: FollowSymlinks) -> &mut Self;
}

impl OpenOptionsFollowExt for cap_primitives::fs::OpenOptions {
    #[inline]
    fn follow(&mut self, follow: FollowSymlinks) -> &mut Self {
        // `follow` functionality is implemented within `cap_primitives`; we're
        // just exposing it here since `OpenOptions` is re-exported by `cap_std`
        // etc. and `follow` isn't in `std`.
        unsafe { self._cap_fs_ext_follow(follow) }
    }
}