From d2cbec0b5f7e6fcfbbefb627b0015a854eea2ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 13 Mar 2026 22:21:37 +0100 Subject: [PATCH] [FREELDR:ARCH] Fix minor bugs; condense XboxDiskInit() a bit (#8732) - `AtaInit()` returns the number of detected ATA devices. Therefore, when iterating over them, go from index 0 to the count _minus_ 1, in `Pc98InitializeBootDevices()` and in `XboxDiskInit()`. - Initialize `DiskDrive->Type` to `DRIVE_TYPE_HDD` for detected SCSI hard-disk drives in `pc98disk.c!InitScsiDrive()`. - Rearrange `XboxDiskInit()` and reduce its indentation level. --- .../freeldr/freeldr/arch/i386/pc98/pc98disk.c | 3 +- .../freeldr/freeldr/arch/i386/xbox/xboxdisk.c | 31 +++++++++---------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/boot/freeldr/freeldr/arch/i386/pc98/pc98disk.c b/boot/freeldr/freeldr/arch/i386/pc98/pc98disk.c index 7d032fffba1..34173bbf124 100644 --- a/boot/freeldr/freeldr/arch/i386/pc98/pc98disk.c +++ b/boot/freeldr/freeldr/arch/i386/pc98/pc98disk.c @@ -397,6 +397,7 @@ InitScsiDrive( DiskDrive->Geometry.Heads = RegsOut.b.dh; DiskDrive->Geometry.SectorsPerTrack = RegsOut.b.dl; DiskDrive->Geometry.BytesPerSector = RegsOut.w.bx; + DiskDrive->Type = DRIVE_TYPE_HDD; } /* Other devices */ else if (ScsiParameters != 0) @@ -675,7 +676,7 @@ Pc98InitializeBootDevices(VOID) * that cannot boot from a CD-ROM and has LBA limitations. */ AtaInit(&IdeDetectedCount); - for (i = 0; i <= IdeDetectedCount; i++) + for (i = 0; i < IdeDetectedCount; i++) { DiskDrive = &Pc98DiskDrive[BiosHardDriveDriveNumber]; if (InitIdeDrive(DiskDrive, i)) diff --git a/boot/freeldr/freeldr/arch/i386/xbox/xboxdisk.c b/boot/freeldr/freeldr/arch/i386/xbox/xboxdisk.c index 8a71058545a..593a52fc56d 100644 --- a/boot/freeldr/freeldr/arch/i386/xbox/xboxdisk.c +++ b/boot/freeldr/freeldr/arch/i386/xbox/xboxdisk.c @@ -42,31 +42,28 @@ static VOID XboxDiskInit(VOID) { - UCHAR DetectedCount; - UCHAR UnitNumber; - PDEVICE_UNIT DeviceUnit = NULL; + UCHAR DetectedCount, UnitNumber; ASSERT(!AtaInitialized); - AtaInitialized = TRUE; /* Find first HDD and CD */ AtaInit(&DetectedCount); - for (UnitNumber = 0; UnitNumber <= DetectedCount; UnitNumber++) + for (UnitNumber = 0; UnitNumber < DetectedCount; UnitNumber++) { - DeviceUnit = AtaGetDevice(UnitNumber); - if (DeviceUnit) + PDEVICE_UNIT DeviceUnit = AtaGetDevice(UnitNumber); + if (!DeviceUnit) + continue; + + if (DeviceUnit->Flags & ATA_DEVICE_ATAPI) { - if (DeviceUnit->Flags & ATA_DEVICE_ATAPI) - { - if (!CdDrive) - CdDrive = DeviceUnit; - } - else - { - if (!HardDrive) - HardDrive = DeviceUnit; - } + if (!CdDrive) + CdDrive = DeviceUnit; + } + else + { + if (!HardDrive) + HardDrive = DeviceUnit; } } }