// constants
-#define CONFIG_FILE_NAME L"refind.conf"
#define LINUX_OPTIONS_FILENAMES L"refind_linux.conf,refind-linux.conf"
#define MAXCONFIGFILESIZE (128*1024)
} // static VOID HandleStrings()
// read config file
-VOID ReadConfig(VOID)
+VOID ReadConfig(CHAR16 *FileName)
{
EFI_STATUS Status;
REFIT_FILE File;
CHAR16 *FlagName;
UINTN TokenCount, i;
- if (!FileExists(SelfDir, CONFIG_FILE_NAME)) {
- Print(L"Configuration file missing!\n");
+ // Set a few defaults only if we're loading the default file.
+ if (StriCmp(FileName, CONFIG_FILE_NAME) == 0) {
+ MyFreePool(GlobalConfig.DontScanDirs);
+ GlobalConfig.DontScanDirs = StrDuplicate(SelfDirPath);
+ MyFreePool(GlobalConfig.DontScanFiles);
+ GlobalConfig.DontScanFiles = StrDuplicate(DONT_SCAN_FILES);
+ }
+
+ if (!FileExists(SelfDir, FileName)) {
+ Print(L"Configuration file '%s' missing!\n", FileName);
return;
}
- Status = ReadFile(SelfDir, CONFIG_FILE_NAME, &File, &i);
+ Status = ReadFile(SelfDir, FileName, &File, &i);
if (EFI_ERROR(Status))
return;
- MyFreePool(GlobalConfig.DontScanDirs);
- GlobalConfig.DontScanDirs = StrDuplicate(SelfDirPath);
- MyFreePool(GlobalConfig.DontScanFiles);
- GlobalConfig.DontScanFiles = StrDuplicate(DONT_SCAN_FILES);
-
for (;;) {
TokenCount = ReadTokenLine(&File, &TokenList);
if (TokenCount == 0)
HandleString(TokenList, TokenCount, &(GlobalConfig.DefaultSelection));
} else if (StriCmp(TokenList[0], L"textonly") == 0) {
- GlobalConfig.TextOnly = TRUE;
+ if ((TokenCount >= 2) && (StriCmp(TokenList[1], L"0") == 0)) {
+ GlobalConfig.TextOnly = FALSE;
+ } else {
+ GlobalConfig.TextOnly = TRUE;
+ }
} else if ((StriCmp(TokenList[0], L"resolution") == 0) && (TokenCount == 3)) {
GlobalConfig.RequestedScreenWidth = Atoi(TokenList[1]);
} // for (graphics_on tokens)
} else if (StriCmp(TokenList[0], L"scan_all_linux_kernels") == 0) {
- GlobalConfig.ScanAllLinux = TRUE;
+ if ((TokenCount >= 2) && (StriCmp(TokenList[1], L"0") == 0)) {
+ GlobalConfig.ScanAllLinux = FALSE;
+ } else {
+ GlobalConfig.ScanAllLinux = TRUE;
+ }
} else if (StriCmp(TokenList[0], L"max_tags") == 0) {
HandleInt(TokenList, TokenCount, &(GlobalConfig.MaxTags));
+ } else if ((StriCmp(TokenList[0], L"include") == 0) && (TokenCount == 2) && (StriCmp(FileName, CONFIG_FILE_NAME) == 0)) {
+ if (StriCmp(TokenList[1], FileName) != 0) {
+ ReadConfig(TokenList[1]);
+ }
+
}
FreeTokenLine(&TokenList, &TokenCount);