|
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