mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-04 13:35:48 +01:00 
			
		
		
		
	https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Bob Feng <bob.c.feng@intel.com>
		
			
				
	
	
		
			206 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @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;
 | 
						|
}
 | 
						|
 | 
						|
 |