#![allow(unused_variables, dead_code)]
use std::ffi::{CString, c_void};
use std::mem;
use crate::io::{IoMutSlice, IoSlice};
#[allow(non_camel_case_types)]
type c_size_t = usize;
#[cfg_attr(feature = "nightly", cfg(sanitize = "address"))]
#[cfg_attr(not(feature = "nightly"), cfg(false))]
unsafe extern "C" {
fn __asan_poison_memory_region(addr: *const c_void, size: c_size_t);
fn __asan_unpoison_memory_region(addr: *const c_void, size: c_size_t);
}
pub(crate) fn poison_region(addr: *const c_void, size: c_size_t) {
#[cfg_attr(feature = "nightly", cfg(sanitize = "address"))]
#[cfg_attr(not(feature = "nightly"), cfg(false))]
unsafe {
__asan_poison_memory_region(addr, size);
}
}
pub(crate) fn poison<T: Sized>(addr: *const T) {
if mem::size_of::<T>() != 0 && !addr.is_null() {
poison_region(addr.cast(), mem::size_of::<T>());
}
}
pub(crate) fn poison_iovecs(iovecs: &[IoSlice]) {
for iovec in iovecs {
poison_region(unsafe { iovec.ptr().cast() }, iovec.len());
}
}
pub(crate) fn poison_iovecs_mut(iovecs: &[IoMutSlice]) {
for iovec in iovecs {
poison_region(unsafe { iovec.ptr().cast() }, iovec.len());
}
}
pub(crate) fn poison_cstring(value: &CString) {
let value = value.as_bytes_with_nul();
poison_region(value.as_ptr().cast(), value.len());
}
pub(crate) fn unpoison_region(addr: *const c_void, size: c_size_t) {
#[cfg_attr(feature = "nightly", cfg(sanitize = "address"))]
#[cfg_attr(not(feature = "nightly"), cfg(false))]
unsafe {
__asan_unpoison_memory_region(addr, size);
}
}
pub(crate) fn unpoison<T: Sized>(addr: *const T) {
if mem::size_of::<T>() != 0 && !addr.is_null() {
unpoison_region(addr.cast(), mem::size_of::<T>());
}
}
pub(crate) fn unpoison_iovecs(iovecs: &[IoSlice]) {
for iovec in iovecs {
unpoison_region(unsafe { iovec.ptr().cast() }, iovec.len());
}
}
pub(crate) fn unpoison_iovecs_mut(iovecs: &[IoMutSlice]) {
for iovec in iovecs {
unpoison_region(unsafe { iovec.ptr().cast() }, iovec.len());
}
}
pub(crate) fn unpoison_cstring(value: &CString) {
let value = value.as_bytes_with_nul();
unpoison_region(value.as_ptr().cast(), value.len());
}