• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #[test]
test_statx_unknown_flags()2 fn test_statx_unknown_flags() {
3     use rustix::fs::{AtFlags, StatxFlags};
4 
5     let f = std::fs::File::open(".").unwrap();
6 
7     // It's ok (though still unwise) to construct flags values that have
8     // unknown bits. Exclude `STATX__RESERVED` here as that evokes an explicit
9     // failure; that's tested separately below.
10     let too_many_flags =
11         unsafe { StatxFlags::from_bits_unchecked(!0 & !linux_raw_sys::general::STATX__RESERVED) };
12 
13     // It's also ok to pass such flags to `statx`.
14     let result = rustix::fs::statx(&f, "Cargo.toml", AtFlags::empty(), too_many_flags).unwrap();
15 
16     // But, rustix should mask off bits it doesn't recognize, because these
17     // extra flags may tell future kernels to set extra fields beyond the
18     // extend of rustix's statx buffer. So make sure we didn't get extra
19     // fields.
20     assert_eq!(result.stx_mask & !StatxFlags::all().bits(), 0);
21 }
22 
23 #[test]
test_statx_reserved()24 fn test_statx_reserved() {
25     use rustix::fs::{AtFlags, StatxFlags};
26 
27     let f = std::fs::File::open(".").unwrap();
28 
29     // It's ok (though still unwise) to construct a `STATX__RESERVED` flag
30     // value but `statx` should reliably fail with `INVAL`.
31     let reserved =
32         unsafe { StatxFlags::from_bits_unchecked(linux_raw_sys::general::STATX__RESERVED) };
33     match rustix::fs::statx(&f, "Cargo.toml", AtFlags::empty(), reserved) {
34         Ok(_) => panic!("statx succeeded with `STATX__RESERVED`"),
35         Err(err) => assert_eq!(err, rustix::io::Errno::INVAL),
36     }
37 }
38