Skip to content

Commit a9aaf3f

Browse files
committed
Implement read_buf for RustHermit
In principle, this PR extends #108326 for RustyHermit. Signed-off-by: Stefan Lankes <slankes@eonerc.rwth-aachen.de>
1 parent 478cbb4 commit a9aaf3f

File tree

1 file changed

+24
-7
lines changed
  • library/std/src/sys/hermit

1 file changed

+24
-7
lines changed

library/std/src/sys/hermit/net.rs

+24-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#![allow(dead_code)]
22

33
use crate::cmp;
4-
use crate::io::{self, IoSlice, IoSliceMut};
4+
use crate::io::{self, BorrowedBuf, BorrowedCursor, IoSlice, IoSliceMut};
55
use crate::mem;
66
use crate::net::{Shutdown, SocketAddr};
77
use crate::os::hermit::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, RawFd};
@@ -146,18 +146,35 @@ impl Socket {
146146
Ok(Socket(unsafe { FileDesc::from_raw_fd(fd) }))
147147
}
148148

149-
fn recv_with_flags(&self, buf: &mut [u8], flags: i32) -> io::Result<usize> {
150-
let ret =
151-
cvt(unsafe { netc::recv(self.0.as_raw_fd(), buf.as_mut_ptr(), buf.len(), flags) })?;
152-
Ok(ret as usize)
149+
fn recv_with_flags(&self, mut buf: BorrowedCursor<'_>, flags: i32) -> io::Result<()> {
150+
let ret = cvt(unsafe {
151+
netc::recv(
152+
self.0.as_raw_fd(),
153+
buf.as_mut().as_mut_ptr() as *mut u8,
154+
buf.capacity(),
155+
flags,
156+
)
157+
})?;
158+
unsafe {
159+
buf.advance(ret as usize);
160+
}
161+
Ok(())
153162
}
154163

155164
pub fn read(&self, buf: &mut [u8]) -> io::Result<usize> {
156-
self.recv_with_flags(buf, 0)
165+
let mut buf = BorrowedBuf::from(buf);
166+
self.recv_with_flags(buf.unfilled(), 0)?;
167+
Ok(buf.len())
157168
}
158169

159170
pub fn peek(&self, buf: &mut [u8]) -> io::Result<usize> {
160-
self.recv_with_flags(buf, netc::MSG_PEEK)
171+
let mut buf = BorrowedBuf::from(buf);
172+
self.recv_with_flags(buf.unfilled(), netc::MSG_PEEK)?;
173+
Ok(buf.len())
174+
}
175+
176+
pub fn read_buf(&self, buf: BorrowedCursor<'_>) -> io::Result<()> {
177+
self.recv_with_flags(buf, 0)
161178
}
162179

163180
pub fn read_vectored(&self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {

0 commit comments

Comments
 (0)