Some improvements to the previous changes made to vfs_boot.cpp suggested by Ingo.

This commit is contained in:
Alex Smith 2012-06-21 19:45:36 +01:00
parent d8efc6caf6
commit 5915eeb461

View File

@ -54,8 +54,6 @@ static struct {
{NULL} {NULL}
}; };
static int32 sBootMethodType;
// This can be used by other code to see if there is a boot file system already // This can be used by other code to see if there is a boot file system already
dev_t gBootDevice = -1; dev_t gBootDevice = -1;
bool gReadOnlyBootDevice = false; bool gReadOnlyBootDevice = false;
@ -322,30 +320,27 @@ DiskBootMethod::SortPartitions(KPartition** partitions, int32 count)
The boot code should then just try them one by one. The boot code should then just try them one by one.
*/ */
static status_t static status_t
get_boot_partitions(kernel_args* args, PartitionStack& partitions) get_boot_partitions(KMessage &bootVolume, PartitionStack& partitions)
{ {
KMessage bootVolume;
bootVolume.SetTo(args->boot_volume, args->boot_volume_size);
dprintf("get_boot_partitions(): boot volume message:\n"); dprintf("get_boot_partitions(): boot volume message:\n");
bootVolume.Dump(&dprintf); bootVolume.Dump(&dprintf);
// create boot method // create boot method
sBootMethodType = bootVolume.GetInt32(BOOT_METHOD, BOOT_METHOD_DEFAULT); int32 bootMethodType = bootVolume.GetInt32(BOOT_METHOD, BOOT_METHOD_DEFAULT);
dprintf("get_boot_partitions(): boot method type: %" B_PRId32 "\n", dprintf("get_boot_partitions(): boot method type: %" B_PRId32 "\n",
sBootMethodType); bootMethodType);
BootMethod* bootMethod = NULL; BootMethod* bootMethod = NULL;
switch (sBootMethodType) { switch (bootMethodType) {
case BOOT_METHOD_NET: case BOOT_METHOD_NET:
bootMethod = new(nothrow) NetBootMethod(bootVolume, sBootMethodType); bootMethod = new(nothrow) NetBootMethod(bootVolume, bootMethodType);
break; break;
case BOOT_METHOD_HARD_DISK: case BOOT_METHOD_HARD_DISK:
case BOOT_METHOD_CD: case BOOT_METHOD_CD:
default: default:
bootMethod = new(nothrow) DiskBootMethod(bootVolume, bootMethod = new(nothrow) DiskBootMethod(bootVolume,
sBootMethodType); bootMethodType);
break; break;
} }
@ -464,8 +459,11 @@ vfs_bootstrap_file_systems(void)
void void
vfs_mount_boot_file_system(kernel_args* args) vfs_mount_boot_file_system(kernel_args* args)
{ {
KMessage bootVolume;
bootVolume.SetTo(args->boot_volume, args->boot_volume_size);
PartitionStack partitions; PartitionStack partitions;
status_t status = get_boot_partitions(args, partitions); status_t status = get_boot_partitions(bootVolume, partitions);
if (status < B_OK) { if (status < B_OK) {
panic("get_boot_partitions failed!"); panic("get_boot_partitions failed!");
} }
@ -516,8 +514,9 @@ vfs_mount_boot_file_system(kernel_args* args)
// whether the module images the boot loader has pre-loaded are the same as // whether the module images the boot loader has pre-loaded are the same as
// on the boot volume. That is the case when booting from hard disk or CD, // on the boot volume. That is the case when booting from hard disk or CD,
// but not via network. // but not via network.
bool bootingFromBootLoaderVolume = sBootMethodType == BOOT_METHOD_HARD_DISK int32 bootMethodType = bootVolume.GetInt32(BOOT_METHOD, BOOT_METHOD_DEFAULT);
|| sBootMethodType == BOOT_METHOD_CD; bool bootingFromBootLoaderVolume = bootMethodType == BOOT_METHOD_HARD_DISK
|| bootMethodType == BOOT_METHOD_CD;
module_init_post_boot_device(bootingFromBootLoaderVolume); module_init_post_boot_device(bootingFromBootLoaderVolume);
file_cache_init_post_boot_device(); file_cache_init_post_boot_device();