Skip to content

Commit f772f84

Browse files
committed
Provide read_buf and read_vectored for Hermit
1 parent 0ae221c commit f772f84

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

library/std/src/sys/pal/hermit/fd.rs

+13-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
use super::hermit_abi;
44
use crate::cmp;
5-
use crate::io::{self, IoSlice, IoSliceMut};
5+
use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut};
66
use crate::os::hermit::io::{FromRawFd, OwnedFd, RawFd, *};
77
use crate::sys::cvt;
88
use crate::sys_common::{AsInner, FromInner, IntoInner};
@@ -23,6 +23,18 @@ impl FileDesc {
2323
Ok(result as usize)
2424
}
2525

26+
pub fn read_buf(&self, mut buf: BorrowedCursor<'_>) -> io::Result<()> {
27+
let result = cvt(unsafe {
28+
hermit_abi::read(
29+
self.fd.as_raw_fd(),
30+
buf.as_mut().as_mut_ptr() as *mut u8,
31+
buf.capacity(),
32+
)
33+
})?;
34+
unsafe { buf.advance_unchecked(result as usize) };
35+
Ok(())
36+
}
37+
2638
pub fn read_vectored(&self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
2739
let ret = cvt(unsafe {
2840
hermit_abi::readv(

library/std/src/sys/pal/hermit/fs.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ impl File {
400400
}
401401

402402
pub fn read_buf(&self, cursor: BorrowedCursor<'_>) -> io::Result<()> {
403-
crate::io::default_read_buf(|buf| self.read(buf), cursor)
403+
self.0.read_buf(cursor)
404404
}
405405

406406
pub fn write(&self, buf: &[u8]) -> io::Result<usize> {

library/std/src/sys/pal/hermit/stdio.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::hermit_abi;
22
use crate::io;
3-
use crate::io::{IoSlice, IoSliceMut};
3+
use crate::io::{BorrowedCursor, IoSlice, IoSliceMut};
44
use crate::mem::ManuallyDrop;
55
use crate::os::hermit::io::FromRawFd;
66
use crate::sys::fd::FileDesc;
@@ -20,6 +20,10 @@ impl io::Read for Stdin {
2020
unsafe { ManuallyDrop::new(FileDesc::from_raw_fd(hermit_abi::STDIN_FILENO)).read(buf) }
2121
}
2222

23+
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> io::Result<()> {
24+
unsafe { ManuallyDrop::new(FileDesc::from_raw_fd(hermit_abi::STDIN_FILENO)).read_buf(buf) }
25+
}
26+
2327
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
2428
unsafe {
2529
ManuallyDrop::new(FileDesc::from_raw_fd(hermit_abi::STDIN_FILENO)).read_vectored(bufs)

0 commit comments

Comments
 (0)