1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2020 The ChromiumOS Authors 2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file. 4*bb4ee6a4SAndroid Build Coastguard Worker 5*bb4ee6a4SAndroid Build Coastguard Worker use std::ffi::c_void; 6*bb4ee6a4SAndroid Build Coastguard Worker 7*bb4ee6a4SAndroid Build Coastguard Worker use libc::iovec; 8*bb4ee6a4SAndroid Build Coastguard Worker 9*bb4ee6a4SAndroid Build Coastguard Worker use crate::iobuf::PlatformIoBuf; 10*bb4ee6a4SAndroid Build Coastguard Worker 11*bb4ee6a4SAndroid Build Coastguard Worker /// Cross platform binary compatible iovec. See [`crate::IoBufMut`] for documentation. 12*bb4ee6a4SAndroid Build Coastguard Worker pub type IoBuf = iovec; 13*bb4ee6a4SAndroid Build Coastguard Worker 14*bb4ee6a4SAndroid Build Coastguard Worker impl PlatformIoBuf for IoBuf { 15*bb4ee6a4SAndroid Build Coastguard Worker #[inline] new(ptr: *mut u8, len: usize) -> Self16*bb4ee6a4SAndroid Build Coastguard Worker fn new(ptr: *mut u8, len: usize) -> Self { 17*bb4ee6a4SAndroid Build Coastguard Worker iovec { 18*bb4ee6a4SAndroid Build Coastguard Worker iov_base: ptr as *mut c_void, 19*bb4ee6a4SAndroid Build Coastguard Worker iov_len: len, 20*bb4ee6a4SAndroid Build Coastguard Worker } 21*bb4ee6a4SAndroid Build Coastguard Worker } 22*bb4ee6a4SAndroid Build Coastguard Worker 23*bb4ee6a4SAndroid Build Coastguard Worker #[inline] len(&self) -> usize24*bb4ee6a4SAndroid Build Coastguard Worker fn len(&self) -> usize { 25*bb4ee6a4SAndroid Build Coastguard Worker self.iov_len 26*bb4ee6a4SAndroid Build Coastguard Worker } 27*bb4ee6a4SAndroid Build Coastguard Worker 28*bb4ee6a4SAndroid Build Coastguard Worker #[inline] ptr(&self) -> *mut u829*bb4ee6a4SAndroid Build Coastguard Worker fn ptr(&self) -> *mut u8 { 30*bb4ee6a4SAndroid Build Coastguard Worker self.iov_base as *mut u8 31*bb4ee6a4SAndroid Build Coastguard Worker } 32*bb4ee6a4SAndroid Build Coastguard Worker 33*bb4ee6a4SAndroid Build Coastguard Worker #[inline] set_len(&mut self, len: usize)34*bb4ee6a4SAndroid Build Coastguard Worker fn set_len(&mut self, len: usize) { 35*bb4ee6a4SAndroid Build Coastguard Worker self.iov_len = len; 36*bb4ee6a4SAndroid Build Coastguard Worker } 37*bb4ee6a4SAndroid Build Coastguard Worker 38*bb4ee6a4SAndroid Build Coastguard Worker #[inline] set_ptr(&mut self, ptr: *mut u8)39*bb4ee6a4SAndroid Build Coastguard Worker fn set_ptr(&mut self, ptr: *mut u8) { 40*bb4ee6a4SAndroid Build Coastguard Worker self.iov_base = ptr as *mut c_void; 41*bb4ee6a4SAndroid Build Coastguard Worker } 42*bb4ee6a4SAndroid Build Coastguard Worker } 43