From ff229e1ebb713500d265248190a19d62fd0886a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 25 May 2005 13:35:46 +0000 Subject: [PATCH] The buffer passed over from the boot loader is now null terminated. load_driver_settings() now accepts absolute paths as well. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12808 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/libroot/os/driver_settings.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/system/libroot/os/driver_settings.c b/src/system/libroot/os/driver_settings.c index 3ee814e663..7b6ef97b53 100644 --- a/src/system/libroot/os/driver_settings.c +++ b/src/system/libroot/os/driver_settings.c @@ -636,11 +636,13 @@ driver_settings_init(kernel_args *args) return B_NO_MEMORY; if (settings->size != 0) { - handle->text = malloc(settings->size); + handle->text = malloc(settings->size + 1); if (handle->text == NULL) return B_NO_MEMORY; memcpy(handle->text, settings->buffer, settings->size); + handle->text[settings->size] = '\0'; + // null terminate the buffer } else handle->text = NULL; @@ -709,6 +711,7 @@ load_driver_settings(const char *driverName) // we got it, now let's see if it already has been parsed if (handle->magic != SETTINGS_MAGIC) { handle->magic = SETTINGS_MAGIC; + if (parse_settings(handle) != B_OK) { // no valid settings, let's cut down its memory requirements free(handle->text); @@ -741,7 +744,7 @@ load_driver_settings(const char *driverName) #endif // open the settings from the standardized location - { + if (driverName[0] != '/') { char path[B_FILE_NAME_LENGTH + 64]; // ToDo: use the kernel's find_directory for this @@ -749,7 +752,9 @@ load_driver_settings(const char *driverName) strlcat(path, driverName, sizeof(path)); file = open(path, O_RDONLY); - } + } else + file = open(driverName, O_RDONLY); + if (file < B_OK) { #ifdef _KERNEL_MODE mutex_unlock(&sLock);