Added debug_strlcpy() for use in the kernel debugger.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33380 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2009-10-01 03:02:34 +00:00
parent e9953d08dd
commit be51dd0f4c
2 changed files with 34 additions and 0 deletions
+1
View File
@@ -131,6 +131,7 @@ extern bool debug_is_kernel_memory_accessible(addr_t address, size_t size,
extern int debug_call_with_fault_handler(jmp_buf jumpBuffer,
void (*function)(void*), void* parameter);
extern status_t debug_memcpy(void* to, const void* from, size_t size);
extern ssize_t debug_strlcpy(char* to, const char* from, size_t size);
extern char kgetc(void);
extern void kputs(const char *string);
+33
View File
@@ -55,6 +55,13 @@ struct debug_memcpy_parameters {
size_t size;
};
struct debug_strlcpy_parameters {
char* to;
const char* from;
size_t size;
size_t result;
};
static const char* const kKDLPrompt = "kdebug> ";
@@ -1180,6 +1187,16 @@ debug_memcpy_trampoline(void* _parameters)
}
static void
debug_strlcpy_trampoline(void* _parameters)
{
debug_strlcpy_parameters* parameters
= (debug_strlcpy_parameters*)_parameters;
parameters->result = strlcpy(parameters->to, parameters->from,
parameters->size);
}
void
call_modules_hook(bool enter)
{
@@ -1522,6 +1539,22 @@ debug_memcpy(void* to, const void* from, size_t size)
}
/*! Similar to user_strlcpy(), but can only be invoked from within the kernel
debugger (and must not be used outside).
*/
ssize_t
debug_strlcpy(char* to, const char* from, size_t size)
{
debug_strlcpy_parameters parameters = {to, from, size};
if (debug_call_with_fault_handler(gCPU[sDebuggerOnCPU].fault_jump_buffer,
&debug_strlcpy_trampoline, &parameters) != 0) {
return B_BAD_ADDRESS;
}
return parameters.result;
}
// #pragma mark - public API