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 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 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