From 007c81ec98def2a06b3df2287d9e51e2745e28b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 10 May 2004 16:47:06 +0000 Subject: [PATCH] Added kernel_args_strdup() function as a strdup() replacement. Added a ToDo comment. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7500 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kernel/boot/loader/kernel_args.cpp | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/kernel/boot/loader/kernel_args.cpp b/src/kernel/boot/loader/kernel_args.cpp index 91f62d809b..8e02c21dd3 100644 --- a/src/kernel/boot/loader/kernel_args.cpp +++ b/src/kernel/boot/loader/kernel_args.cpp @@ -9,6 +9,12 @@ #include #include +#include + + +// ToDo: the kernel_args heap chunks need to be remembered in the kernel_args +// structure, so that unneeded memory can be freed in the kernel again. + static const size_t kChunkSize = 16384; @@ -60,6 +66,27 @@ kernel_args_malloc(size_t size) } +/** Convenience function that copies strdup() functions for the + * kernel args heap. + */ + +extern "C" char * +kernel_args_strdup(const char *string) +{ + if (string == NULL || string[0] == '\0') + return NULL; + + size_t length = strlen(string) + 1; + + char *target = (char *)kernel_args_malloc(length); + if (target == NULL) + return NULL; + + memcpy(target, string, length); + return target; +} + + /** This function frees a block allocated via kernel_args_malloc(). * It's very simple; it can only free the last allocation. It's * enough for its current usage in the boot loader, though.