malloc_array/
ptr.rs

1use std::{
2    ffi::c_void,
3    mem::{
4	self,
5	MaybeUninit,
6    },
7};
8use libc::{
9    size_t,
10    c_int,
11};
12
13pub type VoidPointer = *mut ();
14pub type ConstVoidPointer = *const ();
15
16pub const NULL_PTR: VoidPointer = 0 as VoidPointer;
17
18pub fn null<T>() -> *mut T
19{
20    NULL_PTR as *mut T
21}
22
23pub unsafe fn memset(ptr: *mut u8, value: u8, length: usize)
24{
25    libc::memset(ptr as *mut c_void, value as c_int, length as size_t);
26}
27
28pub unsafe fn replace<T>(ptr: *mut T, value: T) -> T
29{
30    mem::replace(&mut *ptr, value)
31}
32pub unsafe fn take<T>(ptr: *mut T) -> T
33{
34    mem::replace(&mut *ptr, MaybeUninit::zeroed().assume_init())
35}
36pub unsafe fn put<T>(ptr: *mut T, value: T)
37{
38    mem::forget(mem::replace(&mut *ptr, value));
39}
40
41pub unsafe fn memcpy(dst: VoidPointer, src: ConstVoidPointer, size: usize) -> VoidPointer
42{
43    libc::memcpy(dst as *mut c_void, src as *const c_void, size as size_t) as VoidPointer
44}
45pub unsafe fn memmove(dst: VoidPointer, src: ConstVoidPointer, size: usize) -> VoidPointer
46{
47    libc::memmove(dst as *mut c_void, src as *const c_void, size as size_t) as VoidPointer
48}