https://git.reactos.org/?p=reactos.git;a=commitdiff;h=34e76ade03659b419b360…
commit 34e76ade03659b419b36058c402c12128e9daac1
Author: Daniel Victor <ilauncherdeveloper(a)gmail.com>
AuthorDate: Fri Nov 22 11:16:17 2024 -0300
Commit: Timo Kreuzer <timo.kreuzer(a)reactos.org>
CommitDate: Wed Dec 11 07:18:34 2024 +0200
[FREELDR] Make it more compatible with w2k3 ini file
---
boot/freeldr/freeldr/lib/inifile/ini_init.c | 11 ++++++++--
boot/freeldr/freeldr/settings.c | 33 ++++++++++++++++++++++++-----
2 files changed, 37 insertions(+), 7 deletions(-)
diff --git a/boot/freeldr/freeldr/lib/inifile/ini_init.c
b/boot/freeldr/freeldr/lib/inifile/ini_init.c
index 9992b0b7151..4596eac759f 100644
--- a/boot/freeldr/freeldr/lib/inifile/ini_init.c
+++ b/boot/freeldr/freeldr/lib/inifile/ini_init.c
@@ -38,8 +38,15 @@ BOOLEAN IniFileInitialize(VOID)
if (Status != ESUCCESS)
{
ERR("Error while opening freeldr.ini, Status: %d\n", Status);
- UiMessageBoxCritical("Error opening freeldr.ini or file not found.\nYou need
to re-install FreeLoader.");
- return FALSE;
+
+ /* Try to open boot.ini */
+ Status = FsOpenFile("boot.ini", FrLdrBootPath, OpenReadOnly,
&FileId);
+ if (Status != ESUCCESS)
+ {
+ ERR("Error while opening boot.ini, Status: %d\n", Status);
+ UiMessageBoxCritical("Error opening freeldr.ini/boot.ini or file not
found.\nYou need to re-install FreeLoader.");
+ return FALSE;
+ }
}
/* Get the file size */
diff --git a/boot/freeldr/freeldr/settings.c b/boot/freeldr/freeldr/settings.c
index 7f1e44e51af..fdf284c460c 100644
--- a/boot/freeldr/freeldr/settings.c
+++ b/boot/freeldr/freeldr/settings.c
@@ -126,12 +126,35 @@ LoadSettings(
return;
}
- /* Open the [FreeLoader] section and load the settings */
- if ((BootMgrInfo.FrLdrSection == 0) &&
- !IniOpenSection("FreeLoader", &BootMgrInfo.FrLdrSection))
+ BOOLEAN FoundLoaderSection = FALSE;
+ PCSTR LoaderSections[] = {
+ "FreeLoader",
+ "Boot Loader",
+ "FlexBoot",
+ "MultiBoot",
+ };
+
+ /* Search for the first section in LoaderSections and load the settings,
+ * prioritizing the order in the file.
+ * If a section is already loaded, skip further checks. */
+ if (!BootMgrInfo.FrLdrSection)
{
- UiMessageBoxCritical("Section [FreeLoader] not found in freeldr.ini");
- return;
+ for (ULONG i = 0; i < sizeof(LoaderSections) / sizeof(LoaderSections[0]);
i++)
+ {
+ PCSTR Section = LoaderSections[i];
+
+ if (IniOpenSection(Section, &BootMgrInfo.FrLdrSection))
+ {
+ FoundLoaderSection = TRUE;
+ break;
+ }
+ }
+
+ if (!FoundLoaderSection)
+ {
+ UiMessageBoxCritical("Bootloader Section not found in
freeldr.ini");
+ return;
+ }
}
/* Get the debug string. Always override it with the one from freeldr.ini */