From bcbf43e55cdf21a858c05e206a675781a8ebec2b Mon Sep 17 00:00:00 2001 From: apio Date: Wed, 12 Oct 2022 18:03:54 +0200 Subject: [PATCH] Kernel/std: Add strdup() --- kernel/include/std/string.h | 4 +++- kernel/src/std/string.cpp | 11 ++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/kernel/include/std/string.h b/kernel/include/std/string.h index d8f1a17a..4a464ba1 100644 --- a/kernel/include/std/string.h +++ b/kernel/include/std/string.h @@ -16,4 +16,6 @@ char* strstr(char* haystack, const char* needle); void* memcpy(void* dest, const void* src, size_t n); void* memset(void* dest, int c, size_t n); int memcmp(const void* a, const void* b, size_t n); -void* memmove(void* dest, void* src, size_t n); \ No newline at end of file +void* memmove(void* dest, void* src, size_t n); + +char* strdup(const char* src); \ No newline at end of file diff --git a/kernel/src/std/string.cpp b/kernel/src/std/string.cpp index e2661aac..592bb54f 100644 --- a/kernel/src/std/string.cpp +++ b/kernel/src/std/string.cpp @@ -1,4 +1,5 @@ -#include +#include "std/string.h" +#include "std/stdlib.h" size_t strlen(const char* __s) { @@ -121,4 +122,12 @@ void* memmove(void* dest, void* src, size_t n) for (long i = 0; i < (long)n; i++) { *((char*)dest + i) = *((char*)src + i); } } return dest; +} + +char* strdup(const char* src) +{ + size_t length = strlen(src); + char* duplicated = (char*)kmalloc(length + 1); + memcpy(duplicated, src, length + 1); + return duplicated; } \ No newline at end of file