[freeldr] It's easy to check if we booted from a floppy thanks to boot path. No need to maintain a machine callback for that

svn path=/trunk/; revision=43262
This commit is contained in:
Hervé Poussineau 2009-10-03 12:49:14 +00:00
parent 7f2d93fde9
commit d9b6d51218
10 changed files with 15 additions and 32 deletions

View file

@ -203,7 +203,6 @@ MachInit(IN PCCH CommandLine)
//
MachVtbl.DiskGetBootPath = DiskGetBootPath;
MachVtbl.DiskGetBootDevice = DiskGetBootDevice;
MachVtbl.DiskBootingFromFloppy = DiskBootingFromFloppy;
MachVtbl.DiskNormalizeSystemPath = DiskNormalizeSystemPath;
MachVtbl.DiskGetPartitionEntry = DiskGetPartitionEntry;

View file

@ -46,7 +46,6 @@ PcMachInit(const char *CmdLine)
MachVtbl.GetMemoryMap = PcMemGetMemoryMap;
MachVtbl.DiskGetBootPath = DiskGetBootPath;
MachVtbl.DiskGetBootDevice = DiskGetBootDevice;
MachVtbl.DiskBootingFromFloppy = DiskBootingFromFloppy;
MachVtbl.DiskNormalizeSystemPath = DiskNormalizeSystemPath;
MachVtbl.DiskReadLogicalSectors = PcDiskReadLogicalSectors;
MachVtbl.DiskGetPartitionEntry = DiskGetPartitionEntry;

View file

@ -49,7 +49,6 @@ XboxMachInit(const char *CmdLine)
MachVtbl.GetMemoryMap = XboxMemGetMemoryMap;
MachVtbl.DiskGetBootPath = DiskGetBootPath;
MachVtbl.DiskGetBootDevice = DiskGetBootDevice;
MachVtbl.DiskBootingFromFloppy = DiskBootingFromFloppy;
MachVtbl.DiskNormalizeSystemPath = DiskNormalizeSystemPath;
MachVtbl.DiskReadLogicalSectors = XboxDiskReadLogicalSectors;
MachVtbl.DiskGetPartitionEntry = XboxDiskGetPartitionEntry;

View file

@ -256,10 +256,6 @@ VOID PpcDiskGetBootDevice( PULONG BootDevice ) {
BootDevice[0] = BootDevice[1] = 0;
}
BOOLEAN PpcDiskBootingFromFloppy(VOID) {
return FALSE;
}
BOOLEAN PpcDiskReadLogicalSectors( ULONG DriveNumber, ULONGLONG SectorNumber,
ULONG SectorCount, PVOID Buffer ) {
int rlen = 0;
@ -495,7 +491,6 @@ void PpcDefaultMachVtbl()
MachVtbl.DiskNormalizeSystemPath = PpcDiskNormalizeSystemPath;
MachVtbl.DiskGetBootPath = PpcDiskGetBootPath;
MachVtbl.DiskGetBootDevice = PpcDiskGetBootDevice;
MachVtbl.DiskBootingFromFloppy = PpcDiskBootingFromFloppy;
MachVtbl.DiskReadLogicalSectors = PpcDiskReadLogicalSectors;
MachVtbl.DiskGetPartitionEntry = PpcDiskGetPartitionEntry;
MachVtbl.DiskGetDriveGeometry = PpcDiskGetDriveGeometry;

View file

@ -219,12 +219,6 @@ DiskGetBootDevice(PULONG BootDevice)
((char *)BootDevice)[1] = (char)BootPartition;
}
BOOLEAN
DiskBootingFromFloppy(VOID)
{
return BootDrive < 0x80;
}
#define IsRecognizedPartition(P) \
((P) == PARTITION_FAT_12 || \
(P) == PARTITION_FAT_16 || \
@ -344,7 +338,7 @@ DiskGetBootPath(char *BootPath, unsigned Size)
return FALSE;
}
strcpy(BootPath, Path);
strcat(BootPath, MachDiskBootingFromFloppy() ? "fdisk" : "cdrom");
strcat(BootPath, BootDrive < 0x80 ? "fdisk" : "cdrom");
strcat(strcat(strcat(BootPath, "("), Device), ")");
if (strcmp(BootPath, "multi(0)disk(0)cdrom(128)") == 0)

View file

@ -133,7 +133,6 @@ BOOLEAN DiskGetSystemVolume(char *SystemPath, char *RemainingPath,
PULONG Device);
BOOLEAN DiskGetBootPath(char *BootPath, unsigned Size);
VOID DiskGetBootDevice(PULONG BootDevice);
BOOLEAN DiskBootingFromFloppy(VOID);
BOOLEAN DiskNormalizeSystemPath(char *SystemPath, unsigned Size);

View file

