• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #[cfg(any(target_os = "android", target_os = "linux"))]
2 #[test]
test_statfs_abi()3 fn test_statfs_abi() {
4     use rustix::fs::{FsWord, StatFs, NFS_SUPER_MAGIC, PROC_SUPER_MAGIC};
5 
6     // Ensure these all have consistent types.
7     let t: StatFs = unsafe { std::mem::zeroed() };
8     let _s: FsWord = t.f_type;
9     let _u: FsWord = PROC_SUPER_MAGIC;
10     let _v: FsWord = NFS_SUPER_MAGIC;
11 
12     // Ensure that after all the platform-specific dancing we have to do, this
13     // constant comes out with the correct value.
14     #[cfg(all(libc, not(target_env = "musl")))]
15     {
16         assert_eq!(
17             i128::from(PROC_SUPER_MAGIC),
18             i128::from(libc::PROC_SUPER_MAGIC)
19         );
20         assert_eq!(
21             i128::from(NFS_SUPER_MAGIC),
22             i128::from(libc::NFS_SUPER_MAGIC)
23         );
24     }
25 
26     #[cfg(linux_raw)]
27     {
28         assert_eq!(
29             i128::from(PROC_SUPER_MAGIC),
30             i128::from(linux_raw_sys::general::PROC_SUPER_MAGIC)
31         );
32         assert_eq!(
33             i128::from(NFS_SUPER_MAGIC),
34             i128::from(linux_raw_sys::general::NFS_SUPER_MAGIC)
35         );
36     }
37 
38     assert_eq!(PROC_SUPER_MAGIC, 0x0000_9fa0);
39     assert_eq!(NFS_SUPER_MAGIC, 0x0000_6969);
40 }
41 
42 #[cfg(not(target_os = "netbsd"))]
43 #[test]
test_statfs()44 fn test_statfs() {
45     let statfs = rustix::fs::statfs("Cargo.toml").unwrap();
46     let f_blocks = statfs.f_blocks;
47     assert_ne!(f_blocks, 0);
48     // Previously we checked f_files != 0 here, but at least btrfs doesn't set
49     // that.
50 }
51 
52 #[cfg(not(target_os = "netbsd"))]
53 #[test]
test_fstatfs()54 fn test_fstatfs() {
55     let file = std::fs::File::open("Cargo.toml").unwrap();
56     let statfs = rustix::fs::fstatfs(&file).unwrap();
57     let f_blocks = statfs.f_blocks;
58     assert_ne!(f_blocks, 0);
59     // Previously we checked f_files != 0 here, but at least btrfs doesn't set
60     // that.
61 }
62 
63 /// Test that files in procfs are in a filesystem with `PROC_SUPER_MAGIC`.
64 #[cfg(any(target_os = "android", target_os = "linux"))]
65 #[test]
test_statfs_procfs()66 fn test_statfs_procfs() {
67     let statfs = rustix::fs::statfs("/proc/self/maps").unwrap();
68 
69     // Do the field access outside the assert to work around Rust 1.48 thinking
70     // that this is otherwise a packed field borrow.
71     let f_type = statfs.f_type;
72 
73     assert_eq!(f_type, rustix::fs::PROC_SUPER_MAGIC);
74 }
75 
76 #[test]
test_statvfs()77 fn test_statvfs() {
78     let statvfs = rustix::fs::statvfs("Cargo.toml").unwrap();
79 
80     let f_frsize = statvfs.f_frsize;
81     assert_ne!(f_frsize, 0);
82 }
83 
84 #[test]
test_fstatvfs()85 fn test_fstatvfs() {
86     let file = std::fs::File::open("Cargo.toml").unwrap();
87     let statvfs = rustix::fs::fstatvfs(&file).unwrap();
88 
89     let f_frsize = statvfs.f_frsize;
90     assert_ne!(f_frsize, 0);
91 }
92