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, [email protected] 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 != '"')




_______________________________________________
Ros-dev mailing list
[email protected]
http://www.reactos.org/mailman/listinfo/ros-dev

Reply via email to