]> git.proxmox.com Git - rustc.git/blame - vendor/rustix/tests/io/read_write.rs
New upstream version 1.66.0+dfsg1
[rustc.git] / vendor / rustix / tests / io / read_write.rs
CommitLineData
064997fb
FG
1#[cfg(feature = "fs")]
2use std::io::{IoSlice, IoSliceMut};
3
4#[cfg(feature = "fs")]
5#[test]
6fn test_readwrite_pv() {
7 use rustix::fs::{cwd, openat, Mode, OFlags};
8 use rustix::io::{preadv, pwritev};
9
10 let tmp = tempfile::tempdir().unwrap();
11 let dir = openat(cwd(), tmp.path(), OFlags::RDONLY, Mode::empty()).unwrap();
12 let foo = openat(
13 &dir,
14 "foo",
15 OFlags::RDWR | OFlags::CREATE | OFlags::TRUNC,
16 Mode::RUSR | Mode::WUSR,
17 )
18 .unwrap();
19
20 // For most targets, just call `pwritev`.
21 #[cfg(not(any(target_os = "ios", target_os = "macos")))]
22 {
23 pwritev(&foo, &[IoSlice::new(b"hello")], 200).unwrap();
24 }
25 // macOS only has pwritev in newer versions; allow it to fail with `ENOSYS`.
26 #[cfg(any(target_os = "ios", target_os = "macos"))]
27 {
28 match pwritev(&foo, &[IoSlice::new(b"hello")], 200) {
29 Ok(_) => (),
30 Err(rustix::io::Errno::NOSYS) => return,
31 Err(err) => Err(err).unwrap(),
32 }
33 }
34 pwritev(&foo, &[IoSlice::new(b"world")], 300).unwrap();
35 let mut buf = [0_u8; 5];
36 preadv(&foo, &mut [IoSliceMut::new(&mut buf)], 200).unwrap();
37 assert_eq!(&buf, b"hello");
38 preadv(&foo, &mut [IoSliceMut::new(&mut buf)], 300).unwrap();
39 assert_eq!(&buf, b"world");
40}
41
42#[cfg(feature = "fs")]
43#[test]
44fn test_readwrite_p() {
45 use rustix::fs::{cwd, openat, Mode, OFlags};
46 use rustix::io::{pread, pwrite};
47
48 let tmp = tempfile::tempdir().unwrap();
49 let dir = openat(cwd(), tmp.path(), OFlags::RDONLY, Mode::empty()).unwrap();
50 let foo = openat(
51 &dir,
52 "foo",
53 OFlags::RDWR | OFlags::CREATE | OFlags::TRUNC,
54 Mode::RUSR | Mode::WUSR,
55 )
56 .unwrap();
57
58 pwrite(&foo, b"hello", 200).unwrap();
59 pwrite(&foo, b"world", 300).unwrap();
60 let mut buf = [0_u8; 5];
61 pread(&foo, &mut buf, 200).unwrap();
62 assert_eq!(&buf, b"hello");
63 pread(&foo, &mut buf, 300).unwrap();
64 assert_eq!(&buf, b"world");
65}
66
67#[cfg(feature = "fs")]
68#[test]
69fn test_readwrite_v() {
70 use rustix::fs::{cwd, openat, seek, Mode, OFlags};
71 use rustix::io::{readv, writev, SeekFrom};
72
73 let tmp = tempfile::tempdir().unwrap();
74 let dir = openat(cwd(), tmp.path(), OFlags::RDONLY, Mode::empty()).unwrap();
75 let foo = openat(
76 &dir,
77 "foo",
78 OFlags::RDWR | OFlags::CREATE | OFlags::TRUNC,
79 Mode::RUSR | Mode::WUSR,
80 )
81 .unwrap();
82
83 writev(&foo, &[IoSlice::new(b"hello")]).unwrap();
84 writev(&foo, &[IoSlice::new(b"world")]).unwrap();
85 seek(&foo, SeekFrom::Start(0)).unwrap();
86 let mut buf = [0_u8; 5];
87 readv(&foo, &mut [IoSliceMut::new(&mut buf)]).unwrap();
88 assert_eq!(&buf, b"hello");
89 readv(&foo, &mut [IoSliceMut::new(&mut buf)]).unwrap();
90 assert_eq!(&buf, b"world");
91}
92
93#[cfg(feature = "fs")]
94#[test]
95fn test_readwrite() {
96 use rustix::fs::{cwd, openat, seek, Mode, OFlags};
97 use rustix::io::{read, write};
98 use std::io::SeekFrom;
99
100 let tmp = tempfile::tempdir().unwrap();
101 let dir = openat(cwd(), tmp.path(), OFlags::RDONLY, Mode::empty()).unwrap();
102 let foo = openat(
103 &dir,
104 "foo",
105 OFlags::RDWR | OFlags::CREATE | OFlags::TRUNC,
106 Mode::RUSR | Mode::WUSR,
107 )
108 .unwrap();
109
110 write(&foo, b"hello").unwrap();
111 write(&foo, b"world").unwrap();
112 seek(&foo, SeekFrom::Start(0)).unwrap();
113 let mut buf = [0_u8; 5];
114 read(&foo, &mut buf).unwrap();
115 assert_eq!(&buf, b"hello");
116 read(&foo, &mut buf).unwrap();
117 assert_eq!(&buf, b"world");
118}