Skip to content

Commit d10bee3

Browse files
committed
Adds Uio::read
1 parent a2801b3 commit d10bee3

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

kernel-1100/src/uio.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,22 @@ impl okf::uio::Uio<Kernel> for Uio {
3333
td,
3434
})
3535
}
36+
37+
unsafe fn read(td: *mut Thread, iov: *mut IoVec) -> Option<Self> {
38+
let res = (*iov).len;
39+
40+
if res > Self::io_max() {
41+
return None;
42+
}
43+
44+
Some(Self {
45+
iov,
46+
len: 1,
47+
off: 0,
48+
res: res.try_into().unwrap(),
49+
seg: UioSeg::Kernel,
50+
op: UioRw::Read,
51+
td,
52+
})
53+
}
3654
}

src/uio/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ pub trait Uio<K: Kernel>: Sized {
99
/// - `iov` cannot be null.
1010
unsafe fn write(td: *mut K::Thread, iov: *mut IoVec) -> Option<Self>;
1111

12+
/// Returns [`None`] if [`IoVec::len`] of `iov` is greater than [`Uio::io_max()`].
13+
///
14+
/// # Safety
15+
/// - `td` cannot be null.
16+
/// - `iov` cannot be null.
17+
unsafe fn read(td: *mut K::Thread, iov: *mut IoVec) -> Option<Self>;
18+
1219
/// Returns value of `UIO_MAXIOV`.
1320
fn vec_max() -> usize {
1421
1024

0 commit comments

Comments
 (0)