]> code.delx.au - refind/blobdiff - refind/config.c
Fixed bug: ICNS file in main icons directory would override PNG file in
[refind] / refind / config.c
index 441d2a4468fe52083bd65b2aaf102691a36fb7ef..384d334cf6181ab3a03c2ead76ec6f1a5ca9960c 100644 (file)
@@ -220,7 +220,6 @@ static CHAR16 *ReadLine(REFIT_FILE *File)
 static BOOLEAN KeepReading(IN OUT CHAR16 *p, IN OUT BOOLEAN *IsQuoted) {
    BOOLEAN MoreToRead = FALSE;
    CHAR16  *Temp = NULL;
-//            while (*p && *p != '"' && ((*p != ' ' && *p != '\t' && *p != '=' && *p != '#' && *p != ',') || IsQuoted)) {
 
    if ((p == NULL) || (IsQuoted == NULL))
       return FALSE;
@@ -341,21 +340,28 @@ VOID ReadConfig(CHAR16 *FileName)
     REFIT_FILE      File;
     CHAR16          **TokenList;
     CHAR16          *FlagName;
+    CHAR16          *SelfPath = NULL;
     UINTN           TokenCount, i;
 
     // Set a few defaults only if we're loading the default file.
     if (StriCmp(FileName, CONFIG_FILE_NAME) == 0) {
        MyFreePool(GlobalConfig.AlsoScan);
        GlobalConfig.AlsoScan = StrDuplicate(ALSO_SCAN_DIRS);
-//        MyFreePool(GlobalConfig.DontScanVolumes);
-//        GlobalConfig.DontScanVolumes = StrDuplicate(L" ");
        MyFreePool(GlobalConfig.DontScanDirs);
-       GlobalConfig.DontScanDirs = StrDuplicate(SelfDirPath);
+       if (SelfVolume) {
+          if (SelfVolume->VolName) {
+             SelfPath = SelfVolume->VolName ? StrDuplicate(SelfVolume->VolName) : NULL;
+          } else {
+             SelfPath = AllocateZeroPool(256 * sizeof(CHAR16));
+             if (SelfPath != NULL)
+                SPrint(SelfPath, 255, L"fs%d", SelfVolume->VolNumber);
+          } // if/else
+       }
+       MergeStrings(&SelfPath, SelfDirPath, L':');
+       GlobalConfig.DontScanDirs = SelfPath;
        MyFreePool(GlobalConfig.DontScanFiles);
        GlobalConfig.DontScanFiles = StrDuplicate(DONT_SCAN_FILES);
-//        egGetScreenSize(&GlobalConfig.RequestedScreenWidth, &GlobalConfig.RequestedScreenHeight);
-//       GlobalConfig.RequestedTextMode = ST->ConOut->Mode->Mode;
-    }
+    } // if
 
     if (!FileExists(SelfDir, FileName)) {
         Print(L"Configuration file '%s' missing!\n", FileName);
@@ -391,6 +397,8 @@ VOID ReadConfig(CHAR16 *FileName)
                    GlobalConfig.HideUIFlags |= HIDEUI_FLAG_HINTS;
                 } else if (StriCmp(FlagName, L"editor") == 0) {
                    GlobalConfig.HideUIFlags |= HIDEUI_FLAG_EDITOR;
+                } else if (StriCmp(FlagName, L"safemode") == 0) {
+                   GlobalConfig.HideUIFlags |= HIDEUI_FLAG_SAFEMODE;
                 } else if (StriCmp(FlagName, L"all") == 0) {
                    GlobalConfig.HideUIFlags = HIDEUI_FLAG_ALL;
                 } else {
@@ -418,11 +426,11 @@ VOID ReadConfig(CHAR16 *FileName)
         } else if ((StriCmp(TokenList[0], L"don't_scan_volumes") == 0) || (StriCmp(TokenList[0], L"dont_scan_volumes") == 0)) {
            HandleStrings(TokenList, TokenCount, &(GlobalConfig.AlsoScan));
            // Note: Don't use HandleStrings() because it modifies slashes, which might be present in volume name
-            MyFreePool(GlobalConfig.DontScanVolumes);
-            GlobalConfig.DontScanVolumes = NULL;
-            for (i = 1; i < TokenCount; i++) {
-               MergeStrings(&GlobalConfig.DontScanVolumes, TokenList[i], L',');
-            }
+           MyFreePool(GlobalConfig.DontScanVolumes);
+           GlobalConfig.DontScanVolumes = NULL;
+           for (i = 1; i < TokenCount; i++) {
+              MergeStrings(&GlobalConfig.DontScanVolumes, TokenList[i], L',');
+           }
 
         } else if ((StriCmp(TokenList[0], L"don't_scan_dirs") == 0) || (StriCmp(TokenList[0], L"dont_scan_dirs") == 0)) {
             HandleStrings(TokenList, TokenCount, &(GlobalConfig.DontScanDirs));
@@ -503,6 +511,9 @@ VOID ReadConfig(CHAR16 *FileName)
               }
            } // for (graphics_on tokens)
 
