summaryrefslogtreecommitdiff
path: root/src/boot/libc/memmove.c
blob: 21c725645466338c76ae349456c2e9dcbb986d6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "string.h"

void* memmove(void* dst, const void* src, size_t size) {
    unsigned char* _dst = dst;
    const unsigned char* _src = src;
    register size_t rem;

    if (_dst == _src) {
        return dst;
    }
    if (_dst < _src) {
        for (rem = size--; rem != 0; rem = size--) {
            *_dst++ = *_src++;
        }
    } else {
        _dst += size - 1;
        _src += size - 1;
        for (rem = size--; rem != 0; rem = size--) {
            *_dst-- = *_src--;
        }
    }
    return dst;
}