mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-30 14:01:51 +00:00
std: Unsafe-wrap alloc code held in-common
This commit is contained in:
parent
cefe1dcef0
commit
ed809e9b79
@ -1,3 +1,4 @@
|
||||
#![forbid(unsafe_op_in_unsafe_fn)]
|
||||
use crate::alloc::{GlobalAlloc, Layout, System};
|
||||
use crate::cmp;
|
||||
use crate::ptr;
|
||||
@ -46,14 +47,16 @@ pub unsafe fn realloc_fallback(
|
||||
old_layout: Layout,
|
||||
new_size: usize,
|
||||
) -> *mut u8 {
|
||||
// Docs for GlobalAlloc::realloc require this to be valid:
|
||||
let new_layout = Layout::from_size_align_unchecked(new_size, old_layout.align());
|
||||
// SAFETY: Docs for GlobalAlloc::realloc require this to be valid
|
||||
unsafe {
|
||||
let new_layout = Layout::from_size_align_unchecked(new_size, old_layout.align());
|
||||
|
||||
let new_ptr = GlobalAlloc::alloc(alloc, new_layout);
|
||||
if !new_ptr.is_null() {
|
||||
let size = cmp::min(old_layout.size(), new_size);
|
||||
ptr::copy_nonoverlapping(ptr, new_ptr, size);
|
||||
GlobalAlloc::dealloc(alloc, ptr, old_layout);
|
||||
let new_ptr = GlobalAlloc::alloc(alloc, new_layout);
|
||||
if !new_ptr.is_null() {
|
||||
let size = cmp::min(old_layout.size(), new_size);
|
||||
ptr::copy_nonoverlapping(ptr, new_ptr, size);
|
||||
GlobalAlloc::dealloc(alloc, ptr, old_layout);
|
||||
}
|
||||
new_ptr
|
||||
}
|
||||
new_ptr
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user