1 #![expect(unsafe_op_in_unsafe_fn, reason = "old code, not worth updating yet")]
2 
3 use std::{env, process};
4 use test_programs::preview1::open_scratch_directory;
5 
test_fd_advise(dir_fd: wasip1::Fd)6 unsafe fn test_fd_advise(dir_fd: wasip1::Fd) {
7     // Create a file in the scratch directory.
8     let file_fd = wasip1::path_open(
9         dir_fd,
10         0,
11         "file",
12         wasip1::OFLAGS_CREAT,
13         wasip1::RIGHTS_FD_READ | wasip1::RIGHTS_FD_WRITE,
14         0,
15         0,
16     )
17     .expect("failed to open file");
18     assert!(
19         file_fd > libc::STDERR_FILENO as wasip1::Fd,
20         "file descriptor range check",
21     );
22 
23     // Check file size
24     let stat = wasip1::fd_filestat_get(file_fd).expect("failed to fdstat");
25     assert_eq!(stat.size, 0, "file size should be 0");
26 
27     // set_size it bigger
28     wasip1::fd_filestat_set_size(file_fd, 100).expect("setting size");
29 
30     let stat = wasip1::fd_filestat_get(file_fd).expect("failed to fdstat 2");
31     assert_eq!(stat.size, 100, "file size should be 100");
32 
33     // Advise the kernel
34     wasip1::fd_advise(file_fd, 10, 50, wasip1::ADVICE_NORMAL).expect("failed advise");
35 
36     // Advise shouldn't change size
37     let stat = wasip1::fd_filestat_get(file_fd).expect("failed to fdstat 3");
38     assert_eq!(stat.size, 100, "file size should be 100");
39 
40     wasip1::fd_close(file_fd).expect("failed to close");
41     wasip1::path_unlink_file(dir_fd, "file").expect("failed to unlink");
42 }
main()43 fn main() {
44     let mut args = env::args();
45     let prog = args.next().unwrap();
46     let arg = if let Some(arg) = args.next() {
47         arg
48     } else {
49         eprintln!("usage: {prog} <scratch directory>");
50         process::exit(1);
51     };
52 
53     // Open scratch directory
54     let dir_fd = match open_scratch_directory(&arg) {
55         Ok(dir_fd) => dir_fd,
56         Err(err) => {
57             eprintln!("{err}");
58             process::exit(1)
59         }
60     };
61 
62     // Run the tests.
63     unsafe { test_fd_advise(dir_fd) }
64 }
65