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::{create_file, open_scratch_directory};
5
test_path_open_lots(dir_fd: wasip1::Fd)6 unsafe fn test_path_open_lots(dir_fd: wasip1::Fd) {
7 create_file(dir_fd, "file");
8
9 for _ in 0..2000 {
10 let f_readonly = wasip1::path_open(dir_fd, 0, "file", 0, wasip1::RIGHTS_FD_READ, 0, 0)
11 .expect("open file readonly");
12
13 let buffer = &mut [0u8; 100];
14 let iovec = wasip1::Iovec {
15 buf: buffer.as_mut_ptr(),
16 buf_len: buffer.len(),
17 };
18 let nread = wasip1::fd_read(f_readonly, &[iovec]).expect("reading readonly file");
19 assert_eq!(nread, 0, "readonly file is empty");
20
21 wasip1::fd_close(f_readonly).expect("close readonly");
22 }
23
24 for _ in 0..2000 {
25 let f_readonly = wasip1::path_open(dir_fd, 0, "file", 0, wasip1::RIGHTS_FD_READ, 0, 0)
26 .expect("open file readonly");
27
28 let buffer = &mut [0u8; 100];
29 let iovec = wasip1::Iovec {
30 buf: buffer.as_mut_ptr(),
31 buf_len: buffer.len(),
32 };
33 let nread = wasip1::fd_pread(f_readonly, &[iovec], 0).expect("reading readonly file");
34 assert_eq!(nread, 0, "readonly file is empty");
35
36 wasip1::fd_close(f_readonly).expect("close readonly");
37 }
38
39 for _ in 0..2000 {
40 let f = wasip1::path_open(
41 dir_fd,
42 0,
43 "file",
44 0,
45 wasip1::RIGHTS_FD_READ | wasip1::RIGHTS_FD_WRITE,
46 0,
47 0,
48 )
49 .unwrap();
50
51 let buffer = &[0u8; 100];
52 let ciovec = wasip1::Ciovec {
53 buf: buffer.as_ptr(),
54 buf_len: buffer.len(),
55 };
56 let nwritten = wasip1::fd_write(f, &[ciovec]).expect("write failed");
57 assert_eq!(nwritten, 100);
58
59 wasip1::fd_close(f).unwrap();
60 }
61
62 for _ in 0..2000 {
63 let f = wasip1::path_open(
64 dir_fd,
65 0,
66 "file",
67 0,
68 wasip1::RIGHTS_FD_READ | wasip1::RIGHTS_FD_WRITE,
69 0,
70 0,
71 )
72 .unwrap();
73
74 let buffer = &[0u8; 100];
75 let ciovec = wasip1::Ciovec {
76 buf: buffer.as_ptr(),
77 buf_len: buffer.len(),
78 };
79 let nwritten = wasip1::fd_pwrite(f, &[ciovec], 0).expect("write failed");
80 assert_eq!(nwritten, 100);
81
82 wasip1::fd_close(f).unwrap();
83 }
84
85 wasip1::path_unlink_file(dir_fd, "file").expect("removing a file");
86 }
87
main()88 fn main() {
89 let mut args = env::args();
90 let prog = args.next().unwrap();
91 let arg = if let Some(arg) = args.next() {
92 arg
93 } else {
94 eprintln!("usage: {prog} <scratch directory>");
95 process::exit(1);
96 };
97
98 // Open scratch directory
99 let dir_fd = match open_scratch_directory(&arg) {
100 Ok(dir_fd) => dir_fd,
101 Err(err) => {
102 eprintln!("{err}");
103 process::exit(1)
104 }
105 };
106
107 // Run the tests.
108 unsafe { test_path_open_lots(dir_fd) }
109 }
110