Support partition-less disks
authorGé van Geldorp <ge@gse.nl>
Mon, 16 May 2005 11:06:57 +0000 (11:06 +0000)
committerGé van Geldorp <ge@gse.nl>
Mon, 16 May 2005 11:06:57 +0000 (11:06 +0000)
svn path=/trunk/; revision=15334

reactos/boot/freeldr/freeldr/arch/i386/i386disk.c
reactos/boot/freeldr/freeldr/disk/partition.c

index 42bb8c8..95f766d 100644 (file)
@@ -205,9 +205,27 @@ BOOL i386DiskGetBootVolume(PULONG DriveNumber, PULONGLONG StartSector, PULONGLON
        {
                // Partition requested was zero which means the boot partition
                if (! DiskGetActivePartitionEntry(i386BootDrive, &PartitionTableEntry))
        {
                // Partition requested was zero which means the boot partition
                if (! DiskGetActivePartitionEntry(i386BootDrive, &PartitionTableEntry))
+               {
+                       /* Try partition-less disk */
+                       *StartSector = 0;
+                       *SectorCount = 0;
+               }
+               /* Check for valid partition */
+               else if (PartitionTableEntry.SystemIndicator == PARTITION_ENTRY_UNUSED)
                {
                        return FALSE;
                }
                {
                        return FALSE;
                }
+               else
+               {
+                       *StartSector = PartitionTableEntry.SectorCountBeforePartition;
+                       *SectorCount = PartitionTableEntry.PartitionSectorCount;
+               }
+       }
+       else if (0xff == i386BootPartition)
+       {
+               /* Partition-less disk */
+               *StartSector = 0;
+               *SectorCount = 0;
        }
        else
        {
        }
        else
        {
@@ -216,25 +234,26 @@ BOOL i386DiskGetBootVolume(PULONG DriveNumber, PULONGLONG StartSector, PULONGLON
                {
                        return FALSE;
                }
                {
                        return FALSE;
                }
-       }
-
-       // Check for valid partition
-       if (PartitionTableEntry.SystemIndicator == PARTITION_ENTRY_UNUSED)
-       {
-               return FALSE;
+               /* Check for valid partition */
+               else if (PartitionTableEntry.SystemIndicator == PARTITION_ENTRY_UNUSED)
+               {
+                       return FALSE;
+               }
+               else
+               {
+                       *StartSector = PartitionTableEntry.SectorCountBeforePartition;
+                       *SectorCount = PartitionTableEntry.PartitionSectorCount;
+               }
        }
 
        // Try to recognize the file system
        }
 
        // Try to recognize the file system
-       if (!FsRecognizeVolume(i386BootDrive, PartitionTableEntry.SectorCountBeforePartition, &VolumeType))
+       if (!FsRecognizeVolume(i386BootDrive, *StartSector, &VolumeType))
        {
                return FALSE;
        }
 
        *DriveNumber = i386BootDrive;
        {
                return FALSE;
        }
 
        *DriveNumber = i386BootDrive;
-       *StartSector = PartitionTableEntry.SectorCountBeforePartition;
-       *SectorCount = PartitionTableEntry.PartitionSectorCount;
 
 
-       //switch (PartitionTableEntry.SystemIndicator)
        switch (VolumeType)
        {
        case PARTITION_FAT_12:
        switch (VolumeType)
        {
        case PARTITION_FAT_12:
index b33a9da..1589cff 100644 (file)
@@ -63,12 +63,12 @@ BOOL DiskGetActivePartitionEntry(ULONG DriveNumber, PPARTITION_TABLE_ENTRY Parti
        // Make sure there was only one bootable partition
        if (BootablePartitionCount == 0)
        {
        // Make sure there was only one bootable partition
        if (BootablePartitionCount == 0)
        {
-               DiskError("No bootable (active) partitions found.", 0);
+               DbgPrint((DPRINT_DISK, "No bootable (active) partitions found.\n"));
                return FALSE;
        }
        else if (BootablePartitionCount != 1)
        {
                return FALSE;
        }
        else if (BootablePartitionCount != 1)
        {
-               DiskError("Too many bootable (active) partitions found.", 0);
+               DbgPrint((DPRINT_DISK, "Too many bootable (active) partitions found.\n"));
                return FALSE;
        }
 
                return FALSE;
        }