69 lines
1.6 KiB
Rust
69 lines
1.6 KiB
Rust
//! 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 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) }
|
|
}
|