From 70ec52b0aac4b566886e80eb3771ceae98718237 Mon Sep 17 00:00:00 2001 From: Lily Sturmann Date: Tue, 31 Mar 2020 21:14:45 +0000 Subject: [PATCH] Add Iovec struct to nolibc --- nolibc/src/lib.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/nolibc/src/lib.rs b/nolibc/src/lib.rs index fa42c48899..ac5cd34870 100644 --- a/nolibc/src/lib.rs +++ b/nolibc/src/lib.rs @@ -18,6 +18,30 @@ pub use x86_64::*; // TODO: These functions are naive implementations that are not performant. +/// Buffer used by readv() and writev() syscalls +#[repr(C)] +pub struct Iovec<'a> { + /// Buffer start address + pub base: *mut u8, + + /// Number of bytes to transfer + pub size: usize, + + phantom: core::marker::PhantomData<&'a ()>, +} + +impl<'a> AsRef<[u8]> for Iovec<'a> { + fn as_ref(&self) -> &[u8] { + unsafe { core::slice::from_raw_parts(self.base, self.size) } + } +} + +impl<'a> AsMut<[u8]> for Iovec<'a> { + fn as_mut(&mut self) -> &mut [u8] { + unsafe { core::slice::from_raw_parts_mut(self.base, self.size) } + } +} + /// # Safety /// /// All libc functions are unsafe.