| //! IoVec extensions for Unix platforms. |
| //! |
| //! These functions provide conversions to unix specific representations of the |
| //! vectored data. |
| //! |
| //! # Examples |
| //! |
| //! ``` |
| //! use iovec::IoVec; |
| //! use iovec::unix; |
| //! |
| //! let a = b"hello".to_vec(); |
| //! let b = b"world".to_vec(); |
| //! |
| //! let bufs: &[&IoVec] = &[(&a[..]).into(), (&b[..]).into()]; |
| //! let os_bufs = unix::as_os_slice(&bufs[..]); |
| //! |
| //! // Use the `os_bufs` slice with `writev`. |
| //! ``` |
| |
| use IoVec; |
| use sgx_trts::libc; |
| |
| use std::mem; |
| |
| /// Convert a slice of `IoVec` refs to a slice of `libc::iovec`. |
| /// |
| /// The return value can be passed to `writev` bindings. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// use iovec::IoVec; |
| /// use iovec::unix; |
| /// |
| /// let a = b"hello".to_vec(); |
| /// let b = b"world".to_vec(); |
| /// |
| /// let bufs: &[&IoVec] = &[a[..].into(), b[..].into()]; |
| /// let os_bufs = unix::as_os_slice(bufs); |
| /// |
| /// // Use the `os_bufs` slice with `writev`. |
| /// ``` |
| pub fn as_os_slice<'a>(iov: &'a [&IoVec]) -> &'a [libc::iovec] { |
| unsafe { mem::transmute(iov) } |
| } |
| |
| /// Convert a mutable slice of `IoVec` refs to a mutable slice of `libc::iovec`. |
| /// |
| /// The return value can be passed to `readv` bindings. |
| /// |
| /// # Examples |
| /// |
| /// ``` |
| /// use iovec::IoVec; |
| /// use iovec::unix; |
| /// |
| /// let mut a = [0; 10]; |
| /// let mut b = [0; 10]; |
| /// |
| /// let bufs: &mut [&mut IoVec] = &mut [(&mut a[..]).into(), (&mut b[..]).into()]; |
| /// let os_bufs = unix::as_os_slice_mut(bufs); |
| /// |
| /// // Use the `os_bufs` slice with `readv`. |
| /// ``` |
| pub fn as_os_slice_mut<'a>(iov: &'a mut [&mut IoVec]) -> &'a mut [libc::iovec] { |
| unsafe { mem::transmute(iov) } |
| } |