@ -64,7 +64,6 @@ typedef struct tagMACHVTBL
BOOLEAN (*DiskGetBootPath)(char *BootPath, unsigned Size);
VOID (*DiskGetBootDevice)(PULONG BootDevice);
BOOLEAN (*DiskBootingFromFloppy)(VOID);
BOOLEAN (*DiskNormalizeSystemPath)(char *SystemPath, unsigned Size);
BOOLEAN (*DiskReadLogicalSectors)(ULONG DriveNumber, ULONGLONG SectorNumber, ULONG SectorCount, PVOID Buffer);
BOOLEAN (*DiskGetPartitionEntry)(ULONG DriveNumber, ULONG PartitionNumber, PPARTITION_TABLE_ENTRY PartitionTableEntry);
@ -100,7 +99,6 @@ VOID MachBeep(VOID);
MEMORY_DESCRIPTOR* ArcGetMemoryDescriptor(MEMORY_DESCRIPTOR* Current);
BOOLEAN MachDiskGetBootPath(char *BootPath, unsigned Size);
VOID MachDiskGetBootDevice(PULONG BootDevice);
BOOLEAN MachDiskBootingFromFloppy();
BOOLEAN MachDiskNormalizeSystemPath(char *SystemPath, unsigned Size);
BOOLEAN MachDiskReadLogicalSectors(ULONG DriveNumber, ULONGLONG SectorNumber, ULONG SectorCount, PVOID Buffer);
BOOLEAN MachDiskGetPartitionEntry(ULONG DriveNumber, ULONG PartitionNumber, PPARTITION_TABLE_ENTRY PartitionTableEntry);
@ -130,7 +128,6 @@ VOID MachPrepareForReactOS(IN BOOLEAN Setup);
#define MachPrepareForReactOS(a) MachVtbl.PrepareForReactOS(a)
#define MachDiskGetBootPath(Path, Size) MachVtbl.DiskGetBootPath((Path), (Size))
#define MachDiskGetBootDevice(BootDevice) MachVtbl.DiskGetBootDevice(BootDevice)
#define MachDiskBootingFromFloppy() MachVtbl.DiskBootingFromFloppy()
#define MachDiskNormalizeSystemPath(Path, Size) MachVtbl.DiskNormalizeSystemPath((Path), (Size))
#define MachDiskReadLogicalSectors(Drive, Start, Count, Buf) MachVtbl.DiskReadLogicalSectors((Drive), (Start), (Count), (Buf))
#define MachDiskGetPartitionEntry(Drive, Part, Entry) MachVtbl.DiskGetPartitionEntry((Drive), (Part), (Entry))

View file

@ -38,7 +38,6 @@
#undef MachPrepareForReactOS
#undef MachDiskGetBootPath
#undef MachDiskGetBootDevice
#undef MachDiskBootingFromFloppy
#undef MachDiskNormalizeSystemPath
#undef MachDiskReadLogicalSectors
#undef MachDiskGetPartitionEntry
@ -334,12 +333,6 @@ MachDiskGetBootDevice(PULONG BootDevice)
MachVtbl.DiskGetBootDevice(BootDevice);
}
BOOLEAN
MachDiskBootingFromFloppy()
{
return MachVtbl.DiskBootingFromFloppy();
}
BOOLEAN
MachDiskNormalizeSystemPath(char *SystemPath, unsigned Size)
{

View file

@ -47,6 +47,7 @@ VOID LoadReactOSSetup(VOID)
ULONG i;
LPCSTR SourcePath;
LPCSTR LoadOptions, DbgLoadOptions = "";
BOOLEAN BootFromFloppy;
LPCSTR sourcePaths[] = {
"", /* Only for floppy boot */
#if defined(_M_IX86)
@ -116,12 +117,13 @@ VOID LoadReactOSSetup(VOID)
LoaderBlock.ArchExtra = (ULONG_PTR)MachHwDetect();
UiDrawStatusText("");
/* set boot device */
MachDiskGetBootDevice(&LoaderBlock.BootDevice);
/* Check if we booted from floppy */
MachDiskGetBootPath(reactos_kernel_cmdline, sizeof(reactos_kernel_cmdline));
BootFromFloppy = strstr(reactos_kernel_cmdline, "fdisk");
UiDrawStatusText("Loading txtsetup.sif...");
/* Open 'txtsetup.sif' */
for (i = MachDiskBootingFromFloppy() ? 0 : 1; ; i++)
for (i = BootFromFloppy ? 0 : 1; ; i++)
{
SourcePath = sourcePaths[i];
if (!SourcePath)
@ -191,7 +193,7 @@ VOID LoadReactOSSetup(VOID)
LoaderBlock.KernelBase = KernelBase;
/* Insert boot disk 2 */
if (MachDiskBootingFromFloppy())
if (BootFromFloppy)
{
UiMessageBox("Please insert \"ReactOS Boot Disk 2\" and press ENTER");

View file

@ -158,6 +158,7 @@ VOID LoadReactOSSetup2(VOID)
CHAR FileName[512];
CHAR BootPath[512];
LPCSTR LoadOptions, BootOptions;
BOOLEAN BootFromFloppy;
#if DBG
LPCSTR DbgOptions;
#endif
@ -189,9 +190,14 @@ VOID LoadReactOSSetup2(VOID)
NULL
};
/* Open 'txtsetup.sif' from any of source paths */
/* Get boot path */
MachDiskGetBootPath(SystemPath, sizeof(SystemPath));
for (i = MachDiskBootingFromFloppy() ? 0 : 1; ; i++)
/* And check if we booted from floppy */
BootFromFloppy = strstr(SystemPath, "fdisk");
/* Open 'txtsetup.sif' from any of source paths */
for (i = BootFromFloppy ? 0 : 1; ; i++)
{
SourcePath = SourcePaths[i];
if (!SourcePath)