The driver settings in the boot loader overwrote the settings for later kernel use;

they could not be parsed again by the kernel, and thus, safemode was not working
anymore (as it was queried by the SMP stuff).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14960 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2005-11-16 17:01:45 +00:00
parent d4637d3200
commit 10fbb5f7fd
+9 -7
View File
@@ -379,12 +379,7 @@ free_settings(settings_handle *handle)
free_parameter(&handle->settings.parameters[i]); free_parameter(&handle->settings.parameters[i]);
free(handle->settings.parameters); free(handle->settings.parameters);
#ifndef _BOOT_MODE
// in the boot loader we either don't care (because the heap is dumped anyway)
// or must not free the text if we want to pass the buffer over to the kernel
free(handle->text); free(handle->text);
#endif
free(handle); free(handle);
} }
@@ -688,6 +683,7 @@ unload_driver_settings(void *handle)
if (handle != NULL) if (handle != NULL)
free_settings(handle); free_settings(handle);
return B_OK; return B_OK;
} }
@@ -735,8 +731,14 @@ load_driver_settings(const char *driverName)
struct driver_settings_file *settings = gKernelArgs.driver_settings; struct driver_settings_file *settings = gKernelArgs.driver_settings;
while (settings != NULL) { while (settings != NULL) {
if (!strcmp(settings->name, driverName)) { if (!strcmp(settings->name, driverName)) {
// we have it // we have it - since the buffer is clobbered, we have to
return new_settings(settings->buffer, driverName); // copy its contents, though
char *text = malloc(settings->size + 1);
if (text == NULL)
return NULL;
memcpy(text, settings->buffer, settings->size + 1);
return new_settings(text, driverName);
} }
settings = settings->next; settings = settings->next;
} }