xref: /aosp_15_r20/external/crosvm/base/src/sys/unix/iobuf.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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