@@ -156,6 +156,20 @@ VOID SyncLinuxPrefixes (VOID) {
156156 SetLinuxMatchPatterns (GlobalConfig .LinuxPrefixes );
157157} // static VOID SyncLinuxPrefixes()
158158
159+ static
160+ VOID SyncToolPaths (VOID ) {
161+ MY_FREE_POOL (GlobalConfig .ToolLocations );
162+
163+ GlobalConfig .ToolLocations = StrDuplicate (
164+ SelfToolPath
165+ );
166+
167+ MergeUniqueItems (
168+ & GlobalConfig .ToolLocations ,
169+ TOOL_LOCATIONS , L','
170+ );
171+ } // static VOID SyncToolPaths()
172+
159173static
160174VOID SyncAlsoScan (VOID ) {
161175 if (GlobalConfig .AlsoScan == NULL ) {
@@ -223,10 +237,8 @@ VOID SyncDontScanFiles (VOID) {
223237 );
224238 }
225239
226-
227- // Handle MEMTEST_NAMES in 'ScanLoaderDir' and not here
228- // to accomodate fallback loaders in the list.
229-
240+ // Handle MEMTEST_FILES in 'ScanLoaderDir'
241+ // to accomodate fallback loaders.
230242 MergeUniqueItems (
231243 & GlobalConfig .DontScanFiles ,
232244 SHELL_FILES , L','
@@ -245,11 +257,11 @@ VOID SyncDontScanFiles (VOID) {
245257 );
246258 MergeUniqueItems (
247259 & GlobalConfig .DontScanFiles ,
248- FWUPDATE_NAMES , L','
260+ FWUPDATE_FILES , L','
249261 );
250262 MergeUniqueItems (
251263 & GlobalConfig .DontScanFiles ,
252- MOK_NAMES , L','
264+ MOK_FILES , L','
253265 );
254266 MergeUniqueItems (
255267 & GlobalConfig .DontScanFiles ,
@@ -286,121 +298,6 @@ VOID SyncShowTools (VOID) {
286298 GlobalConfig .ShowTools [11 ] = TAG_FWUPDATE_TOOL ;
287299} // static VOID SyncShowTools()
288300
289- // Get a single line of text from a file
290- static
291- CHAR16 * ReadLine (
292- REFIT_FILE * File
293- ) {
294- CHAR16 * Line ;
295- CHAR16 * qChar16 ;
296- CHAR16 * pChar16 ;
297- CHAR16 * LineEndChar16 ;
298- CHAR16 * LineStartChar16 ;
299-
300- CHAR8 * pChar08 ;
301- CHAR8 * LineEndChar08 ;
302- CHAR8 * LineStartChar08 ;
303- UINTN LineLength ;
304-
305-
306- if (File -> Buffer == NULL ) {
307- // Early Return
308- return NULL ;
309- }
310-
311- if (File -> Encoding != ENCODING_UTF8 &&
312- File -> Encoding != ENCODING_UTF16_LE &&
313- File -> Encoding != ENCODING_ISO8859_1
314- ) {
315- // Early Return ... Unsupported encoding
316- return NULL ;
317- }
318-
319- if (File -> Encoding == ENCODING_UTF8 ||
320- File -> Encoding == ENCODING_ISO8859_1
321- ) {
322- pChar08 = File -> Current8Ptr ;
323- if (pChar08 >= File -> End8Ptr ) {
324- // Early Return
325- return NULL ;
326- }
327-
328- LineStartChar08 = pChar08 ;
329- for (; pChar08 < File -> End8Ptr ; pChar08 ++ ) {
330- if (* pChar08 == 13 || * pChar08 == 10 ) {
331- break ;
332- }
333- }
334- LineEndChar08 = pChar08 ;
335- for (; pChar08 < File -> End8Ptr ; pChar08 ++ ) {
336- if (* pChar08 != 13 && * pChar08 != 10 ) {
337- break ;
338- }
339- }
340- File -> Current8Ptr = pChar08 ;
341-
342- LineLength = (UINTN ) (LineEndChar08 - LineStartChar08 ) + 1 ;
343- Line = AllocatePool (sizeof (CHAR16 ) * LineLength );
344- if (Line == NULL ) {
345- // Early Return
346- return NULL ;
347- }
348-
349- qChar16 = Line ;
350- if (File -> Encoding == ENCODING_ISO8859_1 ) {
351- for (pChar08 = LineStartChar08 ; pChar08 < LineEndChar08 ; ) {
352- * qChar16 ++ = * pChar08 ++ ;
353- }
354- }
355- else if (File -> Encoding == ENCODING_UTF8 ) {
356- // DA-TAG: Investigate This
357- // Actually handle UTF-8
358- // Currently just duplicates previous block
359- for (pChar08 = LineStartChar08 ; pChar08 < LineEndChar08 ; ) {
360- * qChar16 ++ = * pChar08 ++ ;
361- }
362- }
363- * qChar16 = 0 ;
364-
365- return Line ;
366- }
367-
368- // Encoding is ENCODING_UTF16_LE
369- pChar16 = File -> Current16Ptr ;
370- if (pChar16 >= File -> End16Ptr ) {
371- // Early Return
372- return NULL ;
373- }
374-
375- LineStartChar16 = pChar16 ;
376- for (; pChar16 < File -> End16Ptr ; pChar16 ++ ) {
377- if (* pChar16 == 13 || * pChar16 == 10 ) {
378- break ;
379- }
380- }
381- LineEndChar16 = pChar16 ;
382- for (; pChar16 < File -> End16Ptr ; pChar16 ++ ) {
383- if (* pChar16 != 13 && * pChar16 != 10 ) {
384- break ;
385- }
386- }
387- File -> Current16Ptr = pChar16 ;
388-
389- LineLength = (UINTN ) (LineEndChar16 - LineStartChar16 ) + 1 ;
390- Line = AllocatePool (sizeof (CHAR16 ) * LineLength );
391- if (Line == NULL ) {
392- // Early Return
393- return NULL ;
394- }
395-
396- for (pChar16 = LineStartChar16 , qChar16 = Line ; pChar16 < LineEndChar16 ; ) {
397- * qChar16 ++ = * pChar16 ++ ;
398- }
399- * qChar16 = 0 ;
400-
401- return Line ;
402- } // static CHAR16 * ReadLine
403-
404301// Returns FALSE if *p points to the end of a token, TRUE otherwise.
405302// Also modifies *p **IF** the first and second characters are both
406303// quotes ('"'); it deletes one of them.
@@ -1626,6 +1523,7 @@ VOID ExitOuter (
16261523 }
16271524
16281525 SyncShowTools ();
1526+ SyncToolPaths ();
16291527 SyncAlsoScan ();
16301528 SyncDontScanDirs ();
16311529 SyncDontScanFiles ();
@@ -1696,6 +1594,119 @@ VOID ExitOuter (
16961594 #endif
16971595} // static VOID ExitOuter()
16981596
1597+ // Get a single line of text from a file
1598+ CHAR16 * ReadLine (
1599+ REFIT_FILE * File
1600+ ) {
1601+ CHAR16 * Line ;
1602+ CHAR16 * qChar16 ;
1603+ CHAR16 * pChar16 ;
1604+ CHAR16 * LineEndChar16 ;
1605+ CHAR16 * LineStartChar16 ;
1606+ CHAR8 * pChar08 ;
1607+ CHAR8 * LineEndChar08 ;
1608+ CHAR8 * LineStartChar08 ;
1609+ UINTN LineLength ;
1610+
1611+
1612+ if (File -> Buffer == NULL ) {
1613+ // Early Return
1614+ return NULL ;
1615+ }
1616+
1617+ if (File -> Encoding != ENCODING_UTF8 &&
1618+ File -> Encoding != ENCODING_UTF16_LE &&
1619+ File -> Encoding != ENCODING_ISO8859_1
1620+ ) {
1621+ // Early Return ... Unsupported encoding
1622+ return NULL ;
1623+ }
1624+
1625+ if (File -> Encoding == ENCODING_UTF8 ||
1626+ File -> Encoding == ENCODING_ISO8859_1
1627+ ) {
1628+ pChar08 = File -> Current8Ptr ;
1629+ if (pChar08 >= File -> End8Ptr ) {
1630+ // Early Return
1631+ return NULL ;
1632+ }
1633+
1634+ LineStartChar08 = pChar08 ;
1635+ for (; pChar08 < File -> End8Ptr ; pChar08 ++ ) {
1636+ if (* pChar08 == 13 || * pChar08 == 10 ) {
1637+ break ;
1638+ }
1639+ }
1640+ LineEndChar08 = pChar08 ;
1641+ for (; pChar08 < File -> End8Ptr ; pChar08 ++ ) {
1642+ if (* pChar08 != 13 && * pChar08 != 10 ) {
1643+ break ;
1644+ }
1645+ }
1646+ File -> Current8Ptr = pChar08 ;
1647+
1648+ LineLength = (UINTN ) (LineEndChar08 - LineStartChar08 ) + 1 ;
1649+ Line = AllocatePool (sizeof (CHAR16 ) * LineLength );
1650+ if (Line == NULL ) {
1651+ // Early Return
1652+ return NULL ;
1653+ }
1654+
1655+ qChar16 = Line ;
1656+ if (File -> Encoding == ENCODING_ISO8859_1 ) {
1657+ for (pChar08 = LineStartChar08 ; pChar08 < LineEndChar08 ; ) {
1658+ * qChar16 ++ = * pChar08 ++ ;
1659+ }
1660+ }
1661+ else if (File -> Encoding == ENCODING_UTF8 ) {
1662+ // DA-TAG: Investigate This
1663+ // Actually handle UTF-8
1664+ // Currently just duplicates previous block
1665+ for (pChar08 = LineStartChar08 ; pChar08 < LineEndChar08 ; ) {
1666+ * qChar16 ++ = * pChar08 ++ ;
1667+ }
1668+ }
1669+ * qChar16 = 0 ;
1670+
1671+ return Line ;
1672+ }
1673+
1674+ // Encoding is ENCODING_UTF16_LE
1675+ pChar16 = File -> Current16Ptr ;
1676+ if (pChar16 >= File -> End16Ptr ) {
1677+ // Early Return
1678+ return NULL ;
1679+ }
1680+
1681+ LineStartChar16 = pChar16 ;
1682+ for (; pChar16 < File -> End16Ptr ; pChar16 ++ ) {
1683+ if (* pChar16 == 13 || * pChar16 == 10 ) {
1684+ break ;
1685+ }
1686+ }
1687+ LineEndChar16 = pChar16 ;
1688+ for (; pChar16 < File -> End16Ptr ; pChar16 ++ ) {
1689+ if (* pChar16 != 13 && * pChar16 != 10 ) {
1690+ break ;
1691+ }
1692+ }
1693+ File -> Current16Ptr = pChar16 ;
1694+
1695+ LineLength = (UINTN ) (LineEndChar16 - LineStartChar16 ) + 1 ;
1696+ Line = AllocatePool (sizeof (CHAR16 ) * LineLength );
1697+ if (Line == NULL ) {
1698+ // Early Return
1699+ return NULL ;
1700+ }
1701+
1702+ for (pChar16 = LineStartChar16 , qChar16 = Line ; pChar16 < LineEndChar16 ; ) {
1703+ * qChar16 ++ = * pChar16 ++ ;
1704+ }
1705+ * qChar16 = 0 ;
1706+
1707+ return Line ;
1708+ } // CHAR16 * ReadLine
1709+
16991710EFI_STATUS RefitReadFile (
17001711 IN EFI_FILE_HANDLE BaseDir ,
17011712 IN CHAR16 * FileName ,
@@ -2528,6 +2539,7 @@ VOID ReadConfig (
25282539 if (0 );
25292540 else if (MyStriCmp (TokenList [i ], L"osx" )) GlobalConfig .GraphicsFor |= GRAPHICS_FOR_OSX ;
25302541 else if (MyStriCmp (TokenList [i ], L"grub" )) GlobalConfig .GraphicsFor |= GRAPHICS_FOR_GRUB ;
2542+ else if (MyStriCmp (TokenList [i ], L"tools" )) GlobalConfig .GraphicsFor |= GRAPHICS_FOR_TOOLS ;
25312543 else if (MyStriCmp (TokenList [i ], L"linux" )) GlobalConfig .GraphicsFor |= GRAPHICS_FOR_LINUX ;
25322544 else if (MyStriCmp (TokenList [i ], L"elilo" )) GlobalConfig .GraphicsFor |= GRAPHICS_FOR_ELILO ;
25332545 else if (MyStriCmp (TokenList [i ], L"clover" )) GlobalConfig .GraphicsFor |= GRAPHICS_FOR_CLOVER ;
@@ -2668,6 +2680,20 @@ VOID ReadConfig (
26682680 & (GlobalConfig .AlsoScan )
26692681 );
26702682 }
2683+ else if (MyStriCmp (TokenList [0 ], L"also_scan_tool_dirs" )) {
2684+ #if REFIT_DEBUG > 0
2685+ if (!OuterLoop ) {
2686+ UpdatedToken = LogUpdate (
2687+ TokenList [0 ], NotRunBefore , TRUE
2688+ );
2689+ }
2690+ #endif
2691+
2692+ HandleStrings (
2693+ TokenList , TokenCount ,
2694+ & (GlobalConfig .ToolLocationsExtra )
2695+ );
2696+ }
26712697 else if (
26722698 MyStriCmp (TokenList [0 ], L"dont_scan_volumes" ) ||
26732699 MyStriCmp (TokenList [0 ], L"don't_scan_volumes" )
0 commit comments