X-Git-Url: https://code.delx.au/refind/blobdiff_plain/999e9b76afa9e57b16b54da313a46bdcf08dc412..2cc79ea9b33424d5fc32f15683adf7c956656b9b:/refind/config.c diff --git a/refind/config.c b/refind/config.c index e261ef8..9e5016b 100644 --- a/refind/config.c +++ b/refind/config.c @@ -319,9 +319,18 @@ static VOID HandleInt(IN CHAR16 **TokenList, IN UINTN TokenCount, OUT UINTN *Val // handle a parameter with a single string argument static VOID HandleString(IN CHAR16 **TokenList, IN UINTN TokenCount, OUT CHAR16 **Target) { - if (TokenCount == 2) { - MyFreePool(*Target); - *Target = StrDuplicate(TokenList[1]); + if ((TokenCount == 2) && Target) { + if ((StrLen(TokenList[1]) > 1) && (TokenList[1][0] == L'+') && + ((TokenList[1][1] == L',') || (TokenList[1][1] == L' '))) { + if (*Target) { + MergeStrings(Target, TokenList[1] + 2, L','); + } else { + *Target = StrDuplicate(TokenList[1] + 2); + } // if/else + } else { + MyFreePool(*Target); + *Target = StrDuplicate(TokenList[1]); + } // if/else } // if } // static VOID HandleString() @@ -460,19 +469,18 @@ VOID ReadConfig(CHAR16 *FileName) MyFreePool(GlobalConfig.DefaultSelection); GlobalConfig.DefaultSelection = NULL; } -// GlobalConfig.DefaultSelection = AllocatePool(255 * sizeof(CHAR16)); -// Print(L"About to call EfivarGetRaw()\n"); Status = EfivarGetRaw(&RefindGuid, L"PreviousBoot", (CHAR8**) &(GlobalConfig.DefaultSelection), &i); -// i = 255 * sizeof(CHAR16); -// Print(L"About to call RT->GetVariable()\n"); -// Status = refit_call5_wrapper(RT->GetVariable, L"PreviousBoot", &RefindGuid, &Attributes, &i, GlobalConfig.DefaultSelection); if (Status != EFI_SUCCESS) GlobalConfig.DefaultSelection = NULL; } // if if (!FileExists(SelfDir, FileName)) { - Print(L"Configuration file '%s' missing!\n", FileName); - return; + Print(L"Configuration file '%s' missing!\n", FileName); + if (!FileExists(SelfDir, L"icons")) { + Print(L"Icons directory doesn't exist; setting textonly = TRUE!\n"); + GlobalConfig.TextOnly = TRUE; + } + return; } Status = ReadFile(SelfDir, FileName, &File, &i); @@ -581,6 +589,8 @@ VOID ReadConfig(CHAR16 *FileName) GlobalConfig.ShowTools[i - 1] = TAG_FIRMWARE; } else if ((StriCmp(FlagName, L"memtest86") == 0) || (StriCmp(FlagName, L"memtest") == 0)) { GlobalConfig.ShowTools[i - 1] = TAG_MEMTEST; + } else if (StriCmp(FlagName, L"netboot") == 0) { + GlobalConfig.ShowTools[i - 1] = TAG_NETBOOT; } else { Print(L" unknown showtools flag: '%s'\n", FlagName); } @@ -625,11 +635,6 @@ VOID ReadConfig(CHAR16 *FileName) } else if (StriCmp(TokenList[0], L"textonly") == 0) { GlobalConfig.TextOnly = HandleBoolean(TokenList, TokenCount); -// if ((TokenCount >= 2) && (StriCmp(TokenList[1], L"0") == 0)) { -// GlobalConfig.TextOnly = FALSE; -// } else { -// GlobalConfig.TextOnly = TRUE; -// } } else if (StriCmp(TokenList[0], L"textmode") == 0) { HandleInt(TokenList, TokenCount, &(GlobalConfig.RequestedTextMode)); @@ -666,15 +671,13 @@ VOID ReadConfig(CHAR16 *FileName) } else if (StriCmp(TokenList[0], L"scan_all_linux_kernels") == 0) { GlobalConfig.ScanAllLinux = HandleBoolean(TokenList, TokenCount); -// 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"enable_and_lock_vmx") == 0) { + GlobalConfig.EnableAndLockVMX = HandleBoolean(TokenList, TokenCount); + } else if ((StriCmp(TokenList[0], L"include") == 0) && (TokenCount == 2) && (StriCmp(FileName, GlobalConfig.ConfigFilename) == 0)) { if (StriCmp(TokenList[1], FileName) != 0) { @@ -688,6 +691,11 @@ VOID ReadConfig(CHAR16 *FileName) if ((GlobalConfig.DontScanFiles) && (GlobalConfig.WindowsRecoveryFiles)) MergeStrings(&(GlobalConfig.DontScanFiles), GlobalConfig.WindowsRecoveryFiles, L','); MyFreePool(File.Buffer); + + if (!FileExists(SelfDir, L"icons") && !FileExists(SelfDir, GlobalConfig.IconsDir)) { + Print(L"Icons directory doesn't exist; setting textonly = TRUE!\n"); + GlobalConfig.TextOnly = TRUE; + } } /* VOID ReadConfig() */ // Finds a volume with the specified Identifier (a filesystem label, a