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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -629,7 +624,7 @@ driver_settings_init(kernel_args *args)
|
|||||||
// Move the preloaded driver settings over to the kernel
|
// Move the preloaded driver settings over to the kernel
|
||||||
|
|
||||||
list_init(&sHandles);
|
list_init(&sHandles);
|
||||||
|
|
||||||
while (settings != NULL) {
|
while (settings != NULL) {
|
||||||
settings_handle *handle = malloc(sizeof(settings_handle));
|
settings_handle *handle = malloc(sizeof(settings_handle));
|
||||||
if (handle == NULL)
|
if (handle == NULL)
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user