]>
Commit | Line | Data |
---|---|---|
064997fb FG |
1 | #[cfg(feature = "fs")] |
2 | use std::io::{IoSlice, IoSliceMut}; | |
3 | ||
4 | #[cfg(feature = "fs")] | |
5 | #[test] | |
6 | fn 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] | |
44 | fn 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] | |
69 | fn 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] | |
95 | fn 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 | } |