diff --git a/src/kernel/core/device_manager/Jamfile b/src/kernel/core/device_manager/Jamfile index 4416524e38..01e025b534 100644 --- a/src/kernel/core/device_manager/Jamfile +++ b/src/kernel/core/device_manager/Jamfile @@ -16,6 +16,7 @@ KernelMergeObject kernel_device_manager.o : registration.c root_node.c scan.c + settings.cpp : -fno-pic -Wno-unused -D_KERNEL_MODE ; diff --git a/src/kernel/core/device_manager/settings.cpp b/src/kernel/core/device_manager/settings.cpp new file mode 100644 index 0000000000..614dff40a0 --- /dev/null +++ b/src/kernel/core/device_manager/settings.cpp @@ -0,0 +1,49 @@ +/* + * Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Distributed under the terms of the MIT License. + */ + + +#include + +#include +#include + + +static status_t +get_safemode_option(const char *parameter, char *buffer, size_t *_bufferSize) +{ + // ToDo: implement me for real! + // We could also think about making this available in the kernel (by making it non-static) + + return B_ENTRY_NOT_FOUND; +} + + +// #pragma mark - + + +extern "C" status_t +_user_get_safemode_option(const char *userParameter, char *userBuffer, size_t *_userBufferSize) +{ + char parameter[B_FILE_NAME_LENGTH]; + char buffer[B_PATH_NAME_LENGTH]; + size_t bufferSize; + + if (!IS_USER_ADDRESS(userParameter) || !IS_USER_ADDRESS(userBuffer) + || !IS_USER_ADDRESS(_userBufferSize) + || user_memcpy(&bufferSize, _userBufferSize, sizeof(size_t)) < B_OK + || user_strlcpy(parameter, userParameter, B_FILE_NAME_LENGTH) < B_OK) + return B_BAD_ADDRESS; + + if (bufferSize > B_PATH_NAME_LENGTH) + bufferSize = B_PATH_NAME_LENGTH; + + status_t status = get_safemode_option(parameter, buffer, &bufferSize); + + if (user_strlcpy(userBuffer, buffer, bufferSize) < B_OK + || user_memcpy(_userBufferSize, &bufferSize, sizeof(size_t)) < B_OK) + return B_BAD_ADDRESS; + + return status; +}