Great, that if/elseif was really lame and I wanted to fix that since the moment I added Windows boot support.
Regards, Aleksey Bragin
On 13.12.2012 4:46, hbelusca@svn.reactos.org wrote:
Author: hbelusca Date: Thu Dec 13 00:46:55 2012 New Revision: 57899
URL: http://svn.reactos.org/svn/reactos?rev=57899&view=rev Log: [FREELDR]
- Use a list of possible operating system method loading to load ReactOS / ROS-Setup / Windows / Linux or booting from a disk / partition ..., instead of using a (huge) if () else if () ... instruction.
- Modify the corresponding functions to take into account for this new functionality.
- Allow having a live + boot cd if needed, in a elegant way.
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/custom.c trunk/reactos/boot/freeldr/freeldr/arch/i386/miscboot.c trunk/reactos/boot/freeldr/freeldr/bootmgr.c trunk/reactos/boot/freeldr/freeldr/include/arch/i386/miscboot.h trunk/reactos/boot/freeldr/freeldr/include/linux.h trunk/reactos/boot/freeldr/freeldr/include/winldr.h trunk/reactos/boot/freeldr/freeldr/linuxboot.c trunk/reactos/boot/freeldr/freeldr/windows/setupldr.c trunk/reactos/boot/freeldr/freeldr/windows/winldr.c
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/custom.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/i386/custom.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/i386/custom.c [iso-8859-1] Thu Dec 13 00:46:55 2012 @@ -40,8 +40,8 @@ "ReactOS", "Linux" };
- ULONG CustomBootMenuCount = sizeof(CustomBootMenuList) / sizeof(CustomBootMenuList[0]);
- ULONG SelectedMenuItem;
ULONG CustomBootMenuCount = sizeof(CustomBootMenuList) / sizeof(CustomBootMenuList[0]);
ULONG SelectedMenuItem;
if (!UiDisplayMenu("Please choose a boot method:", CustomBootMenuList,
@@ -74,10 +74,11 @@
VOID OptionMenuCustomBootDisk(VOID) {
- CHAR SectionName[100];
- CHAR BootDriveString[20];
- ULONG SectionId;
ULONG_PTR SectionId;
CHAR SectionName[100];
CHAR BootDriveString[20]; TIMEINFO* TimeInfo;
OperatingSystemItem OperatingSystem;
RtlZeroMemory(SectionName, sizeof(SectionName)); RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
@@ -111,16 +112,21 @@
UiMessageBox(CustomBootPrompt);
- LoadAndBootDrive(SectionName);
OperatingSystem.SystemPartition = SectionName;
OperatingSystem.LoadIdentifier = NULL;
OperatingSystem.OsLoadOptions = NULL;
LoadAndBootDrive(&OperatingSystem, 0); }
VOID OptionMenuCustomBootPartition(VOID) {
- CHAR SectionName[100];
- CHAR BootDriveString[20];
- CHAR BootPartitionString[20];
- ULONG SectionId;
ULONG_PTR SectionId;
CHAR SectionName[100];
CHAR BootDriveString[20];
CHAR BootPartitionString[20]; TIMEINFO* TimeInfo;
OperatingSystemItem OperatingSystem;
RtlZeroMemory(SectionName, sizeof(SectionName)); RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
@@ -166,17 +172,22 @@
UiMessageBox(CustomBootPrompt);
- LoadAndBootPartition(SectionName);
OperatingSystem.SystemPartition = SectionName;
OperatingSystem.LoadIdentifier = NULL;
OperatingSystem.OsLoadOptions = NULL;
LoadAndBootPartition(&OperatingSystem, 0); }
VOID OptionMenuCustomBootBootSectorFile(VOID) {
- CHAR SectionName[100];
- CHAR BootDriveString[20];
- CHAR BootPartitionString[20];
- CHAR BootSectorFileString[200];
- ULONG SectionId;
ULONG_PTR SectionId;
CHAR SectionName[100];
CHAR BootDriveString[20];
CHAR BootPartitionString[20];
CHAR BootSectorFileString[200]; TIMEINFO* TimeInfo;
OperatingSystemItem OperatingSystem;
RtlZeroMemory(SectionName, sizeof(SectionName)); RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
@@ -234,19 +245,24 @@
UiMessageBox(CustomBootPrompt);
- LoadAndBootBootSector(SectionName);
OperatingSystem.SystemPartition = SectionName;
OperatingSystem.LoadIdentifier = NULL;
OperatingSystem.OsLoadOptions = NULL;
LoadAndBootBootSector(&OperatingSystem, 0); }
VOID OptionMenuCustomBootLinux(VOID) {
- CHAR SectionName[100];
- CHAR BootDriveString[20];
- CHAR BootPartitionString[20];
- CHAR LinuxKernelString[200];
- CHAR LinuxInitrdString[200];
- CHAR LinuxCommandLineString[200];
- ULONG SectionId;
ULONG_PTR SectionId;
CHAR SectionName[100];
CHAR BootDriveString[20];
CHAR BootPartitionString[20];
CHAR LinuxKernelString[200];
CHAR LinuxInitrdString[200];
CHAR LinuxCommandLineString[200]; TIMEINFO* TimeInfo;
OperatingSystemItem OperatingSystem;
RtlZeroMemory(SectionName, sizeof(SectionName)); RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
@@ -331,7 +347,11 @@
UiMessageBox(CustomBootPrompt);
- LoadAndBootLinux(SectionName, "Custom Linux Setup");
OperatingSystem.SystemPartition = SectionName;
OperatingSystem.LoadIdentifier = "Custom Linux Setup";
OperatingSystem.OsLoadOptions = NULL;
LoadAndBootLinux(&OperatingSystem, 0); }
VOID OptionMenuReboot(VOID)
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/miscboot.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/i386/miscboot.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/i386/miscboot.c [iso-8859-1] Thu Dec 13 00:46:55 2012 @@ -19,21 +19,24 @@
#include <freeldr.h>
-VOID LoadAndBootBootSector(PCSTR OperatingSystemName) +VOID +LoadAndBootBootSector(IN OperatingSystemItem* OperatingSystem,
{IN USHORT OperatingSystemVersion)- ULONG_PTR SectionId;
- PCSTR SectionName = OperatingSystem->SystemPartition;
- CHAR FileName[260]; PFILE FilePointer;
- ULONG BytesRead; CHAR SettingName[80];
ULONG SectionId;
CHAR FileName[260];
ULONG BytesRead;
// Find all the message box settings and run them
UiShowMessageBoxesInSection(OperatingSystemName);
UiShowMessageBoxesInSection(SectionName);
// Try to open the operating system section in the .ini file
- if (!IniOpenSection(OperatingSystemName, &SectionId))
- {
sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemName);
- if (!IniOpenSection(SectionName, &SectionId))
- {
UiMessageBox(SettingName); return; }sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", SectionName);@@ -79,22 +82,25 @@ ChainLoadBiosBootSectorCode(); }
-VOID LoadAndBootPartition(PCSTR OperatingSystemName) +VOID +LoadAndBootPartition(IN OperatingSystemItem* OperatingSystem,
{IN USHORT OperatingSystemVersion)- ULONG_PTR SectionId;
- PCSTR SectionName = OperatingSystem->SystemPartition; CHAR SettingName[80]; CHAR SettingValue[80];
ULONG SectionId; PARTITION_TABLE_ENTRY PartitionTableEntry; UCHAR DriveNumber; ULONG PartitionNumber;
// Find all the message box settings and run them
UiShowMessageBoxesInSection(OperatingSystemName);
UiShowMessageBoxesInSection(SectionName);
// Try to open the operating system section in the .ini file
- if (!IniOpenSection(OperatingSystemName, &SectionId))
- {
sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemName);
- if (!IniOpenSection(SectionName, &SectionId))
- {
UiMessageBox(SettingName); return; }sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", SectionName);@@ -151,20 +157,23 @@ ChainLoadBiosBootSectorCode(); }
-VOID LoadAndBootDrive(PCSTR OperatingSystemName) +VOID +LoadAndBootDrive(IN OperatingSystemItem* OperatingSystem,
{IN USHORT OperatingSystemVersion)- ULONG_PTR SectionId;
- PCSTR SectionName = OperatingSystem->SystemPartition; CHAR SettingName[80]; CHAR SettingValue[80];
ULONG SectionId; UCHAR DriveNumber;
// Find all the message box settings and run them
UiShowMessageBoxesInSection(OperatingSystemName);
UiShowMessageBoxesInSection(SectionName);
// Try to open the operating system section in the .ini file
- if (!IniOpenSection(OperatingSystemName, &SectionId))
- {
sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemName);
- if (!IniOpenSection(SectionName, &SectionId))
- {
UiMessageBox(SettingName); return; }sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", SectionName);Modified: trunk/reactos/boot/freeldr/freeldr/bootmgr.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/bootmg... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/bootmgr.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/bootmgr.c [iso-8859-1] Thu Dec 13 00:46:55 2012 @@ -24,7 +24,90 @@ CHAR reactos_arc_hardware_data[HW_MAX_ARC_HEAP_SIZE] = {0}; CHAR reactos_arc_strings[32][256];
-ULONG GetDefaultOperatingSystem(OperatingSystemItem* OperatingSystemList, ULONG OperatingSystemCount) +typedef +VOID +(*OS_LOADING_METHOD)(IN OperatingSystemItem* OperatingSystem,
IN USHORT OperatingSystemVersion);+struct +{
- CHAR BootType[80];
- USHORT OperatingSystemVersion;
- OS_LOADING_METHOD Load;
+} OSLoadingMethods[] = +{ +#ifdef FREELDR_REACTOS_SETUP
- {"ReactOSSetup", 0 , LoadReactOSSetup },
+#endif
+#ifdef _M_IX86
- {"BootSector" , 0 , LoadAndBootBootSector},
- {"Drive" , 0 , LoadAndBootDrive },
- {"Partition" , 0 , LoadAndBootPartition },
- {"Linux" , 0 , LoadAndBootLinux },
- {"Windows" , 0 , LoadAndBootWindows },
- {"WindowsNT40" , _WIN32_WINNT_NT4 , LoadAndBootWindows },
+#endif
- {"Windows2003" , _WIN32_WINNT_WS03, LoadAndBootWindows },
+// {"Not found" , 0 , NULL } +};
+VOID LoadOperatingSystem(IN OperatingSystemItem* OperatingSystem) +{
- ULONG_PTR SectionId;
- PCSTR SectionName = OperatingSystem->SystemPartition;
- CHAR BootType[80];
- ULONG i;
- // Try to open the operating system section in the .ini file
- if (IniOpenSection(SectionName, &SectionId))
- {
// Try to read the boot typeIniReadSettingByName(SectionId, "BootType", BootType, sizeof(BootType));- }
- else
- {
BootType[0] = ANSI_NULL;- }
- if (BootType[0] == ANSI_NULL && SectionName[0] != ANSI_NULL)
- {
// Try to infere the boot type value+#ifdef _M_IX86
ULONG FileId;if (ArcOpen((PSTR)SectionName, OpenReadOnly, &FileId) == ESUCCESS){ArcClose(FileId);strcpy(BootType, "BootSector");}else+#endif
{strcpy(BootType, "Windows");}- }
- // Install the drive mapper according to this section drive mappings
+#if defined(_M_IX86) && !defined(_MSC_VER)
- DriveMapMapDrivesInSection(SectionName);
+#endif
- // Loop through the OS loading method table and find a suitable OS to boot
- for (i = 0; i < sizeof(OSLoadingMethods) / sizeof(OSLoadingMethods[0]); ++i)
- {
if (_stricmp(BootType, OSLoadingMethods[i].BootType) == 0){OSLoadingMethods[i].Load(OperatingSystem,OSLoadingMethods[i].OperatingSystemVersion);return;}- }
+}
+ULONG GetDefaultOperatingSystem(OperatingSystemItem* OperatingSystemList, ULONG OperatingSystemCount) { CHAR DefaultOSText[80]; PCSTR DefaultOSName; @@ -105,17 +188,14 @@
VOID RunLoader(VOID) {
- CHAR SettingValue[80];
- CHAR BootType[80]; ULONG_PTR SectionId; ULONG OperatingSystemCount; OperatingSystemItem* OperatingSystemList;
- PCSTR *OperatingSystemDisplayNames;
- PCSTR SectionName;
- ULONG i;
PCSTR* OperatingSystemDisplayNames; ULONG DefaultOperatingSystem; LONG TimeOut; ULONG SelectedOperatingSystem;
ULONG i;
// FIXME: if possible, only detect and register ARC devices... if (!MachHwDetect())
@@ -206,78 +286,8 @@
TimeOut = -1;
// Try to open the operating system section in the .ini fileSettingValue[0] = ANSI_NULL;SectionName = OperatingSystemList[SelectedOperatingSystem].SystemPartition;if (IniOpenSection(SectionName, &SectionId)){// Try to read the boot typeIniReadSettingByName(SectionId, "BootType", BootType, sizeof(BootType));}elseBootType[0] = ANSI_NULL;if (BootType[0] == ANSI_NULL && SectionName[0] != ANSI_NULL){// Try to infere boot type value-#ifdef _M_IX86
ULONG FileId;if (ArcOpen((CHAR*)SectionName, OpenReadOnly, &FileId) == ESUCCESS){ArcClose(FileId);strcpy(BootType, "BootSector");}else-#endif
{strcpy(BootType, "Windows");}}// Get OS setting valueIniOpenSection("Operating Systems", &SectionId);IniReadSettingByName(SectionId, SectionName, SettingValue, sizeof(SettingValue));// Install the drive mapper according to this sections drive mappings-#if defined(_M_IX86) && !defined(_MSC_VER)
DriveMapMapDrivesInSection(SectionName);-#endif
-#ifdef FREELDR_REACTOS_SETUP
// WinLdr-style bootLoadReactOSSetup();-#elif defined(_M_IX86)
if (_stricmp(BootType, "Windows") == 0){LoadAndBootWindows(SectionName, SettingValue, 0);}else if (_stricmp(BootType, "WindowsNT40") == 0){LoadAndBootWindows(SectionName, SettingValue, _WIN32_WINNT_NT4);}else if (_stricmp(BootType, "Windows2003") == 0){LoadAndBootWindows(SectionName, SettingValue, _WIN32_WINNT_WS03);}else if (_stricmp(BootType, "Linux") == 0){LoadAndBootLinux(SectionName, OperatingSystemDisplayNames[SelectedOperatingSystem]);}else if (_stricmp(BootType, "BootSector") == 0){LoadAndBootBootSector(SectionName);}else if (_stricmp(BootType, "Partition") == 0){LoadAndBootPartition(SectionName);}else if (_stricmp(BootType, "Drive") == 0){LoadAndBootDrive(SectionName);}-#else
LoadAndBootWindows(SectionName, SettingValue, _WIN32_WINNT_WS03);-#endif
// Load the chosen operating systemLoadOperatingSystem(&OperatingSystemList[SelectedOperatingSystem]);}
reboot:
Modified: trunk/reactos/boot/freeldr/freeldr/include/arch/i386/miscboot.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/includ... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/include/arch/i386/miscboot.h [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/include/arch/i386/miscboot.h [iso-8859-1] Thu Dec 13 00:46:55 2012 @@ -19,6 +19,12 @@
#pragma once
-VOID LoadAndBootBootSector(PCSTR OperatingSystemName); -VOID LoadAndBootPartition(PCSTR OperatingSystemName); -VOID LoadAndBootDrive(PCSTR OperatingSystemName); +VOID +LoadAndBootBootSector(IN OperatingSystemItem* OperatingSystem,
IN USHORT OperatingSystemVersion);+VOID +LoadAndBootPartition(IN OperatingSystemItem* OperatingSystem,
IN USHORT OperatingSystemVersion);+VOID +LoadAndBootDrive(IN OperatingSystemItem* OperatingSystem,
IN USHORT OperatingSystemVersion);Modified: trunk/reactos/boot/freeldr/freeldr/include/linux.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/includ... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/include/linux.h [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/include/linux.h [iso-8859-1] Thu Dec 13 00:46:55 2012 @@ -18,6 +18,7 @@ */
#include <fs.h> +#include <oslist.h>
#ifndef __LINUX_H #define __LINUX_H @@ -129,7 +130,9 @@ VOID BootNewLinuxKernel(VOID); // Implemented in linux.S VOID BootOldLinuxKernel(ULONG KernelSize); // Implemented in linux.S
-VOID LoadAndBootLinux(PCSTR OperatingSystemName, PCSTR Description); +VOID +LoadAndBootLinux(IN OperatingSystemItem* OperatingSystem,
IN USHORT OperatingSystemVersion);BOOLEAN LinuxParseIniSection(PCSTR OperatingSystemName); BOOLEAN LinuxReadBootSector(PFILE LinuxKernelFile);
Modified: trunk/reactos/boot/freeldr/freeldr/include/winldr.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/includ... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/include/winldr.h [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/include/winldr.h [iso-8859-1] Thu Dec 13 00:46:55 2012 @@ -80,9 +80,8 @@ // ReactOS Loading Functions // /////////////////////////////////////////////////////////////////////////////////////// -VOID LoadAndBootWindows(PCSTR OperatingSystemName,
PSTR SettingsValue,USHORT OperatingSystemVersion);+VOID LoadAndBootWindows(IN OperatingSystemItem* OperatingSystem,
IN USHORT OperatingSystemVersion);// conversion.c PVOID VaToPa(PVOID Va);
@@ -179,7 +178,9 @@ LPCSTR BootPath, BOOLEAN Setup);
-VOID LoadReactOSSetup(VOID); +VOID +LoadReactOSSetup(IN OperatingSystemItem* OperatingSystem,
IN USHORT OperatingSystemVersion);VOID WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK LoaderBlock);
Modified: trunk/reactos/boot/freeldr/freeldr/linuxboot.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/linuxb... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/linuxboot.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/linuxboot.c [iso-8859-1] Thu Dec 13 00:46:55 2012 @@ -72,8 +72,12 @@ return TRUE; }
-VOID LoadAndBootLinux(PCSTR OperatingSystemName, PCSTR Description) -{ +VOID +LoadAndBootLinux(IN OperatingSystemItem* OperatingSystem,
IN USHORT OperatingSystemVersion)+{
- PCSTR SectionName = OperatingSystem->SystemPartition;
- PCSTR Description = OperatingSystem->LoadIdentifier; PFILE LinuxKernel = 0; PFILE LinuxInitrdFile = 0; CHAR TempString[260];
@@ -93,7 +97,7 @@ UiDrawProgressBarCenter(0, 100, LinuxBootDescription);
// Parse the .ini file section
- if (!LinuxParseIniSection(OperatingSystemName))
- if (!LinuxParseIniSection(SectionName)) { goto LinuxBootFailed; }
@@ -235,18 +239,18 @@ LinuxCommandLineSize = 0; }
-BOOLEAN LinuxParseIniSection(PCSTR OperatingSystemName) -{
- CHAR SettingName[260];
- ULONG SectionId;
+BOOLEAN LinuxParseIniSection(PCSTR SectionName) +{
ULONG_PTR SectionId;
CHAR SettingName[260];
// Find all the message box settings and run them
- UiShowMessageBoxesInSection(OperatingSystemName);
UiShowMessageBoxesInSection(SectionName);
// Try to open the operating system section in the .ini file
- if (!IniOpenSection(OperatingSystemName, &SectionId))
- {
sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemName);
- if (!IniOpenSection(SectionName, &SectionId))
- {
UiMessageBox(SettingName); return FALSE; }sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", SectionName);Modified: trunk/reactos/boot/freeldr/freeldr/windows/setupldr.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/window... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/windows/setupldr.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/windows/setupldr.c [iso-8859-1] Thu Dec 13 00:46:55 2012 @@ -133,7 +133,9 @@ } while (InfFindNextLine(&InfContext, &InfContext)); }
-VOID LoadReactOSSetup(VOID) +VOID +LoadReactOSSetup(IN OperatingSystemItem* OperatingSystem,
{ CHAR FileName[512]; CHAR BootPath[512];IN USHORT OperatingSystemVersion)Modified: trunk/reactos/boot/freeldr/freeldr/windows/winldr.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/window... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/windows/winldr.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/windows/winldr.c [iso-8859-1] Thu Dec 13 00:46:55 2012 @@ -456,22 +456,28 @@ }
VOID -LoadAndBootWindows(PCSTR OperatingSystemName,
PSTR SettingsValue,USHORT OperatingSystemVersion)-{ +LoadAndBootWindows(IN OperatingSystemItem* OperatingSystem,
IN USHORT OperatingSystemVersion)+{
- ULONG_PTR SectionId;
- PCSTR SectionName = OperatingSystem->SystemPartition;
- CHAR SettingsValue[80]; BOOLEAN HasSection;
- char BootPath[MAX_PATH];
- CHAR BootPath[MAX_PATH]; CHAR FileName[MAX_PATH]; CHAR BootOptions[256]; PCHAR File; BOOLEAN Status;
- ULONG_PTR SectionId; PLOADER_PARAMETER_BLOCK LoaderBlock;
// Get OS setting value
SettingsValue[0] = ANSI_NULL;
IniOpenSection("Operating Systems", &SectionId);
IniReadSettingByName(SectionId, SectionName, SettingsValue, sizeof(SettingsValue));
// Open the operating system section // specified in the .ini file
- HasSection = IniOpenSection(OperatingSystemName, &SectionId);
HasSection = IniOpenSection(SectionName, &SectionId);
UiDrawBackdrop(); UiDrawProgressBarCenter(1, 100, "Loading NT...");
@@ -480,7 +486,7 @@ if (!HasSection || !IniReadSettingByName(SectionId, "SystemPath", BootPath, sizeof(BootPath))) {
strcpy(BootPath, OperatingSystemName);
strcpy(BootPath, SectionName);}
/* Special case for LiveCD */
@@ -499,7 +505,7 @@ if (!HasSection || !IniReadSettingByName(SectionId, "Options", BootOptions, sizeof(BootOptions))) { /* Get options after the title */
const CHAR*p = SettingsValue;
while (*p == ' ' || *p == '"') p++; while (*p != '\0' && *p != '"')PCSTR p = SettingsValue;