use core::mem::MaybeUninit;
use super::syscall::{self, syscall, Check, ResultSize};
use crate::{Errno, Fd, Iovec, IovecMut};
impl Fd {
#[inline(always)]
pub fn close(self) -> Result<(), Errno> {
unsafe { syscall!(syscall::SYS_close, self.get()) }.check()
}
#[inline(always)]
pub fn write(self, buf: &[u8]) -> Result<usize, Errno> {
unsafe { syscall!(syscall::SYS_write, self.get(), buf.as_ptr(), buf.len()) }.try_usize()
}
#[inline(always)]
pub fn writev(self, bufs: &[Iovec]) -> Result<usize, Errno> {
unsafe { syscall!(syscall::SYS_writev, self.get(), bufs.as_ptr(), bufs.len()) }.try_usize()
}
#[inline(always)]
pub fn read(self, buf: &mut [MaybeUninit<u8>]) -> Result<usize, Errno> {
unsafe { syscall!(syscall::SYS_read, self.get(), buf.as_mut_ptr(), buf.len()) }.try_usize()
}
pub fn readv(self, bufs: &mut [IovecMut]) -> Result<usize, Errno> {
unsafe { syscall!(syscall::SYS_readv, self.get(), bufs.as_ptr(), bufs.len()) }.try_usize()
}
}