]> code.delx.au - refind/blobdiff - refind/config.c
0.2.4 release version
[refind] / refind / config.c
index 2b6d2d3339f507445c334e7be153d14b72db15a5..803ce61bde5bf852bbc1e5fdc070ce2204163a5d 100644 (file)
@@ -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) {