123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- /** @file
- Helper functions for parsing GuidedSectionTools.txt
- Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <assert.h>
- #include <string.h>
- #include <ctype.h>
- #include <stdlib.h>
- #include "MemoryFile.h"
- #include "CommonLib.h"
- #include "EfiUtilityMsgs.h"
- #include "ParseInf.h"
- #include "ParseGuidedSectionTools.h"
- #include "StringFuncs.h"
- //
- // Local types / structures
- //
- typedef struct _GUID_SEC_TOOL_ENTRY {
- EFI_GUID Guid;
- CHAR8* Name;
- CHAR8* Path;
- struct _GUID_SEC_TOOL_ENTRY *Next;
- } GUID_SEC_TOOL_ENTRY;
- //
- // Function Implementation
- //
- EFI_HANDLE
- ParseGuidedSectionToolsFile (
- IN CHAR8 *InputFile
- )
- /*++
- Routine Description:
- This function parses the tools_def.txt file. It returns a
- EFI_HANDLE object which can be used for the other library
- functions and should be passed to FreeParsedGuidedSectionToolsHandle
- to free resources when the tools_def.txt information is no
- longer needed.
- Arguments:
- InputFile Path name of file to read
- Returns:
- NULL if error parsing
- A non-NULL EFI_HANDLE otherwise
- --*/
- {
- EFI_STATUS Status;
- EFI_HANDLE MemoryFile;
- EFI_HANDLE ParsedGuidedSectionTools;
- Status = GetMemoryFile (InputFile, &MemoryFile);
- if (EFI_ERROR (Status)) {
- return NULL;
- }
- ParsedGuidedSectionTools = ParseGuidedSectionToolsMemoryFile (MemoryFile);
- FreeMemoryFile (MemoryFile);
- return ParsedGuidedSectionTools;
- }
- EFI_HANDLE
- ParseGuidedSectionToolsMemoryFile (
- IN EFI_HANDLE InputFile
- )
- /*++
- Routine Description:
- This function parses the tools_def.txt file. It returns a
- EFI_HANDLE object which can be used for the other library
- functions and should be passed to FreeParsedGuidedSectionToolsHandle
- to free resources when the tools_def.txt information is no
- longer needed.
- Arguments:
- InputFile Memory file image.
- Returns:
- NULL if error or EOF
- InputBuffer otherwise
- --*/
- {
- EFI_STATUS Status;
- CHAR8 *NextLine;
- STRING_LIST *Tool;
- EFI_GUID Guid;
- GUID_SEC_TOOL_ENTRY *FirstGuidTool;
- GUID_SEC_TOOL_ENTRY *LastGuidTool;
- GUID_SEC_TOOL_ENTRY *NewGuidTool;
- FirstGuidTool = NULL;
- LastGuidTool = NULL;
- while (TRUE) {
- NextLine = ReadMemoryFileLine (InputFile);
- if (NextLine == NULL) {
- break;
- }
- Status = StripInfDscStringInPlace (NextLine);
- if (EFI_ERROR (Status)) {
- free (NextLine);
- break;
- }
- if (NextLine[0] == '\0') {
- free (NextLine);
- continue;
- }
- Tool = SplitStringByWhitespace (NextLine);
- if ((Tool != NULL) &&
- (Tool->Count == 3)
- ) {
- Status = StringToGuid (Tool->Strings[0], &Guid);
- if (!EFI_ERROR (Status)) {
- NewGuidTool = malloc (sizeof (GUID_SEC_TOOL_ENTRY));
- if (NewGuidTool != NULL) {
- memcpy (&(NewGuidTool->Guid), &Guid, sizeof (Guid));
- NewGuidTool->Name = CloneString(Tool->Strings[1]);
- NewGuidTool->Path = CloneString(Tool->Strings[2]);
- NewGuidTool->Next = NULL;
- if (FirstGuidTool == NULL) {
- FirstGuidTool = NewGuidTool;
- } else {
- LastGuidTool->Next = NewGuidTool;
- }
- LastGuidTool = NewGuidTool;
- }
- }
- }
- if (Tool != NULL) {
- FreeStringList (Tool);
- }
- free (NextLine);
- }
- return FirstGuidTool;
- }
- CHAR8*
- LookupGuidedSectionToolPath (
- IN EFI_HANDLE ParsedGuidedSectionToolsHandle,
- IN EFI_GUID *SectionGuid
- )
- /*++
- Routine Description:
- This function looks up the appropriate tool to use for extracting
- a GUID defined FV section.
- Arguments:
- ParsedGuidedSectionToolsHandle A parsed GUID section tools handle.
- SectionGuid The GUID for the section.
- Returns:
- NULL - if no tool is found or there is another error
- Non-NULL - The tool to use to access the section contents. (The caller
- must free the memory associated with this string.)
- --*/
- {
- GUID_SEC_TOOL_ENTRY *GuidTool;
- GuidTool = (GUID_SEC_TOOL_ENTRY*)ParsedGuidedSectionToolsHandle;
- if (GuidTool == NULL) {
- return NULL;
- }
- for ( ; GuidTool != NULL; GuidTool = GuidTool->Next) {
- if (CompareGuid (&(GuidTool->Guid), SectionGuid) == 0) {
- return CloneString (GuidTool->Path);
- }
- }
- return NULL;
- }
|