- Fix incorrect sector size detection which caused seeking to fail when booting from a floppy

- FreeLoader can load from a floppy disk now

svn path=/trunk/; revision=45602
This commit is contained in:
Cameron Gutman 2010-02-16 20:32:58 +00:00
parent 690fd6eb6d
commit 3874d4ff4e

View file

@ -433,11 +433,27 @@ static LONG DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId)
ULONGLONG SectorOffset = 0;
ULONGLONG SectorCount = 0;
PARTITION_TABLE_ENTRY PartitionTableEntry;
GEOMETRY Geometry;
EXTENDED_GEOMETRY ExtGeometry;
CHAR FileName[1];
if (!DissectArcPath(Path, FileName, &DriveNumber, &DrivePartition))
return EINVAL;
SectorSize = (DrivePartition == 0xff ? 2048 : 512);
ExtGeometry.Size = sizeof(EXTENDED_GEOMETRY);
if (DiskGetExtendedDriveParameters(DriveNumber, &ExtGeometry, ExtGeometry.Size))
{
SectorSize = ExtGeometry.BytesPerSector;
SectorCount = ExtGeometry.Sectors;
}
else if (MachDiskGetDriveGeometry(DriveNumber, &Geometry))
{
SectorSize = Geometry.BytesPerSector;
SectorCount = Geometry.Sectors;
}
else
return EINVAL;
if (DrivePartition != 0xff && DrivePartition != 0)
{
if (!DiskGetPartitionEntry(DriveNumber, DrivePartition, &PartitionTableEntry))
@ -445,10 +461,6 @@ static LONG DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId)
SectorOffset = PartitionTableEntry.SectorCountBeforePartition;
SectorCount = PartitionTableEntry.PartitionSectorCount;
}
else
{
SectorCount = 0; /* FIXME */
}
Context = MmHeapAlloc(sizeof(DISKCONTEXT));
if (!Context)