MemMove
Description
Move memory from source to destination, handling overlapping regions. A zero byte count returns dst without reading either pointer.
Parameters
| Name | Direction | Description |
|---|---|---|
dst |
out | Destination memory region. |
src |
in | Source memory region. |
n |
in | Number of bytes to move. |
Success
Returns destination pointer.
Failure
Aborts via LOG_FATAL when n > 0 and either dst or src is NULL.
Usage example (Cross-references)
Usage examples (Cross-references)
__attribute__((used)) void *memmove(void *dst, const void *src, freestanding_size_t n) {
MemMove(dst, src, (size)n);
return dst;
}- In
Memory.c:48:
}
void *MemMove(void *dst, const void *src, size n) {
if (n == 0) {
return dst;- In
Page.c:242:
u32 to_move = *len_p - ins;
if (to_move > 0u) {
MemMove(&arr[ins + 1u], &arr[ins], (size)to_move * sizeof(PageEntry));
}
arr[ins].ptr = ptr;- In
Page.c:257:
u32 to_move = *len_p - idx;
if (to_move > 0u) {
MemMove(&arr[idx], &arr[idx + 1u], (size)to_move * sizeof(PageEntry));
}
}- In
Page.c:303:
u32 to_move = page->free_len - ins;
if (to_move > 0u) {
MemMove(&arr[ins + 1u], &arr[ins], (size)to_move * sizeof(PageEntry));
}
arr[ins].ptr = ptr;- In
Slab.c:198:
// [ins..len) slice has to shift in lockstep -- per-slab the
// shift is `bw` u64 words wide.
MemMove(&slab->slabs[ins + 1u], &slab->slabs[ins], (size)to_move * sizeof(void *));
MemMove(
&slab->bitmaps[(size)(ins + 1u) * (size)bw],- In
Slab.c:199:
// shift is `bw` u64 words wide.
MemMove(&slab->slabs[ins + 1u], &slab->slabs[ins], (size)to_move * sizeof(void *));
MemMove(
&slab->bitmaps[(size)(ins + 1u) * (size)bw],
&slab->bitmaps[(size)ins * (size)bw],- In
Vec.c:234:
if (idx < vec->length) {
MemMove(
vec_ptr_at(vec, idx + count, item_size),
vec_ptr_at(vec, idx, item_size),- In
Vec.c:251:
MemSet(vec_ptr_at(vec, idx, item_size), 0, count * aligned_size);
if (idx < vec->length) {
MemMove(
vec_ptr_at(vec, idx, item_size),
vec_ptr_at(vec, idx + count, item_size),- In
Vec.c:309:
displaced = count;
}
MemMove(
vec_ptr_at(vec, vec->length + count - displaced, item_size),
vec_ptr_at(vec, idx, item_size),- In
Vec.c:325:
if (displaced) {
MemMove(
vec_ptr_at(vec, idx, item_size),
vec_ptr_at(vec, vec->length + count - displaced, item_size),- In
Vec.c:380:
// MemCopy) because the source and destination ranges overlap when
// start + count < length.
MemMove(
vec_ptr_at(vec, start, item_size),
vec_ptr_at(vec, start + count, item_size),- In
Vec.c:430:
if (elements_to_move > 0) {
MemMove(
vec_ptr_at(vec, start, item_size),
vec_ptr_at(vec, vec->length - elements_to_move, item_size),
Last updated on