Author: hbelusca Date: Fri Feb 6 01:21:45 2015 New Revision: 66179
URL: http://svn.reactos.org/svn/reactos?rev=66179&view=rev Log: [FREELDR] - For now, only activate custom ReactOS boot on non-x86 builds. - Fix INI section item list initialization before using it! Fixes custom ReactOS boots (ie. remove an invalid heap free). Now custom ReactOS boots work!
Modified: trunk/reactos/boot/freeldr/freeldr/custom.c trunk/reactos/boot/freeldr/freeldr/lib/inifile/inifile.c
Modified: trunk/reactos/boot/freeldr/freeldr/custom.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/custom... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/custom.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/custom.c [iso-8859-1] Fri Feb 6 01:21:45 2015 @@ -17,13 +17,13 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
+/* INCLUDES *******************************************************************/ + +#include <freeldr.h> + +/* GLOBALS ********************************************************************/ + #ifdef _M_IX86 - -/* INCLUDES *******************************************************************/ - -#include <freeldr.h> - -/* GLOBALS ********************************************************************/
const CHAR BootDrivePrompt[] = "Enter the boot drive.\n\nExamples:\nfd0 - first floppy drive\nhd0 - first hard drive\nhd1 - second hard drive\ncd0 - first CD-ROM drive.\n\nBIOS drive numbers may also be used:\n0 - first floppy drive\n0x80 - first hard drive\n0x81 - second hard drive"; const CHAR BootPartitionPrompt[] = "Enter the boot partition.\n\nEnter 0 for the active (bootable) partition."; @@ -31,6 +31,9 @@ const CHAR LinuxKernelPrompt[] = "Enter the Linux kernel image path.\n\nExamples:\n/vmlinuz\n/boot/vmlinuz-2.4.18"; const CHAR LinuxInitrdPrompt[] = "Enter the initrd image path.\n\nExamples:\n/initrd.gz\n/boot/root.img.gz\n\nLeave blank for no initial ram disk."; const CHAR LinuxCommandLinePrompt[] = "Enter the Linux kernel command line.\n\nExamples:\nroot=/dev/hda1\nroot=/dev/fd0 read-only\nroot=/dev/sdb1 init=/sbin/init"; + +#endif // _M_IX86 + const CHAR ReactOSSystemPathPrompt[] = "Enter the path to your ReactOS system directory.\n\nExamples:\n\REACTOS\n\ROS"; const CHAR ReactOSOptionsPrompt[] = "Enter the options you want passed to the kernel.\n\nExamples:\n/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200\n/FASTDETECT /SOS /NOGUIBOOT\n/BASEVIDEO /MAXMEM=64\n/KERNEL=NTKRNLMP.EXE /HAL=HALMPS.DLL"; const CHAR CustomBootPrompt[] = "Press ENTER to boot your custom boot setup."; @@ -40,11 +43,13 @@ VOID OptionMenuCustomBoot(VOID) { PCSTR CustomBootMenuList[] = { +#ifdef _M_IX86 "Disk", "Partition", "Boot Sector File", - "ReactOS", - "Linux" + "Linux", +#endif + "ReactOS" }; ULONG CustomBootMenuCount = sizeof(CustomBootMenuList) / sizeof(CustomBootMenuList[0]); ULONG SelectedMenuItem; @@ -64,6 +69,7 @@
switch (SelectedMenuItem) { +#ifdef _M_IX86 case 0: // Disk OptionMenuCustomBootDisk(); break; @@ -73,14 +79,19 @@ case 2: // Boot Sector File OptionMenuCustomBootBootSectorFile(); break; - case 3: // ReactOS + case 3: // Linux + OptionMenuCustomBootLinux(); + break; + case 4: // ReactOS +#else + case 0: +#endif OptionMenuCustomBootReactOS(); break; - case 4: // Linux - OptionMenuCustomBootLinux(); - break; } } + +#ifdef _M_IX86
VOID OptionMenuCustomBootDisk(VOID) { @@ -226,69 +237,6 @@ OperatingSystem.OsLoadOptions = NULL;
// LoadAndBootBootSector(&OperatingSystem, 0); - LoadOperatingSystem(&OperatingSystem); -} - -VOID OptionMenuCustomBootReactOS(VOID) -{ - ULONG_PTR SectionId; - CHAR SectionName[100]; - CHAR BootDriveString[20]; - CHAR BootPartitionString[20]; - CHAR ReactOSSystemPath[200]; - CHAR ReactOSARCPath[200]; - CHAR ReactOSOptions[200]; - TIMEINFO* TimeInfo; - OperatingSystemItem OperatingSystem; - - RtlZeroMemory(SectionName, sizeof(SectionName)); - RtlZeroMemory(BootDriveString, sizeof(BootDriveString)); - RtlZeroMemory(BootPartitionString, sizeof(BootPartitionString)); - RtlZeroMemory(ReactOSSystemPath, sizeof(ReactOSSystemPath)); - RtlZeroMemory(ReactOSOptions, sizeof(ReactOSOptions)); - - if (!UiEditBox(BootDrivePrompt, BootDriveString, 20)) - return; - - if (!UiEditBox(BootPartitionPrompt, BootPartitionString, 20)) - return; - - if (!UiEditBox(ReactOSSystemPathPrompt, ReactOSSystemPath, 200)) - return; - - if (!UiEditBox(ReactOSOptionsPrompt, ReactOSOptions, 200)) - return; - - /* Generate a unique section name */ - TimeInfo = ArcGetTime(); - sprintf(SectionName, "CustomReactOS%u%u%u%u%u%u", TimeInfo->Year, TimeInfo->Day, TimeInfo->Month, TimeInfo->Hour, TimeInfo->Minute, TimeInfo->Second); - - /* Add the section */ - if (!IniAddSection(SectionName, &SectionId)) - return; - - /* Add the BootType */ - if (!IniAddSettingValueToSection(SectionId, "BootType", "Windows2003")) - return; - - /* Construct the ReactOS ARC system path */ - ConstructArcPath(ReactOSARCPath, ReactOSSystemPath, DriveMapGetBiosDriveNumber(BootDriveString), atoi(BootPartitionString)); - - /* Add the system path */ - if (!IniAddSettingValueToSection(SectionId, "SystemPath", ReactOSARCPath)) - return; - - /* Add the CommandLine */ - if (!IniAddSettingValueToSection(SectionId, "Options", ReactOSOptions)) - return; - - UiMessageBox(CustomBootPrompt); - - OperatingSystem.SystemPartition = SectionName; - OperatingSystem.LoadIdentifier = NULL; - OperatingSystem.OsLoadOptions = NULL; // ReactOSOptions - - // LoadAndBootWindows(&OperatingSystem, _WIN32_WINNT_WS03); LoadOperatingSystem(&OperatingSystem); }
@@ -371,6 +319,71 @@ LoadOperatingSystem(&OperatingSystem); }
+#endif // _M_IX86 + +VOID OptionMenuCustomBootReactOS(VOID) +{ + ULONG_PTR SectionId; + CHAR SectionName[100]; + CHAR BootDriveString[20]; + CHAR BootPartitionString[20]; + CHAR ReactOSSystemPath[200]; + CHAR ReactOSARCPath[200]; + CHAR ReactOSOptions[200]; + TIMEINFO* TimeInfo; + OperatingSystemItem OperatingSystem; + + RtlZeroMemory(SectionName, sizeof(SectionName)); + RtlZeroMemory(BootDriveString, sizeof(BootDriveString)); + RtlZeroMemory(BootPartitionString, sizeof(BootPartitionString)); + RtlZeroMemory(ReactOSSystemPath, sizeof(ReactOSSystemPath)); + RtlZeroMemory(ReactOSOptions, sizeof(ReactOSOptions)); + + if (!UiEditBox(BootDrivePrompt, BootDriveString, 20)) + return; + + if (!UiEditBox(BootPartitionPrompt, BootPartitionString, 20)) + return; + + if (!UiEditBox(ReactOSSystemPathPrompt, ReactOSSystemPath, 200)) + return; + + if (!UiEditBox(ReactOSOptionsPrompt, ReactOSOptions, 200)) + return; + + /* Generate a unique section name */ + TimeInfo = ArcGetTime(); + sprintf(SectionName, "CustomReactOS%u%u%u%u%u%u", TimeInfo->Year, TimeInfo->Day, TimeInfo->Month, TimeInfo->Hour, TimeInfo->Minute, TimeInfo->Second); + + /* Add the section */ + if (!IniAddSection(SectionName, &SectionId)) + return; + + /* Add the BootType */ + if (!IniAddSettingValueToSection(SectionId, "BootType", "Windows2003")) + return; + + /* Construct the ReactOS ARC system path */ + ConstructArcPath(ReactOSARCPath, ReactOSSystemPath, DriveMapGetBiosDriveNumber(BootDriveString), atoi(BootPartitionString)); + + /* Add the system path */ + if (!IniAddSettingValueToSection(SectionId, "SystemPath", ReactOSARCPath)) + return; + + /* Add the CommandLine */ + if (!IniAddSettingValueToSection(SectionId, "Options", ReactOSOptions)) + return; + + UiMessageBox(CustomBootPrompt); + + OperatingSystem.SystemPartition = SectionName; + OperatingSystem.LoadIdentifier = NULL; + OperatingSystem.OsLoadOptions = NULL; // ReactOSOptions + + // LoadAndBootWindows(&OperatingSystem, _WIN32_WINNT_WS03); + LoadOperatingSystem(&OperatingSystem); +} + VOID OptionMenuReboot(VOID) { UiMessageBox("The system will now reboot."); @@ -378,5 +391,3 @@ DiskStopFloppyMotor(); Reboot(); } - -#endif // _M_IX86
Modified: trunk/reactos/boot/freeldr/freeldr/lib/inifile/inifile.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/lib/in... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/lib/inifile/inifile.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/lib/inifile/inifile.c [iso-8859-1] Fri Feb 6 01:21:45 2015 @@ -199,6 +199,7 @@
// Get the section name strcpy(Section->SectionName, SectionName); + InitializeListHead(&Section->SectionItemList);
// Add it to the section list head IniFileSectionCount++;