aboutsummaryrefslogtreecommitdiff
path: root/src/kernel/lib/memory.c
blob: 6ec4ed9cc73bc3da4ab49a9a99f5375fd8ec54e3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stddef.h>

void *memory_copy(void *dest, const void *src, size_t count) {
    const char *sp = (const char *) src;
    char *dp = (char *) dest;
    for (; count != 0; count--) *dp++ = *sp++;
    return dest;
}

void *memory_set(void *dest, char val, size_t count) {
    char *temp = (char *) dest;
    for (; count != 0; count--) *temp++ = val;
    return dest;
}

int memory_compare(const void *a_ptr, const void *b_ptr, size_t size) {
    const unsigned char *a = (const unsigned char *) a_ptr;
    const unsigned char *b = (const unsigned char *) b_ptr;
    for (size_t i = 0; i < size; i++) {
        if (a[i] < b[i])
            return -1;
        else if (b[i] < a[i])
            return 1;
    }
    return 0;
}