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
This commit is contained in:
@@ -9,6 +9,12 @@
|
|||||||
#include <boot/stage2.h>
|
#include <boot/stage2.h>
|
||||||
#include <boot/platform.h>
|
#include <boot/platform.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
// 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;
|
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().
|
/** This function frees a block allocated via kernel_args_malloc().
|
||||||
* It's very simple; it can only free the last allocation. It's
|
* It's very simple; it can only free the last allocation. It's
|
||||||
* enough for its current usage in the boot loader, though.
|
* enough for its current usage in the boot loader, though.
|
||||||
|
|||||||
Reference in New Issue
Block a user