]> git.proxmox.com Git - rustc.git/blob - library/std/src/sys/vxworks/alloc.rs
New upstream version 1.48.0+dfsg1
[rustc.git] / library / std / src / sys / vxworks / alloc.rs
1 use crate::alloc::{GlobalAlloc, Layout, System};
2 use crate::ptr;
3 use crate::sys_common::alloc::{realloc_fallback, MIN_ALIGN};
4
5 #[stable(feature = "alloc_system_type", since = "1.28.0")]
6 unsafe impl GlobalAlloc for System {
7 #[inline]
8 unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
9 if layout.align() <= MIN_ALIGN && layout.align() <= layout.size() {
10 libc::malloc(layout.size()) as *mut u8
11 } else {
12 aligned_malloc(&layout)
13 }
14 }
15
16 #[inline]
17 unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
18 if layout.align() <= MIN_ALIGN && layout.align() <= layout.size() {
19 libc::calloc(layout.size(), 1) as *mut u8
20 } else {
21 let ptr = self.alloc(layout.clone());
22 if !ptr.is_null() {
23 ptr::write_bytes(ptr, 0, layout.size());
24 }
25 ptr
26 }
27 }
28
29 #[inline]
30 unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
31 libc::free(ptr as *mut libc::c_void)
32 }
33
34 #[inline]
35 unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
36 if layout.align() <= MIN_ALIGN && layout.align() <= new_size {
37 libc::realloc(ptr as *mut libc::c_void, new_size) as *mut u8
38 } else {
39 realloc_fallback(self, ptr, layout, new_size)
40 }
41 }
42 }
43
44 #[inline]
45 unsafe fn aligned_malloc(layout: &Layout) -> *mut u8 {
46 let mut out = ptr::null_mut();
47 let ret = libc::posix_memalign(&mut out, layout.align(), layout.size());
48 if ret != 0 { ptr::null_mut() } else { out as *mut u8 }
49 }