[ros-dev] [ros-diffs] [hbelusca] 57899: [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) ...
Aleksey Bragin
aleksey at reactos.org
Fri Dec 14 09:40:16 UTC 2012
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 at 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/i386/custom.c?rev=57899&r1=57898&r2=57899&view=diff
> ==============================================================================
> --- 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/i386/miscboot.c?rev=57899&r1=57898&r2=57899&view=diff
> ==============================================================================
> --- 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))
> + {
> + sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", SectionName);
> UiMessageBox(SettingName);
> return;
> }
> @@ -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))
> + {
> + sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", SectionName);
> UiMessageBox(SettingName);
> return;
> }
> @@ -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))
> + {
> + sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", SectionName);
> UiMessageBox(SettingName);
> return;
> }
>
> Modified: trunk/reactos/boot/freeldr/freeldr/bootmgr.c
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/bootmgr.c?rev=57899&r1=57898&r2=57899&view=diff
> ==============================================================================
> --- 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 type
> + IniReadSettingByName(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 file
> - SettingValue[0] = ANSI_NULL;
> - SectionName = OperatingSystemList[SelectedOperatingSystem].SystemPartition;
> - if (IniOpenSection(SectionName, &SectionId))
> - {
> - // Try to read the boot type
> - IniReadSettingByName(SectionId, "BootType", BootType, sizeof(BootType));
> - }
> - else
> - BootType[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 value
> - IniOpenSection("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 boot
> - LoadReactOSSetup();
> -#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 system
> + LoadOperatingSystem(&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/include/arch/i386/miscboot.h?rev=57899&r1=57898&r2=57899&view=diff
> ==============================================================================
> --- 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/include/linux.h?rev=57899&r1=57898&r2=57899&view=diff
> ==============================================================================
> --- 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/include/winldr.h?rev=57899&r1=57898&r2=57899&view=diff
> ==============================================================================
> --- 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/linuxboot.c?rev=57899&r1=57898&r2=57899&view=diff
> ==============================================================================
> --- 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))
> + {
> + sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", SectionName);
> UiMessageBox(SettingName);
> return FALSE;
> }
>
> Modified: trunk/reactos/boot/freeldr/freeldr/windows/setupldr.c
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/windows/setupldr.c?rev=57899&r1=57898&r2=57899&view=diff
> ==============================================================================
> --- 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,
> + IN USHORT OperatingSystemVersion)
> {
> CHAR FileName[512];
> CHAR BootPath[512];
>
> Modified: trunk/reactos/boot/freeldr/freeldr/windows/winldr.c
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/windows/winldr.c?rev=57899&r1=57898&r2=57899&view=diff
> ==============================================================================
> --- 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;
> + PCSTR p = SettingsValue;
> while (*p == ' ' || *p == '"')
> p++;
> while (*p != '\0' && *p != '"')
>
>
More information about the Ros-dev
mailing list