summaryrefslogtreecommitdiffstats
path: root/klib/mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'klib/mem.c')
-rw-r--r--klib/mem.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/klib/mem.c b/klib/mem.c
new file mode 100644
index 0000000..cf9e2aa
--- /dev/null
+++ b/klib/mem.c
@@ -0,0 +1,52 @@
+#include "string.h"
+#include "memory.h"
+
+void*
+memset(void *dest, int c, size_t n)
+{
+ char *destc = (char*)dest;
+ for(size_t i = 0; i < n; i++)
+ destc[i] = c;
+ return dest;
+}
+
+void*
+memcpy(void *dest, const void *src, size_t n)
+{
+ char *destc = (char*)dest;
+ const char *srcc = (const char*)src;
+ for(size_t i = 0; i < n; i++)
+ destc[i] = srcc[i];
+ return dest;
+}
+
+void*
+memmove(void *dest, const void *src, size_t n)
+{
+ char *destc = (char*)dest;
+ const char *srcc = (const char*)src;
+ if(destc + n < srcc) return memcpy(dest, src, n);
+ char buffer[n];
+ memcpy(buffer, src, n);
+ return memcpy(destc, buffer, n);
+}
+
+int
+memcmp(const void *a, const void *b, size_t n)
+{
+ const char *ac = (const char*)a;
+ const char *bc = (const char*)b;
+ for(size_t i = 0; i < n; i++) {
+ if(ac[i] != bc[i]) return ac[i] - bc[i];
+ }
+ return 0;
+}
+
+char*
+strdup(const char *s)
+{
+ size_t slen = strlen(s);
+ char *ret = kmalloc(slen);
+ memcpy(ret, s, slen);
+ return ret;
+}