X-Git-Url: https://code.delx.au/refind/blobdiff_plain/c09200e2220b05bbade961bdc35f7da90d318abf..860fb6e13e399f326ff20e25f9f36070ee67b1a9:/refind/config.c diff --git a/refind/config.c b/refind/config.c index 2b6d2d3..803ce61 100644 --- a/refind/config.c +++ b/refind/config.c @@ -54,7 +54,7 @@ // constants #define CONFIG_FILE_NAME L"refind.conf" -#define LINUX_OPTIONS_FILENAMES L"refind_linux.conf,linux.conf" +#define LINUX_OPTIONS_FILENAMES L"refind_linux.conf,refind-linux.conf,linux.conf" #define MAXCONFIGFILESIZE (128*1024) #define ENCODING_ISO8859_1 (0) @@ -325,20 +325,26 @@ VOID ReadConfig(VOID) if (StriCmp(TokenList[0], L"timeout") == 0) { HandleInt(TokenList, TokenCount, &(GlobalConfig.Timeout)); - - } else if (StriCmp(TokenList[0], L"disable") == 0) { + + // Note: I'm using "disable" as equivalent to "hideui" for the moment (as of rEFInd 0.2.4) + // because I've folded two options into one and removed some values, so I want to catch + // existing configurations as much as possible. The "disable" equivalency to "hideui" will + // be removed sooner or later, leaving only "hideui". + } else if ((StriCmp(TokenList[0], L"hideui") == 0) || (StriCmp(TokenList[0], L"disable") == 0)) { for (i = 1; i < TokenCount; i++) { FlagName = TokenList[i]; - if (StriCmp(FlagName, L"shell") == 0) { - GlobalConfig.DisableFlags |= DISABLE_FLAG_SHELL; - } else if (StriCmp(FlagName, L"tools") == 0) { - GlobalConfig.DisableFlags |= DISABLE_FLAG_TOOLS; + if (StriCmp(FlagName, L"banner") == 0) { + GlobalConfig.HideUIFlags |= HIDEUI_FLAG_BANNER; + } else if (StriCmp(FlagName, L"label") == 0) { + GlobalConfig.HideUIFlags |= HIDEUI_FLAG_LABEL; } else if (StriCmp(FlagName, L"singleuser") == 0) { - GlobalConfig.DisableFlags |= DISABLE_FLAG_SINGLEUSER; + GlobalConfig.HideUIFlags |= HIDEUI_FLAG_SINGLEUSER; } else if (StriCmp(FlagName, L"hwtest") == 0) { - GlobalConfig.DisableFlags |= DISABLE_FLAG_HWTEST; + GlobalConfig.HideUIFlags |= HIDEUI_FLAG_HWTEST; + } else if (StriCmp(FlagName, L"arrows") == 0) { + GlobalConfig.HideUIFlags |= HIDEUI_FLAG_ARROWS; } else if (StriCmp(FlagName, L"all") == 0) { - GlobalConfig.DisableFlags = DISABLE_ALL; + GlobalConfig.HideUIFlags = HIDEUI_ALL; } else { Print(L" unknown disable flag: '%s'\n", FlagName); } @@ -351,27 +357,27 @@ VOID ReadConfig(VOID) else GlobalConfig.ScanFor[i] = ' '; } - } else if (StriCmp(TokenList[0], L"hideui") == 0) { - for (i = 1; i < TokenCount; i++) { + } else if (StriCmp(TokenList[0], L"showtools") == 0) { + SetMem(GlobalConfig.ShowTools, NUM_TOOLS * sizeof(UINTN), 0); + for (i = 1; (i < TokenCount) && (i < NUM_TOOLS); i++) { FlagName = TokenList[i]; - if (StriCmp(FlagName, L"banner") == 0) { - GlobalConfig.HideUIFlags |= HIDEUI_FLAG_BANNER; - } else if (StriCmp(FlagName, L"shell") == 0) { - GlobalConfig.DisableFlags |= DISABLE_FLAG_SHELL; - } else if (StriCmp(FlagName, L"tools") == 0) { - GlobalConfig.DisableFlags |= DISABLE_FLAG_TOOLS; - } else if (StriCmp(FlagName, L"funcs") == 0) { - GlobalConfig.HideUIFlags |= HIDEUI_FLAG_FUNCS; - } else if (StriCmp(FlagName, L"label") == 0) { - GlobalConfig.HideUIFlags |= HIDEUI_FLAG_LABEL; - } else if (StriCmp(FlagName, L"all") == 0) { - GlobalConfig.HideUIFlags = HIDEUI_ALL; - GlobalConfig.DisableFlags |= DISABLE_FLAG_SHELL | DISABLE_FLAG_TOOLS; + if (StriCmp(FlagName, L"shell") == 0) { + GlobalConfig.ShowTools[i - 1] = TAG_SHELL; + } else if (StriCmp(FlagName, L"gptsync") == 0) { + GlobalConfig.ShowTools[i - 1] = TAG_GPTSYNC; + } else if (StriCmp(FlagName, L"about") == 0) { + GlobalConfig.ShowTools[i - 1] = TAG_ABOUT; + } else if (StriCmp(FlagName, L"exit") == 0) { + GlobalConfig.ShowTools[i - 1] = TAG_EXIT; + } else if (StriCmp(FlagName, L"reboot") == 0) { + GlobalConfig.ShowTools[i - 1] = TAG_REBOOT; + } else if (StriCmp(FlagName, L"shutdown") == 0) { + GlobalConfig.ShowTools[i - 1] = TAG_SHUTDOWN; } else { - Print(L" unknown hideui flag: '%s'\n", FlagName); + Print(L" unknown showtools flag: '%s'\n", FlagName); } - } - + } // showtools options + } else if (StriCmp(TokenList[0], L"banner") == 0) { HandleString(TokenList, TokenCount, &(GlobalConfig.BannerFileName)); @@ -390,11 +396,12 @@ VOID ReadConfig(VOID) } else if ((StriCmp(TokenList[0], L"}") == 0) || (StriCmp(TokenList[0], L"loader") == 0) || (StriCmp(TokenList[0], L"icon") == 0) || (StriCmp(TokenList[0], L"options") == 0)) { // Do nothing; handled by ScanUserConfigured() + } else if ((StriCmp(TokenList[0], L"max_tags") == 0) && (TokenCount > 1)) { + GlobalConfig.MaxTags = Atoi(TokenList[1]); } FreeTokenLine(&TokenList, &TokenCount); } - FreePool(File.Buffer); } /* VOID ReadConfig() */ @@ -596,10 +603,14 @@ REFIT_FILE * ReadLinuxOptionsFile(IN CHAR16 *LoaderPath, IN REFIT_VOLUME *Volume File = AllocateZeroPool(sizeof(REFIT_FILE)); Status = ReadFile(Volume->RootDir, FullFilename, File); GoOn = FALSE; - if (CheckError(Status, L"while loading the Linux options file")) + if (CheckError(Status, L"while loading the Linux options file")) { + if (File != NULL) + FreePool(File); File = NULL; - } // if - } else { + GoOn = TRUE; + } // if error + } // if file exists + } else { // a filename string is NULL GoOn = FALSE; } // if/else if (OptionsFilename != NULL) @@ -609,7 +620,7 @@ REFIT_FILE * ReadLinuxOptionsFile(IN CHAR16 *LoaderPath, IN REFIT_VOLUME *Volume OptionsFilename = FullFilename = NULL; } while (GoOn); return (File); -} // static REFIT_FILE * FindLinuxOptionsFile() +} // static REFIT_FILE * ReadLinuxOptionsFile() // Retrieve a single line of options from a Linux kernel options file CHAR16 * GetFirstOptionsFromFile(IN CHAR16 *LoaderPath, IN REFIT_VOLUME *Volume) {