use super::openjpeg::*;
extern "C" {
fn malloc(_: usize) -> *mut core::ffi::c_void;
fn calloc(_: usize, _: usize) -> *mut core::ffi::c_void;
fn realloc(_: *mut core::ffi::c_void, _: usize) -> *mut core::ffi::c_void;
fn free(_: *mut core::ffi::c_void);
fn posix_memalign(
__memptr: *mut *mut core::ffi::c_void,
__alignment: size_t,
__size: size_t,
) -> core::ffi::c_int;
fn memcpy(
_: *mut core::ffi::c_void,
_: *const core::ffi::c_void,
_: usize,
) -> *mut core::ffi::c_void;
}
#[inline]
unsafe fn opj_aligned_alloc_n(mut alignment: size_t, mut size: size_t) -> *mut core::ffi::c_void {
let mut ptr = std::ptr::null_mut::<core::ffi::c_void>();
assert!(alignment != 0 && alignment & alignment.wrapping_sub(1) == 0);
assert!(alignment >= core::mem::size_of::<*mut core::ffi::c_void>());
if size == 0 {
return std::ptr::null_mut::<core::ffi::c_void>();
}
if posix_memalign(&mut ptr, alignment, size) != 0 {
ptr = std::ptr::null_mut::<core::ffi::c_void>()
}
ptr
}
#[inline]
unsafe fn opj_aligned_realloc_n(
mut ptr: *mut core::ffi::c_void,
mut alignment: size_t,
mut new_size: size_t,
) -> *mut core::ffi::c_void {
let mut r_ptr = std::ptr::null_mut::<core::ffi::c_void>();
assert!(alignment != 0 && alignment & alignment.wrapping_sub(1) == 0);
assert!(alignment >= core::mem::size_of::<*mut core::ffi::c_void>());
if new_size == 0 {
return std::ptr::null_mut::<core::ffi::c_void>();
}
r_ptr = realloc(ptr, new_size);
if r_ptr as size_t & alignment.wrapping_sub(1) != 0 {
let mut a_ptr = opj_aligned_alloc_n(alignment, new_size);
if !a_ptr.is_null() {
memcpy(a_ptr, r_ptr, new_size);
}
free(r_ptr);
r_ptr = a_ptr
}
r_ptr
}
#[no_mangle]
pub(crate) unsafe fn opj_malloc(mut size: size_t) -> *mut core::ffi::c_void {
if size == 0 {
return std::ptr::null_mut::<core::ffi::c_void>();
}
malloc(size)
}
#[no_mangle]
pub(crate) unsafe fn opj_calloc(mut num: size_t, mut size: size_t) -> *mut core::ffi::c_void {
if num == 0 || size == 0 {
return std::ptr::null_mut::<core::ffi::c_void>();
}
calloc(num, size)
}
#[no_mangle]
pub(crate) unsafe fn opj_aligned_malloc(mut size: size_t) -> *mut core::ffi::c_void {
opj_aligned_alloc_n(16u32 as size_t, size)
}
#[no_mangle]
pub(crate) unsafe fn opj_aligned_realloc(
mut ptr: *mut core::ffi::c_void,
mut size: size_t,
) -> *mut core::ffi::c_void {
opj_aligned_realloc_n(ptr, 16u32 as size_t, size)
}
#[no_mangle]
pub(crate) unsafe fn opj_aligned_32_malloc(mut size: size_t) -> *mut core::ffi::c_void {
opj_aligned_alloc_n(32u32 as size_t, size)
}
#[no_mangle]
pub(crate) unsafe fn opj_aligned_32_realloc(
mut ptr: *mut core::ffi::c_void,
mut size: size_t,
) -> *mut core::ffi::c_void {
opj_aligned_realloc_n(ptr, 32u32 as size_t, size)
}
#[no_mangle]
pub(crate) unsafe fn opj_aligned_free(mut ptr: *mut core::ffi::c_void) {
free(ptr);
}
#[no_mangle]
pub(crate) unsafe fn opj_realloc(
mut ptr: *mut core::ffi::c_void,
mut new_size: size_t,
) -> *mut core::ffi::c_void {
if new_size == 0 {
return std::ptr::null_mut::<core::ffi::c_void>();
}
realloc(ptr, new_size)
}
#[no_mangle]
pub(crate) unsafe fn opj_free(mut ptr: *mut core::ffi::c_void) {
free(ptr);
}