From 0b60583fec75f23e86b98057dc08c2c425561a8d Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 17 Jan 2008 01:58:08 +0000 Subject: [PATCH] Added convenience functions alloc_tracing_buffer_{memcpy,strcpy}(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23576 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/kernel/tracing.h | 3 +++ src/system/kernel/debug/tracing.cpp | 42 +++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/headers/private/kernel/tracing.h b/headers/private/kernel/tracing.h index 9c393ba51d..cdecda0d2d 100644 --- a/headers/private/kernel/tracing.h +++ b/headers/private/kernel/tracing.h @@ -70,6 +70,9 @@ extern "C" { #endif uint8* alloc_tracing_buffer(size_t size); +uint8* alloc_tracing_buffer_memcpy(const void* source, size_t size, bool user); +char* alloc_tracing_buffer_strcpy(const char* source, size_t maxSize, + bool user); status_t tracing_init(void); #ifdef __cplusplus diff --git a/src/system/kernel/debug/tracing.cpp b/src/system/kernel/debug/tracing.cpp index 1e3456ea8b..bf8055ab8c 100644 --- a/src/system/kernel/debug/tracing.cpp +++ b/src/system/kernel/debug/tracing.cpp @@ -262,6 +262,48 @@ alloc_tracing_buffer(size_t size) } +uint8* +alloc_tracing_buffer_memcpy(const void* source, size_t size, bool user) +{ + uint8* buffer = alloc_tracing_buffer(size); + if (buffer == NULL) + return NULL; + + if (user) { + if (user_memcpy(buffer, source, size) != B_OK) + return NULL; + } else + memcpy(buffer, source, size); + + return buffer; +} + + +char* +alloc_tracing_buffer_strcpy(const char* source, size_t maxSize, bool user) +{ + if (maxSize == 0) + return NULL; + + // there's no user_strnlen(), so always allocate the full buffer size + // in this case + if (!user) + maxSize = strnlen(source, maxSize - 1) + 1; + + char* buffer = (char*)alloc_tracing_buffer(maxSize); + if (buffer == NULL) + return NULL; + + if (user) { + if (user_strlcpy(buffer, source, maxSize) < B_OK) + return NULL; + } else + strlcpy(buffer, source, maxSize); + + return buffer; +} + + extern "C" status_t tracing_init(void) {