5 pub unsafe fn alloc(size
: usize) -> (*mut u8, usize, u32) {
9 libc
::PROT_WRITE
| libc
::PROT_READ
,
10 libc
::MAP_ANON
| libc
::MAP_PRIVATE
,
14 if addr
== libc
::MAP_FAILED
{
15 (ptr
::null_mut(), 0, 0)
17 (addr
as *mut u8, size
, 0)
21 pub unsafe fn remap(_ptr
: *mut u8, _oldsize
: usize, _newsize
: usize, _can_move
: bool
) -> *mut u8 {
25 pub unsafe fn free_part(ptr
: *mut u8, oldsize
: usize, newsize
: usize) -> bool
{
26 libc
::munmap(ptr
.offset(newsize
as isize) as *mut _
, oldsize
- newsize
) == 0
29 pub unsafe fn free(ptr
: *mut u8, size
: usize) -> bool
{
30 libc
::munmap(ptr
as *mut _
, size
) == 0
33 pub fn can_release_part(_flags
: u32) -> bool
{
37 #[cfg(feature = "global")]
38 static mut LOCK
: libc
::pthread_mutex_t
= libc
::PTHREAD_MUTEX_INITIALIZER
;
40 #[cfg(feature = "global")]
41 pub fn acquire_global_lock() {
42 unsafe { assert_eq!(libc::pthread_mutex_lock(&mut LOCK), 0) }
45 #[cfg(feature = "global")]
46 pub fn release_global_lock() {
47 unsafe { assert_eq!(libc::pthread_mutex_unlock(&mut LOCK), 0) }
50 pub fn allocates_zeros() -> bool
{
54 pub fn page_size() -> usize {