X-Git-Url: https://code.delx.au/refind/blobdiff_plain/9a669ad3b5fb341500d76d487c38a7102eb01b3d..107d80e5276d89f8b0763f6aa208e60d540ca06b:/refind/config.c diff --git a/refind/config.c b/refind/config.c index bb5a53d..e58238b 100644 --- a/refind/config.c +++ b/refind/config.c @@ -50,6 +50,7 @@ #include "config.h" #include "screen.h" #include "../include/refit_call_wrapper.h" +#include "../mok/mok.h" // constants @@ -318,10 +319,20 @@ 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 + PauseForKey(); } // static VOID HandleString() // Handle a parameter with a series of string arguments, to replace or be added to a @@ -430,6 +441,7 @@ VOID ReadConfig(CHAR16 *FileName) CHAR16 *FlagName; CHAR16 *TempStr = NULL; UINTN TokenCount, i; + EFI_GUID RefindGuid = REFIND_GUID_VALUE; // Set a few defaults only if we're loading the default file. if (StriCmp(FileName, GlobalConfig.ConfigFilename) == 0) { @@ -454,6 +466,13 @@ VOID ReadConfig(CHAR16 *FileName) MyFreePool(GlobalConfig.DontScanVolumes); GlobalConfig.DontScanVolumes = StrDuplicate(DONT_SCAN_VOLUMES); GlobalConfig.WindowsRecoveryFiles = StrDuplicate(WINDOWS_RECOVERY_FILES); + if (GlobalConfig.DefaultSelection != NULL) { + MyFreePool(GlobalConfig.DefaultSelection); + GlobalConfig.DefaultSelection = NULL; + } + Status = EfivarGetRaw(&RefindGuid, L"PreviousBoot", (CHAR8**) &(GlobalConfig.DefaultSelection), &i); + if (Status != EFI_SUCCESS) + GlobalConfig.DefaultSelection = NULL; } // if if (!FileExists(SelfDir, FileName)) { @@ -510,7 +529,7 @@ VOID ReadConfig(CHAR16 *FileName) GlobalConfig.ScanFor[i] = ' '; } - } else if (StriCmp(TokenList[0], L"deep_uefi_legacy_scan") == 0) { + } else if (StriCmp(TokenList[0], L"uefi_deep_legacy_scan") == 0) { GlobalConfig.DeepLegacyScan = HandleBoolean(TokenList, TokenCount); } else if ((StriCmp(TokenList[0], L"scan_delay") == 0) && (TokenCount == 2)) { @@ -611,11 +630,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));