Coverage Report

Created: 2024-08-22 06:13

/rust/registry/src/index.crates.io-6f17d22bba15001f/rustix-0.38.34/src/fs/mod.rs
Line
Count
Source (jump to first uncovered line)
1
//! Filesystem operations.
2
3
mod abs;
4
#[cfg(not(target_os = "redox"))]
5
mod at;
6
mod constants;
7
#[cfg(linux_kernel)]
8
mod copy_file_range;
9
#[cfg(not(any(target_os = "espidf", target_os = "redox")))]
10
#[cfg(not(target_os = "haiku"))] // Haiku needs <https://github.com/rust-lang/rust/pull/112371>
11
mod cwd;
12
#[cfg(all(feature = "alloc", not(any(target_os = "espidf", target_os = "redox"))))]
13
mod dir;
14
#[cfg(not(any(
15
    apple,
16
    netbsdlike,
17
    solarish,
18
    target_os = "dragonfly",
19
    target_os = "espidf",
20
    target_os = "haiku",
21
    target_os = "redox",
22
    target_os = "vita",
23
)))]
24
mod fadvise;
25
pub(crate) mod fcntl;
26
#[cfg(apple)]
27
mod fcntl_apple;
28
#[cfg(apple)]
29
mod fcopyfile;
30
pub(crate) mod fd;
31
#[cfg(all(apple, feature = "alloc"))]
32
mod getpath;
33
#[cfg(not(target_os = "wasi"))] // WASI doesn't have get[gpu]id.
34
mod id;
35
#[cfg(linux_kernel)]
36
mod ioctl;
37
#[cfg(not(any(
38
    target_os = "espidf",
39
    target_os = "haiku",
40
    target_os = "redox",
41
    target_os = "vita",
42
    target_os = "wasi"
43
)))]
44
mod makedev;
45
#[cfg(any(linux_kernel, target_os = "freebsd"))]
46
mod memfd_create;
47
#[cfg(linux_kernel)]
48
#[cfg(feature = "fs")]
49
mod mount;
50
#[cfg(linux_kernel)]
51
mod openat2;
52
#[cfg(linux_kernel)]
53
mod raw_dir;
54
mod seek_from;
55
#[cfg(target_os = "linux")]
56
mod sendfile;
57
#[cfg(linux_kernel)]
58
mod statx;
59
#[cfg(not(any(
60
    target_os = "espidf",
61
    target_os = "redox",
62
    target_os = "vita",
63
    target_os = "wasi"
64
)))]
65
mod sync;
66
#[cfg(any(apple, linux_kernel))]
67
mod xattr;
68
69
#[cfg(linux_kernel)]
70
pub use crate::backend::fs::inotify;
71
pub use abs::*;
72
#[cfg(not(target_os = "redox"))]
73
pub use at::*;
74
pub use constants::*;
75
#[cfg(linux_kernel)]
76
pub use copy_file_range::copy_file_range;
77
#[cfg(not(any(target_os = "espidf", target_os = "redox")))]
78
#[cfg(not(target_os = "haiku"))] // Haiku needs <https://github.com/rust-lang/rust/pull/112371>
79
pub use cwd::*;
80
#[cfg(all(feature = "alloc", not(any(target_os = "espidf", target_os = "redox"))))]
81
pub use dir::{Dir, DirEntry};
82
#[cfg(not(any(
83
    apple,
84
    netbsdlike,
85
    solarish,
86
    target_os = "dragonfly",
87
    target_os = "espidf",
88
    target_os = "haiku",
89
    target_os = "redox",
90
    target_os = "vita",
91
)))]
92
pub use fadvise::fadvise;
93
pub use fcntl::*;
94
#[cfg(apple)]
95
pub use fcntl_apple::*;
96
#[cfg(apple)]
97
pub use fcopyfile::*;
98
pub use fd::*;
99
#[cfg(all(apple, feature = "alloc"))]
100
pub use getpath::getpath;
101
#[cfg(not(target_os = "wasi"))]
102
pub use id::*;
103
#[cfg(linux_kernel)]
104
pub use ioctl::*;
105
#[cfg(not(any(
106
    target_os = "espidf",
107
    target_os = "haiku",
108
    target_os = "redox",
109
    target_os = "vita",
110
    target_os = "wasi"
111
)))]
112
pub use makedev::*;
113
#[cfg(any(linux_kernel, target_os = "freebsd"))]
114
pub use memfd_create::memfd_create;
115
#[cfg(linux_kernel)]
116
#[cfg(feature = "fs")]
117
pub use mount::*;
118
#[cfg(linux_kernel)]
119
pub use openat2::openat2;
120
#[cfg(linux_kernel)]
121
pub use raw_dir::{RawDir, RawDirEntry};
122
pub use seek_from::SeekFrom;
123
#[cfg(target_os = "linux")]
124
pub use sendfile::sendfile;
125
#[cfg(linux_kernel)]
126
pub use statx::statx;
127
#[cfg(not(any(
128
    target_os = "espidf",
129
    target_os = "redox",
130
    target_os = "vita",
131
    target_os = "wasi"
132
)))]
133
pub use sync::sync;
134
#[cfg(any(apple, linux_kernel))]
135
pub use xattr::*;
136
137
/// Re-export types common to POSIX-ish platforms.
138
#[cfg(feature = "std")]
139
#[cfg(unix)]
140
pub use std::os::unix::fs::{DirEntryExt, FileExt, FileTypeExt, MetadataExt, OpenOptionsExt};
141
#[cfg(feature = "std")]
142
#[cfg(all(wasi_ext, target_os = "wasi"))]
143
pub use std::os::wasi::fs::{DirEntryExt, FileExt, FileTypeExt, MetadataExt, OpenOptionsExt};
144
145
/// Extension trait for accessing timestamp fields of `Stat`.
146
///
147
/// Rustix's `Stat` type on some platforms has unsigned `st_mtime`,
148
/// `st_atime`, and `st_ctime` fields. This is incorrect, as Unix defines
149
/// these fields to be signed, with negative values representing dates before
150
/// the Unix epoch. Until the next semver bump, these unsigned fields are
151
/// deprecated, and this trait provides accessors which return their values
152
/// as signed integers.
153
#[cfg(all(unix, not(any(target_os = "aix", target_os = "nto"))))]
154
pub trait StatExt {
155
    /// Return the value of the `st_atime` field, casted to the correct type.
156
    fn atime(&self) -> i64;
157
    /// Return the value of the `st_mtime` field, casted to the correct type.
158
    fn mtime(&self) -> i64;
159
    /// Return the value of the `st_ctime` field, casted to the correct type.
160
    fn ctime(&self) -> i64;
161
}
162
163
#[cfg(all(unix, not(any(target_os = "aix", target_os = "nto"))))]
164
#[allow(deprecated)]
165
impl StatExt for Stat {
166
    #[inline]
167
0
    fn atime(&self) -> i64 {
168
0
        self.st_atime as i64
169
0
    }
170
171
    #[inline]
172
0
    fn mtime(&self) -> i64 {
173
0
        self.st_mtime as i64
174
0
    }
175
176
    #[inline]
177
0
    fn ctime(&self) -> i64 {
178
0
        self.st_ctime as i64
179
0
    }
180
}