#[macro_export]
macro_rules! initialiseMemoryFunctions
{
($malloc: path, $free: path, $realloc: path) =>
{
{
use $crate::libc::c_char;
use $crate::libc::strlen;
use $crate::rust_extra::unlikely;
use ::std::ptr::copy_nonoverlapping;
use ::std::ptr::null_mut;
#[inline(always)]
unsafe extern "C" fn strdup(source: *const c_char) -> *mut c_char
{
let length = strlen(source);
let lengthIncludingTrailingAsciiNul = length + 1;
let destination = $malloc(lengthIncludingTrailingAsciiNul) as *mut c_char;
if unlikely(destination.is_null())
{
null_mut()
}
else
{
copy_nonoverlapping(source, destination, lengthIncludingTrailingAsciiNul);
destination
}
}
#[inline(always)]
fn initialiseMemoryFunctions
(
malloc: unsafe extern "C" fn(size: size_t) -> *mut c_void,
free: unsafe extern "C" fn(ptr: *mut c_void),
realloc: unsafe extern "C" fn(ptr: *mut c_void, size: size_t) -> *mut c_void,
strdup: unsafe extern "C" fn(s: *const c_char) -> *mut c_char
)
{
$crate::blockPool::initialiseMemoryFunctions(malloc, free, realloc, strdup);
$crate::logPool::initialiseMemoryFunctions(malloc, free, realloc, strdup);
$crate::transactionalObjectPool::initialiseMemoryFunctions(malloc, free, realloc, strdup);
}
initialiseMemoryFunctions($malloc, $free, $realloc, strdup)
}
}
}