Skip to content

Commit c0906f1

Browse files
committed
Amend 'Tool' Handling
1 parent 62b6eb4 commit c0906f1

File tree

13 files changed

+840
-1000
lines changed

13 files changed

+840
-1000
lines changed

BootMaster/config.c

Lines changed: 147 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
159173
static
160174
VOID 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+
16991710
EFI_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")

BootMaster/config.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ typedef struct {
7272
#define DONT_SCAN_VOLUMES L"LRS_ESP"
7373
#define ALSO_SCAN_DIRS L"boot,@/boot"
7474

75-
// Note: Below is combined with MOK_NAMES and FWUPDATE_NAMES to make default
75+
// Note: Combined with misc 'XYZ_FILES' items to create default
7676
#if defined (EFIX64)
7777
#define DONT_SCAN_FILES \
7878
L"shim.efi,shimx64.efi,shim-fedora.efi,shim-centos.efi,PreLoader.efi,fb.efi,fbx64.efi"
@@ -115,6 +115,9 @@ CHAR16 * GetFirstOptionsFromFile (
115115
IN CHAR16 *LoaderPath,
116116
IN REFIT_VOLUME *Volume
117117
);
118+
CHAR16 * ReadLine (
119+
REFIT_FILE *File
120+
);
118121

119122
#endif
120123

0 commit comments

Comments
 (0)