From 954696728cf4b6a575c3a59517dd677ec6332f26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Sun, 3 Dec 2017 22:28:58 +0100 Subject: [PATCH] Add memory copy and move functions. Required by gcc, and we'll also use them soon --- src/kernel/include/memory.h | 9 ++++++++ src/kernel/memory/string.c | 43 +++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 src/kernel/memory/string.c diff --git a/src/kernel/include/memory.h b/src/kernel/include/memory.h index 8af8e45..17cb7a4 100644 --- a/src/kernel/include/memory.h +++ b/src/kernel/include/memory.h @@ -21,3 +21,12 @@ #define PAGE_SIZE 0x1000 #define ENTRIES_PER_PT 512 + +#ifndef __ASSEMBLER__ +#include +void *memcpy(void *dst, const void *src, size_t n); +void *memset(void *s, int c, size_t n); +void *memmove(void *dest, const void *src, size_t n); +int memcmp(const void *s1, const void *s2, size_t n); +size_t strlen(const char *s); +#endif diff --git a/src/kernel/memory/string.c b/src/kernel/memory/string.c new file mode 100644 index 0000000..7625e46 --- /dev/null +++ b/src/kernel/memory/string.c @@ -0,0 +1,43 @@ +#include +#include +#include + +void *memcpy(void *dst, const void *src, size_t n) +{ + char *dp = dst; + const char *sp = src; + while(n--) *dp++ = *sp++; + return dst; +} + +void *memset(void *s, int c, size_t n) +{ + unsigned char *p = s; + while(n--) *p++ = (unsigned char)c; + return s; +} + +void *memmove(void *dest, const void *src, size_t n) +{ + // Since our memcpy implementation copies one char* at a time, this is safe + memcpy(dest, src, n); + return dest; +} + +int memcmp(const void *s1, const void *s2, size_t n) +{ + const unsigned char *p1 = s1, *p2 = s2; + for(; n--; p1++, p2++) + { + if(*p1 != *p2) + return *p1 - *p2; + } + return 0; +} + +size_t strlen(const char *s) +{ + size_t len = 0; + while(*s++) len++; + return len; +}