|
3 | 3 |
|
4 | 4 | #![no_std] |
5 | 5 | #![feature(allocator_api, rustc_private)] |
6 | | -#![cfg_attr(any(unix, target_os = "redox"), feature(libc))] |
7 | 6 |
|
8 | 7 | // The minimum alignment guaranteed by the architecture. This value is used to |
9 | 8 | // add fast paths for low alignment values. |
@@ -48,7 +47,18 @@ mod realloc_fallback { |
48 | 47 | } |
49 | 48 | #[cfg(any(unix, target_os = "redox"))] |
50 | 49 | mod platform { |
51 | | - extern crate libc; |
| 50 | + mod libc { |
| 51 | + use core::ffi::{c_void, c_int}; |
| 52 | + |
| 53 | + #[link(name = "c")] |
| 54 | + extern "C" { |
| 55 | + pub fn malloc(size: usize) -> *mut c_void; |
| 56 | + pub fn realloc(ptr: *mut c_void, size: usize) -> *mut c_void; |
| 57 | + pub fn calloc(nmemb: usize, size: usize) -> *mut c_void; |
| 58 | + pub fn free(ptr: *mut u8); |
| 59 | + pub fn posix_memalign(memptr: *mut *mut c_void, alignment: usize, size: usize) -> c_int; |
| 60 | + } |
| 61 | + } |
52 | 62 | use core::ptr; |
53 | 63 | use MIN_ALIGN; |
54 | 64 | use System; |
@@ -82,12 +92,12 @@ mod platform { |
82 | 92 | } |
83 | 93 | #[inline] |
84 | 94 | unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) { |
85 | | - libc::free(ptr as *mut libc::c_void) |
| 95 | + libc::free(ptr as *mut _) |
86 | 96 | } |
87 | 97 | #[inline] |
88 | 98 | unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 { |
89 | 99 | if layout.align() <= MIN_ALIGN && layout.align() <= new_size { |
90 | | - libc::realloc(ptr as *mut libc::c_void, new_size) as *mut u8 |
| 100 | + libc::realloc(ptr as *mut _, new_size) as *mut u8 |
91 | 101 | } else { |
92 | 102 | self.realloc_fallback(ptr, layout, new_size) |
93 | 103 | } |
|
0 commit comments