+        } else if ((StriCmp(TokenList[0], L"font") == 0) && (TokenCount == 2)) {
+           egLoadFont(TokenList[1]);
+
         } else if (StriCmp(TokenList[0], L"scan_all_linux_kernels") == 0) {
            if ((TokenCount >= 2) && (StriCmp(TokenList[1], L"0") == 0)) {
               GlobalConfig.ScanAllLinux = FALSE;
@@ -672,7 +683,8 @@ static LOADER_ENTRY * AddStanzaEntries(REFIT_FILE *File, REFIT_VOLUME *Volume, C
 
       } else if ((StriCmp(TokenList[0], L"icon") == 0) && (TokenCount > 1)) {
          MyFreePool(Entry->me.Image);
-         Entry->me.Image = LoadIcns(CurrentVolume->RootDir, TokenList[1], 128);
+//         Entry->me.Image = LoadIcns(CurrentVolume->RootDir, TokenList[1], 128);
+         Entry->me.Image = egLoadIcon(CurrentVolume->RootDir, TokenList[1], 128);
          if (Entry->me.Image == NULL) {
             Entry->me.Image = DummyImage(128);
          }
@@ -715,14 +727,14 @@ static LOADER_ENTRY * AddStanzaEntries(REFIT_FILE *File, REFIT_VOLUME *Volume, C
    } // if
 
    if (!DefaultsSet)
-      SetLoaderDefaults(Entry, L"\\EFI\\BOOT\\nemo.efi", CurrentVolume); // user included no entry; use bogus one
+      SetLoaderDefaults(Entry, L"\\EFI\\BOOT\\nemo.efi", CurrentVolume); // user included no "loader" line; use bogus one
 
    return(Entry);
 } // static VOID AddStanzaEntries()
 
 // Read the user-configured menu entries from refind.conf and add or delete
 // entries based on the contents of that file....
-VOID ScanUserConfigured(VOID)
+VOID ScanUserConfigured(CHAR16 *FileName)
 {
    EFI_STATUS        Status;
    REFIT_FILE        File;
@@ -732,8 +744,8 @@ VOID ScanUserConfigured(VOID)
    UINTN             TokenCount, size;
    LOADER_ENTRY      *Entry;
 
-   if (FileExists(SelfDir, CONFIG_FILE_NAME)) {
-      Status = ReadFile(SelfDir, CONFIG_FILE_NAME, &File, &size);
+   if (FileExists(SelfDir, FileName)) {
+      Status = ReadFile(SelfDir, FileName, &File, &size);
       if (EFI_ERROR(Status))
          return;
 
@@ -751,7 +763,13 @@ VOID ScanUserConfigured(VOID)
                MyFreePool(Entry);
             } // if/else
             MyFreePool(Title);
-         } // if
+
+         } else if ((StriCmp(TokenList[0], L"include") == 0) && (TokenCount == 2) && (StriCmp(FileName, CONFIG_FILE_NAME) == 0)) {
+            if (StriCmp(TokenList[1], FileName) != 0) {
+               ScanUserConfigured(TokenList[1]);
+            }
+
+         } // if/else if...
          FreeTokenLine(&TokenList, &TokenCount);
       } // while()
    } // if()