Author: cgutman Date: Wed Apr 28 00:12:11 2010 New Revision: 47051
URL: http://svn.reactos.org/svn/reactos?rev=47051&view=rev Log: [FREELDR] - Set the partition count to 0 for a floppy drive so it can be told apart from a cd-rom drive - Add a last-chance sector size detection algorithm based on the partition number - Add the same detection code to the xbox code too (it is essentially the same as what was already there just with more comments) - Change DiskNormalizeSystemPath so it doesn't try to "normalize" a floppy boot path - Fixes bug #5233
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c trunk/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c trunk/reactos/boot/freeldr/freeldr/disk/disk.c trunk/reactos/boot/freeldr/freeldr/reactos/arcname.c
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c [iso-8859-1] Wed Apr 28 00:12:11 2010 @@ -452,7 +452,23 @@ SectorCount = Geometry.Sectors; } else - return EINVAL; + { + DPRINTM(DPRINT_HWDETECT, "Using legacy sector size detection\n"); + + /* Fall back to legacy detection */ + if (DrivePartition == 0xff) + { + /* This is a CD-ROM device */ + SectorSize = 2048; + } + else + { + /* This is either a floppy disk device (DrivePartition == 0) or + * a hard disk device (DrivePartition != 0 && DrivePartition != 0xFF) but + * it doesn't matter which one because they both have 512 bytes per sector */ + SectorSize = 512; + } + }
if (DrivePartition != 0xff && DrivePartition != 0) {
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c [iso-8859-1] Wed Apr 28 00:12:11 2010 @@ -138,7 +138,20 @@
if (!DissectArcPath(Path, FileName, &DriveNumber, &DrivePartition)) return EINVAL; - SectorSize = (DrivePartition == 0xff ? 2048 : 512); + + if (DrivePartition == 0xff) + { + /* This is a CD-ROM device */ + SectorSize = 2048; + } + else + { + /* This is either a floppy disk device (DrivePartition == 0) or + * a hard disk device (DrivePartition != 0 && DrivePartition != 0xFF) but + * it doesn't matter which one because they both have 512 bytes per sector */ + SectorSize = 512; + } + if (DrivePartition != 0xff && DrivePartition != 0) { if (!XboxDiskGetPartitionEntry(DriveNumber, DrivePartition, &PartitionTableEntry))
Modified: trunk/reactos/boot/freeldr/freeldr/disk/disk.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/disk/d... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/disk/disk.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/disk/disk.c [iso-8859-1] Wed Apr 28 00:12:11 2010 @@ -136,7 +136,7 @@ return FALSE; }
- if (0 != PartitionNumber) + if (0 != PartitionNumber || DriveNumber < 0x80) { return TRUE; }
Modified: trunk/reactos/boot/freeldr/freeldr/reactos/arcname.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/reacto... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/reactos/arcname.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/reactos/arcname.c [iso-8859-1] Wed Apr 28 00:12:11 2010 @@ -60,7 +60,7 @@ if (p == NULL) return FALSE; p++; - *BootPartition = 0xff; + *BootPartition = 0; } else if (_strnicmp(p, "cdrom(", 6) == 0) {