]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/TianoTools/GuidChk/GuidChk.c
Restructuring for better separation of Tool packages.
[mirror_edk2.git] / Tools / Source / TianoTools / GuidChk / GuidChk.c
diff --git a/Tools/Source/TianoTools/GuidChk/GuidChk.c b/Tools/Source/TianoTools/GuidChk/GuidChk.c
deleted file mode 100644 (file)
index de88405..0000000
+++ /dev/null
@@ -1,2348 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2004, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-Module Name:  \r
-\r
-  GuidChk.c \r
-  \r
-Abstract:\r
-\r
-  Parse files in a directory and subdirectories to find all guid definitions.\r
-  Then check them against each other to make sure there are no duplicates.\r
-  \r
---*/\r
-\r
-#include <stdio.h>\r
-#include <string.h>\r
-#include <stdlib.h>\r
-#include <ctype.h>\r
-\r
-#include "CommonUtils.h"\r
-#include "FileSearch.h"\r
-#include "UtilsMsgs.h"\r
-\r
-#define MAX_LINE_LEN  180 // we concatenate two lines sometimes\r
-// Define a structure that correlates filename extensions to an enumerated\r
-// type.\r
-//\r
-typedef struct {\r
-  INT8  *Extension;\r
-  INT8  ExtensionCode;\r
-} FILE_TYPE_TABLE_ENTRY;\r
-\r
-#define FILE_EXTENSION_UNKNOWN  0\r
-#define FILE_EXTENSION_C        1\r
-#define FILE_EXTENSION_H        2\r
-#define FILE_EXTENSION_IA32_ASM 3\r
-#define FILE_EXTENSION_IA32_INC 4\r
-#define FILE_EXTENSION_IA64_ASM 5\r
-#define FILE_EXTENSION_IA64_INC 6\r
-#define FILE_EXTENSION_PKG      7\r
-#define FILE_EXTENSION_INF      8\r
-\r
-FILE_TYPE_TABLE_ENTRY FileTypeTable[] = {\r
-  ".c",\r
-  FILE_EXTENSION_C,\r
-  ".h",\r
-  FILE_EXTENSION_H,\r
-  ".inc",\r
-  FILE_EXTENSION_IA32_INC,\r
-  ".asm",\r
-  FILE_EXTENSION_IA32_ASM,\r
-  ".s",\r
-  FILE_EXTENSION_IA64_ASM,\r
-  ".pkg",\r
-  FILE_EXTENSION_PKG,\r
-  ".inf",\r
-  FILE_EXTENSION_INF,\r
-  ".i",\r
-  FILE_EXTENSION_IA64_INC,\r
-  NULL,\r
-  0\r
-};\r
-\r
-typedef struct EFI_GUID {\r
-  UINT32  Data1;\r
-  UINT16  Data2;\r
-  UINT16  Data3;\r
-  UINT8   Data4[8];\r
-} EFI_GUID;\r
-\r
-typedef struct {\r
-  INT8  Data[4];\r
-  INT8  DataLen;\r
-} EFI_SIGNATURE;\r
-\r
-typedef struct _GUID_RECORD {\r
-  struct _GUID_RECORD *Next;\r
-  BOOLEAN             Reported;\r
-  INT8                *FileName;\r
-  INT8                *SymName;\r
-  EFI_GUID            Guid;\r
-} GUID_RECORD;\r
-\r
-typedef struct _SIGNATURE_RECORD {\r
-  struct _SIGNATURE_RECORD  *Next;\r
-  BOOLEAN                   Reported;\r
-  INT8                      *FileName;\r
-  EFI_SIGNATURE             Signature;\r
-} SIGNATURE_RECORD;\r
-\r
-//\r
-// Utility options\r
-//\r
-typedef struct {\r
-  INT8        DatabaseOutputFileName[MAX_PATH]; // with -b option\r
-  STRING_LIST *ExcludeDirs;                     // list of directory names not to process\r
-  STRING_LIST *ExcludeSubDirs;                  // list of directory names to not process subdirectories (build)\r
-  STRING_LIST *ExcludeFiles;                    // list of files to exclude (make.inf)\r
-  STRING_LIST *ExcludeExtensions;               // list of filename extensions to exclude (.inf, .pkg)\r
-  BOOLEAN     Verbose;\r
-  BOOLEAN     PrintFound;\r
-  BOOLEAN     CheckGuids;\r
-  BOOLEAN     CheckSignatures;\r
-  BOOLEAN     GuidXReference;\r
-} OPTIONS;\r
-\r
-static\r
-STATUS\r
-ProcessArgs (\r
-  int     Argc,\r
-  char    *Argv[]\r
-  );\r
-\r
-static\r
-VOID\r
-Usage (\r
-  VOID\r
-  );\r
-\r
-static\r
-STATUS\r
-ProcessDirectory (\r
-  INT8        *Path,\r
-  INT8        *DirectoryName\r
-  );\r
-\r
-static\r
-STATUS\r
-ProcessFile (\r
-  INT8                *DirectoryName,\r
-  INT8                *FileName\r
-  );\r
-\r
-static\r
-UINT32\r
-GetFileExtension (\r
-  INT8        *FileName\r
-  );\r
-\r
-static\r
-UINT32\r
-SkipWhiteSpace (\r
-  INT8    *Str\r
-  );\r
-\r
-static\r
-UINT32\r
-ValidSymbolName (\r
-  INT8    *Name\r
-  );\r
-\r
-static\r
-STATUS\r
-ProcessCFileGuids (\r
-  INT8    *FileName\r
-  );\r
-\r
-static\r
-STATUS\r
-AddSignature (\r
-  INT8      *FileName,\r
-  INT8      *StrDef,\r
-  UINT32    SigSize\r
-  );\r
-\r
-static\r
-STATUS\r
-ProcessCFileSigs (\r
-  INT8    *FileName\r
-  );\r
-\r
-static\r
-STATUS\r
-ProcessINFFileGuids (\r
-  INT8    *FileName\r
-  );\r
-\r
-static\r
-STATUS\r
-ProcessPkgFileGuids (\r
-  INT8    *FileName\r
-  );\r
-\r
-static\r
-STATUS\r
-ProcessIA32FileGuids (\r
-  INT8    *FileName\r
-  );\r
-\r
-static\r
-STATUS\r
-ProcessIA64FileGuids (\r
-  INT8    *FileName\r
-  );\r
-\r
-static\r
-BOOLEAN\r
-IsIA64GuidLine (\r
-  INT8      *Line,\r
-  UINT32    *GuidHigh,\r
-  UINT32    *GuidLow,\r
-  BOOLEAN   *Low,\r
-  INT8      *SymName\r
-  );\r
-\r
-static\r
-STATUS\r
-AddGuid11 (\r
-  INT8      *FileName,\r
-  UINT32    *Data,\r
-  INT8      *SymName\r
-  );\r
-\r
-static\r
-STATUS\r
-AddPkgGuid (\r
-  INT8      *FileName,\r
-  UINT32    *Data,\r
-  UINT64    *Data64\r
-  );\r
-\r
-static\r
-STATUS\r
-AddGuid16 (\r
-  INT8      *FileName,\r
-  UINT32    *Data\r
-  );\r
-\r
-static\r
-STATUS\r
-AddGuid64x2 (\r
-  INT8      *FileName,\r
-  UINT32    DataHH,                             // Upper 32-bits of upper 64 bits of guid\r
-  UINT32    DataHL,                             // Lower 32-bits of upper 64 bits\r
-  UINT32    DataLH,\r
-  UINT32    DataLL\r
-  );\r
-\r
-static\r
-VOID\r
-FreeGuids (\r
-  VOID\r
-  );\r
-\r
-static\r
-VOID\r
-FreeSigs (\r
-  VOID\r
-  );\r
-\r
-static\r
-STATUS\r
-CheckDuplicates (\r
-  VOID\r
-  );\r
-\r
-//\r
-// static\r
-// VOID\r
-// ReportGuid (\r
-//  INT8        *FileName,\r
-//  GUID_RECORD *FileRecord\r
-//  );\r
-//\r
-static\r
-VOID\r
-FreeOptions (\r
-  VOID\r
-  );\r
-\r
-static\r
-BOOLEAN\r
-CheckGuidData (\r
-  UINT32    *GuidData,\r
-  UINT32    DataCount\r
-  );\r
-\r
-/**************************** GLOBALS ****************************************/\r
-static GUID_RECORD      *gGuidList      = NULL;\r
-static SIGNATURE_RECORD *gSignatureList = NULL;\r
-static OPTIONS          gOptions;\r
-\r
-/*****************************************************************************/\r
-int\r
-main (\r
-  int     Argc,\r
-  char    *Argv[]\r
-  )\r
-{\r
-  INT8    *Cwd;\r
-  STATUS  Status;\r
-\r
-  SetUtilityName ("GuidChk");\r
-  //\r
-  // Get the current working directory and then process the command line\r
-  // arguments.\r
-  //\r
-  Cwd     = _getcwd (NULL, 0);\r
-  Status  = ProcessArgs (Argc, Argv);\r
-  if (Status != STATUS_SUCCESS) {\r
-    return Status;\r
-  }\r
-\r
-  if (gOptions.CheckGuids || gOptions.CheckSignatures) {\r
-    Status = ProcessDirectory (Cwd, NULL);\r
-    if (Status == STATUS_SUCCESS) {\r
-      //\r
-      // Check for duplicates\r
-      //\r
-      Status = CheckDuplicates ();\r
-    }\r
-  }\r
-\r
-  if (gOptions.DatabaseOutputFileName[0] != 0) {\r
-    CreateGuidList (gOptions.DatabaseOutputFileName);\r
-  }\r
-  //\r
-  // Free up the memory\r
-  //\r
-  free (Cwd);\r
-  FreeGuids ();\r
-  FreeSigs ();\r
-  FreeOptions ();\r
-  return GetUtilityStatus ();\r
-}\r
-\r
-static\r
-STATUS\r
-ProcessArgs (\r
-  int     Argc,\r
-  char    *Argv[]\r
-  )\r
-{\r
-  STRING_LIST *StrList;\r
-\r
-  memset ((char *) &gOptions, 0, sizeof (gOptions));\r
-  //\r
-  // skip over program name\r
-  //\r
-  Argc--;\r
-  Argv++;\r
-\r
-  if (Argc == 0) {\r
-    Usage ();\r
-    return STATUS_ERROR;\r
-  }\r
-\r
-  while (Argc > 0) {\r
-    //\r
-    // Look for options\r
-    //\r
-    if ((Argv[0][0] == '-') || (Argv[0][0] == '/')) {\r
-      switch (Argv[0][1]) {\r
-      //\r
-      // Help option\r
-      //\r
-      case 'h':\r
-      case 'H':\r
-      case '?':\r
-        Usage ();\r
-        return STATUS_ERROR;\r
-        break;\r
-\r
-      //\r
-      // Check guids option\r
-      //\r
-      case 'g':\r
-      case 'G':\r
-        gOptions.CheckGuids = TRUE;\r
-        break;\r
-\r
-      //\r
-      // Check signatures option\r
-      //\r
-      case 's':\r
-      case 'S':\r
-        gOptions.CheckSignatures = TRUE;\r
-        break;\r
-\r
-      //\r
-      // Print guids found option\r
-      //\r
-      case 'p':\r
-      case 'P':\r
-        gOptions.PrintFound = TRUE;\r
-        break;\r
-\r
-      //\r
-      // Exclude files option\r
-      //\r
-      case 'f':\r
-      case 'F':\r
-        //\r
-        // Check for another arg\r
-        //\r
-        if (Argc < 2) {\r
-          Error (NULL, 0, 0, Argv[0], "missing argument with option");\r
-          Usage ();\r
-          return STATUS_ERROR;\r
-        }\r
-\r
-        StrList = malloc (sizeof (STRING_LIST));\r
-        if (StrList == NULL) {\r
-          Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-          return STATUS_ERROR;\r
-        }\r
-\r
-        memset ((char *) StrList, 0, sizeof (STRING_LIST));\r
-        StrList->Str          = Argv[1];\r
-        StrList->Next         = gOptions.ExcludeFiles;\r
-        gOptions.ExcludeFiles = StrList;\r
-        Argc--;\r
-        Argv++;\r
-        break;\r
-\r
-      //\r
-      // Exclude directories option\r
-      //\r
-      case 'd':\r
-      case 'D':\r
-        //\r
-        // Check for another arg\r
-        //\r
-        if (Argc < 2) {\r
-          Error (NULL, 0, 0, Argv[0], "missing argument with option");\r
-          Usage ();\r
-          return STATUS_ERROR;\r
-        }\r
-\r
-        StrList = malloc (sizeof (STRING_LIST));\r
-        if (StrList == NULL) {\r
-          Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-          return STATUS_ERROR;\r
-        }\r
-\r
-        memset ((char *) StrList, 0, sizeof (STRING_LIST));\r
-        StrList->Str          = Argv[1];\r
-        StrList->Next         = gOptions.ExcludeDirs;\r
-        gOptions.ExcludeDirs  = StrList;\r
-        Argc--;\r
-        Argv++;\r
-        break;\r
-\r
-      //\r
-      // -u  exclude all subdirectories of a given directory option\r
-      //\r
-      case 'u':\r
-      case 'U':\r
-        //\r
-        // Check for another arg\r
-        //\r
-        if (Argc < 2) {\r
-          Error (NULL, 0, 0, Argv[0], "missing argument with option");\r
-          Usage ();\r
-          return STATUS_ERROR;\r
-        }\r
-\r
-        StrList = malloc (sizeof (STRING_LIST));\r
-        if (StrList == NULL) {\r
-          Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-          return STATUS_ERROR;\r
-        }\r
-\r
-        memset ((char *) StrList, 0, sizeof (STRING_LIST));\r
-        StrList->Str            = Argv[1];\r
-        StrList->Next           = gOptions.ExcludeSubDirs;\r
-        gOptions.ExcludeSubDirs = StrList;\r
-        Argc--;\r
-        Argv++;\r
-        break;\r
-\r
-      //\r
-      // -e  exclude by filename extension option\r
-      //\r
-      case 'e':\r
-      case 'E':\r
-        //\r
-        // Check for another arg\r
-        //\r
-        if (Argc < 2) {\r
-          Error (NULL, 0, 0, Argv[0], "missing argument with option");\r
-          Usage ();\r
-          return STATUS_ERROR;\r
-        }\r
-\r
-        StrList = malloc (sizeof (STRING_LIST));\r
-        if (StrList == NULL) {\r
-          Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-          return STATUS_ERROR;\r
-        }\r
-\r
-        memset ((char *) StrList, 0, sizeof (STRING_LIST));\r
-        //\r
-        // Let them put a * in front of the filename extension\r
-        //\r
-        StrList->Str = Argv[1];\r
-        if (StrList->Str[0] == '*') {\r
-          StrList->Str++;\r
-        }\r
-\r
-        StrList->Next               = gOptions.ExcludeExtensions;\r
-        gOptions.ExcludeExtensions  = StrList;\r
-        Argc--;\r
-        Argv++;\r
-        break;\r
-\r
-      //\r
-      // Print guid with matching symbol name for guid definitions found\r
-      //\r
-      case 'x':\r
-      case 'X':\r
-        gOptions.GuidXReference = 1;\r
-        break;\r
-\r
-      //\r
-      // -b   Print the internal database list to a file\r
-      //\r
-      case 'b':\r
-      case 'B':\r
-        //\r
-        // Check for one more arg\r
-        //\r
-        if (Argc < 2) {\r
-          Error (NULL, 0, 0, Argv[0], "must specify file name with option");\r
-          Usage ();\r
-          return STATUS_ERROR;\r
-        }\r
-\r
-        strcpy (gOptions.DatabaseOutputFileName, Argv[1]);\r
-        Argc--;\r
-        Argv++;\r
-        break;\r
-\r
-      default:\r
-        Error (NULL, 0, 0, Argv[0], "invalid option");\r
-        Usage ();\r
-        return STATUS_ERROR;\r
-      }\r
-    } else {\r
-      break;\r
-    }\r
-    //\r
-    // Next arg\r
-    //\r
-    Argc--;\r
-    Argv++;\r
-  }\r
-\r
-  if (Argc > 0) {\r
-    Error (NULL, 0, 0, Argv[0], "invalid argument");\r
-    Usage ();\r
-    return STATUS_ERROR;\r
-  }\r
-  //\r
-  // Have to check signatures, GUIDs, or dump the GUID database.\r
-  //\r
-  if ((!gOptions.CheckGuids) && (!gOptions.CheckSignatures) && (gOptions.DatabaseOutputFileName[0] == 0)) {\r
-    Error (NULL, 0, 0, "nothing to do", "must specify -g, -s, and/or -b");\r
-    Usage ();\r
-    return STATUS_ERROR;\r
-  }\r
-\r
-  return STATUS_SUCCESS;\r
-}\r
-//\r
-// Print usage instructions\r
-//\r
-static\r
-VOID\r
-Usage (\r
-  VOID\r
-  )\r
-{\r
-  int   Index;\r
-  char  *Str[] = {\r
-    "GuidChk - scan files for duplicate GUID or signature definitions",\r
-    "",\r
-    "Usage:  GuidChk {options}\n",\r
-    "  Options: ",\r
-    "    -d dirname     exclude searching of a directory",\r
-    "    -f filename    exclude searching of a file",\r
-    "    -e extension   exclude searching of files by extension",\r
-    "    -p             print all GUIDS found",\r
-    "    -g             check for duplicate guids",\r
-    "    -s             check for duplicate signatures",\r
-    "    -x             print guid+defined symbol name",\r
-    "    -b outfile     write internal GUID+basename list to outfile",\r
-    "    -u dirname     exclude searching all subdirectories of a directory",\r
-    "    -h -?          print this help text",\r
-    " ",\r
-    "   Example: GuidChk -g -u build -d fv -f make.inf -e .pkg",\r
-    "",\r
-    NULL\r
-  };\r
-  for (Index = 0; Str[Index] != NULL; Index++) {\r
-    fprintf (stdout, "%s\n", Str[Index]);\r
-  }\r
-}\r
-//\r
-// Process an entire directory by name\r
-//\r
-static\r
-STATUS\r
-ProcessDirectory (\r
-  INT8          *Path,\r
-  INT8          *DirectoryName\r
-  )\r
-{\r
-  FILE_SEARCH_DATA  FSData;\r
-  char              *FileMask;\r
-  BOOLEAN           Done;\r
-  UINT32            Len;\r
-  BOOLEAN           NoSubdirs;\r
-  STRING_LIST       *SLPtr;\r
-\r
-  //\r
-  // Root directory may be null\r
-  //\r
-  if (DirectoryName != NULL) {\r
-    //\r
-    // printf ("Processing directory: %s\n", DirectoryName);\r
-    //\r
-  }\r
-  //\r
-  // Initialize our file searching\r
-  //\r
-  FileSearchInit (&FSData);\r
-\r
-  //\r
-  // Exclude some directories, files, and extensions\r
-  //\r
-  FileSearchExcludeDirs (&FSData, gOptions.ExcludeDirs);\r
-  FileSearchExcludeExtensions (&FSData, gOptions.ExcludeExtensions);\r
-  FileSearchExcludeFiles (&FSData, gOptions.ExcludeFiles);\r
-  //\r
-  // See if this directory is in the list of directories that they\r
-  // don't want to process subdirectories of\r
-  //\r
-  NoSubdirs = FALSE;\r
-  if (DirectoryName != NULL) {\r
-    for (SLPtr = gOptions.ExcludeSubDirs; SLPtr != NULL; SLPtr = SLPtr->Next) {\r
-      if (stricmp (SLPtr->Str, DirectoryName) == 0) {\r
-        //\r
-        // printf ("not processing subdirectories of %s\n", DirectoryName);\r
-        //\r
-        NoSubdirs = TRUE;\r
-        break;\r
-      }\r
-    }\r
-  }\r
-  //\r
-  // Create a filemask of files to search for. We'll append "\*.*" on the\r
-  // end, so allocate some extra bytes.\r
-  //\r
-  Len = strlen (Path) + 10;\r
-  if (DirectoryName != NULL) {\r
-    Len += strlen (DirectoryName);\r
-  }\r
-\r
-  FileMask = malloc (Len);\r
-  if (FileMask == NULL) {\r
-    Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-    return STATUS_ERROR;\r
-  }\r
-  //\r
-  // Now put it all together\r
-  //\r
-  strcpy (FileMask, Path);\r
-  if ((DirectoryName != NULL) && (strlen (DirectoryName) > 0)) {\r
-    strcat (FileMask, "\\");\r
-    strcat (FileMask, DirectoryName);\r
-  }\r
-\r
-  strcat (FileMask, "\\*.*");\r
-\r
-  //\r
-  // Start file searching for files and directories\r
-  //\r
-  FileSearchStart (&FSData, FileMask, FILE_SEARCH_FILE | FILE_SEARCH_DIR);\r
-\r
-  //\r
-  // Now hack the "\*.*" off the end of the filemask so we can use it to pass\r
-  // the full directory path on recursive calls to process directories.\r
-  //\r
-  FileMask[strlen (FileMask) - 4] = 0;\r
-\r
-  //\r
-  // Loop until no more files\r
-  //\r
-  Done = FALSE;\r
-  while (!Done) {\r
-    //\r
-    // printf ("Found %s...", FSData.FileName);\r
-    //\r
-    if (FSData.FileFlags & FILE_SEARCH_DIR) {\r
-      //\r
-      // printf ("directory\n");\r
-      //\r
-      if (!NoSubdirs) {\r
-        ProcessDirectory (FileMask, FSData.FileName);\r
-      }\r
-    } else if (FSData.FileFlags & FILE_SEARCH_FILE) {\r
-      //\r
-      // printf ("file\n");\r
-      //\r
-      ProcessFile (FileMask, FSData.FileName);\r
-    } else {\r
-      //\r
-      // printf ("unknown\n");\r
-      //\r
-    }\r
-\r
-    if (FileSearchFindNext (&FSData) != STATUS_SUCCESS) {\r
-      Done = TRUE;\r
-    }\r
-  }\r
-  //\r
-  // Free up allocated memory\r
-  //\r
-  free (FileMask);\r
-\r
-  //\r
-  // Free up our file searching\r
-  //\r
-  FileSearchDestroy (&FSData);\r
-\r
-  return STATUS_SUCCESS;\r
-}\r
-//\r
-// Process a single file.\r
-//\r
-static\r
-STATUS\r
-ProcessFile (\r
-  INT8                *DirectoryName,\r
-  INT8                *FileName\r
-  )\r
-{\r
-  STATUS  Status;\r
-  UINT32  FileExtension;\r
-  INT8    FullFileName[MAX_PATH];\r
-\r
-  Status = STATUS_SUCCESS;\r
-\r
-  sprintf (FullFileName, "%s\\%s", DirectoryName, FileName);\r
-  //\r
-  // printf ("Found file: %s\n", FullFileName);\r
-  //\r
-  FileExtension = GetFileExtension (FileName);\r
-\r
-  //\r
-  // Process these for GUID checks\r
-  //\r
-  if (gOptions.CheckGuids) {\r
-    switch (FileExtension) {\r
-    case FILE_EXTENSION_C:\r
-    case FILE_EXTENSION_H:\r
-      Status = ProcessCFileGuids (FullFileName);\r
-      break;\r
-\r
-    case FILE_EXTENSION_PKG:\r
-      Status = ProcessPkgFileGuids (FullFileName);\r
-      break;\r
-\r
-    case FILE_EXTENSION_IA32_INC:\r
-    case FILE_EXTENSION_IA32_ASM:\r
-      Status = ProcessIA32FileGuids (FullFileName);\r
-      break;\r
-\r
-    case FILE_EXTENSION_INF:\r
-      Status = ProcessINFFileGuids (FullFileName);\r
-      break;\r
-\r
-    case FILE_EXTENSION_IA64_INC:\r
-    case FILE_EXTENSION_IA64_ASM:\r
-      Status = ProcessIA64FileGuids (FullFileName);\r
-      break;\r
-\r
-    default:\r
-      //\r
-      // No errors anyway\r
-      //\r
-      Status = STATUS_SUCCESS;\r
-      break;\r
-    }\r
-  }\r
-\r
-  if (gOptions.CheckSignatures) {\r
-    switch (FileExtension) {\r
-    case FILE_EXTENSION_C:\r
-    case FILE_EXTENSION_H:\r
-      Status = ProcessCFileSigs (FullFileName);\r
-      break;\r
-\r
-    default:\r
-      //\r
-      // No errors anyway\r
-      //\r
-      Status = STATUS_SUCCESS;\r
-      break;\r
-    }\r
-  }\r
-\r
-  return Status;\r
-}\r
-//\r
-// Return a code indicating the file name extension.\r
-//\r
-static\r
-UINT32\r
-GetFileExtension (\r
-  INT8        *FileName\r
-  )\r
-{\r
-  INT8  *Extension;\r
-  int   Index;\r
-\r
-  //\r
-  // Look back for a filename extension\r
-  //\r
-  for (Extension = FileName + strlen (FileName) - 1; Extension >= FileName; Extension--) {\r
-    if (*Extension == '.') {\r
-      for (Index = 0; FileTypeTable[Index].Extension != NULL; Index++) {\r
-        if (stricmp (FileTypeTable[Index].Extension, Extension) == 0) {\r
-          return FileTypeTable[Index].ExtensionCode;\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  return FILE_TYPE_UNKNOWN;\r
-}\r
-//\r
-// Process a .pkg file.\r
-//\r
-// Look for FFS_FILEGUID=35b898ca-b6a9-49ce-8c72-904735cc49b7\r
-//\r
-static\r
-STATUS\r
-ProcessPkgFileGuids (\r
-  INT8    *FileName\r
-  )\r
-{\r
-  FILE    *Fptr;\r
-  INT8    Line[MAX_LINE_LEN * 2];\r
-  INT8    *Cptr;\r
-  INT8    *Cptr2;\r
-  UINT32  GuidScan[11];\r
-  UINT64  Guid64;\r
-\r
-  if ((Fptr = fopen (FileName, "r")) == NULL) {\r
-    Error (NULL, 0, 0, FileName, "could not open input file for reading");\r
-    return STATUS_ERROR;\r
-  }\r
-  //\r
-  // Read lines from the file until done\r
-  //\r
-  while (fgets (Line, sizeof (Line), Fptr) != NULL) {\r
-    Cptr = Line;\r
-    Cptr += SkipWhiteSpace (Line);\r
-    if (strncmp (Cptr, "FFS_FILEGUID", 12) == 0) {\r
-      Cptr += 12;\r
-      Cptr += SkipWhiteSpace (Cptr);\r
-      if (*Cptr == '=') {\r
-        Cptr++;\r
-        Cptr += SkipWhiteSpace (Cptr + 1);\r
-        //\r
-        // Blank out dashes on the line.\r
-        //\r
-        for (Cptr2 = Cptr; *Cptr2; Cptr2++) {\r
-          if (*Cptr2 == '-') {\r
-            *Cptr2 = ' ';\r
-          }\r
-        }\r
-\r
-        if (sscanf (\r
-              Cptr,\r
-              "%X %X %X %X %I64X",\r
-              &GuidScan[0],\r
-              &GuidScan[1],\r
-              &GuidScan[2],\r
-              &GuidScan[3],\r
-              &Guid64\r
-              ) == 5) {\r
-          AddPkgGuid (FileName, GuidScan, &Guid64);\r
-        } else {\r
-          DebugMsg (NULL, 0, 0, FileName, "GUID scan failed");\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  fclose (Fptr);\r
-  return STATUS_SUCCESS;\r
-}\r
-//\r
-// Process an IA32 assembly file.\r
-//\r
-// Look for:\r
-// FIND_FD_GUID_VAL equ  01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h, 01h\r
-// PEI_GUID_FileNameGuid_Gmch815  equ  081818181h, 08181h, 08181h, 081h, 081h, 081h, 081h, 081h, 081h, 081h, 081h\r
-//\r
-static\r
-STATUS\r
-ProcessIA32FileGuids (\r
-  INT8    *FileName\r
-  )\r
-{\r
-  FILE    *Fptr;\r
-  INT8    Line[MAX_LINE_LEN];\r
-  INT8    *Cptr;\r
-  INT8    CSave;\r
-  INT8    *CSavePtr;\r
-  UINT32  Len;\r
-  UINT32  GuidData[16];\r
-  UINT32  Index;\r
-\r
-  if ((Fptr = fopen (FileName, "r")) == NULL) {\r
-    Error (NULL, 0, 0, FileName, "could not open input file for reading");\r
-    return STATUS_ERROR;\r
-  }\r
-  //\r
-  // Read lines from the file until done\r
-  //\r
-  while (fgets (Line, sizeof (Line), Fptr) != NULL) {\r
-    Cptr = Line;\r
-    Cptr += SkipWhiteSpace (Line);\r
-    //\r
-    // Look for xxxGUIDyyy equ 01h, 02h, 03h, ...\r
-    //\r
-    Len = ValidSymbolName (Cptr);\r
-    if (Len) {\r
-      //\r
-      // Terminate the line after the symbol name, then look for "guid" in\r
-      // the name.\r
-      //\r
-      CSavePtr  = Cptr + Len;\r
-      CSave     = *CSavePtr;\r
-      *CSavePtr = 0;\r
-      while (*Cptr) {\r
-        if (strnicmp (Cptr, "guid", 4) == 0) {\r
-          break;\r
-        }\r
-\r
-        Cptr++;\r
-      }\r
-      //\r
-      // If we found the string "guid", continue\r
-      //\r
-      if (*Cptr) {\r
-        //\r
-        // Restore the character on the line where we null-terminated the symbol\r
-        //\r
-        *CSavePtr = CSave;\r
-        Cptr      = CSavePtr;\r
-        Len       = SkipWhiteSpace (Cptr);\r
-        //\r
-        // Had to be some white space\r
-        //\r
-        if (Len) {\r
-          Cptr += Len;\r
-          //\r
-          // now look for "equ"\r
-          //\r
-          if (strnicmp (Cptr, "equ", 3) == 0) {\r
-            Cptr += 3;\r
-            Cptr += SkipWhiteSpace (Cptr);\r
-            //\r
-            // Now scan all the data\r
-            //\r
-            for (Index = 0; Index < 16; Index++) {\r
-              if (sscanf (Cptr, "%X", &GuidData[Index]) != 1) {\r
-                break;\r
-              }\r
-              //\r
-              // Skip to next\r
-              //\r
-              while (isxdigit (*Cptr)) {\r
-                Cptr++;\r
-              }\r
-\r
-              if ((*Cptr != 'h') && (*Cptr != 'H')) {\r
-                break;\r
-              } else {\r
-                Cptr++;\r
-                while (*Cptr && (isspace (*Cptr) || (*Cptr == ','))) {\r
-                  Cptr++;\r
-                }\r
-              }\r
-            }\r
-            //\r
-            // Now see which form we had\r
-            //\r
-            if (Index == 16) {\r
-              AddGuid16 (FileName, GuidData);\r
-            } else if (Index == 11) {\r
-              AddGuid11 (FileName, GuidData, NULL);\r
-            }\r
-          }\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  fclose (Fptr);\r
-  return STATUS_SUCCESS;\r
-}\r
-//\r
-// Found and parsed an IA32 assembly code guid. Save the 16 bytes off in the list\r
-// of guids.\r
-//\r
-static\r
-STATUS\r
-AddGuid16 (\r
-  INT8      *FileName,\r
-  UINT32    *Data\r
-  )\r
-{\r
-  GUID_RECORD *NewRec;\r
-  int         Index;\r
-\r
-  //\r
-  // Sanity check the data\r
-  //\r
-  if (!CheckGuidData (Data, 16)) {\r
-    return STATUS_ERROR;\r
-  }\r
-  //\r
-  // Allocate memory for a new guid structure\r
-  //\r
-  NewRec = malloc (sizeof (GUID_RECORD));\r
-  if (NewRec == NULL) {\r
-    Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-    return STATUS_ERROR;\r
-  }\r
-\r
-  memset ((char *) NewRec, 0, sizeof (GUID_RECORD));\r
-  NewRec->FileName = malloc (strlen (FileName) + 1);\r
-  if (NewRec->FileName == NULL) {\r
-    free (NewRec);\r
-    Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-    return STATUS_ERROR;\r
-  }\r
-\r
-  strcpy (NewRec->FileName, FileName);\r
-  NewRec->Guid.Data1  = (UINT32) (Data[0] | (Data[1] << 8) | (Data[2] << 16) | (Data[3] << 24));\r
-  NewRec->Guid.Data2  = (UINT16) (Data[4] | (Data[5] << 8));\r
-  NewRec->Guid.Data3  = (UINT16) (Data[6] | (Data[7] << 8));\r
-  for (Index = 0; Index < 8; Index++) {\r
-    NewRec->Guid.Data4[Index] = (UINT8) Data[Index + 8];\r
-  }\r
-  //\r
-  // Add it to the list\r
-  //\r
-  NewRec->Next  = gGuidList;\r
-  gGuidList     = NewRec;\r
-\r
-  //\r
-  // Report it\r
-  // ReportGuid (FileName, NewRec);\r
-  //\r
-  return STATUS_SUCCESS;\r
-}\r
-//\r
-// Add a GUID defined as GuidLow: 0x1122334455667788\r
-//                       GuidHi:  0x99AABBCCDDEEFF00\r
-//\r
-// These are equivalent:\r
-// { 0x11223344, 0x5566, 0x7788, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00 }\r
-//    and:\r
-// Low: 00FFEEDDCCBBAA99\r
-// Hi:  7788556611223344\r
-//\r
-static\r
-STATUS\r
-AddGuid64x2 (\r
-  INT8      *FileName,\r
-  UINT32    DataHH, // Upper 32-bits of upper 64 bits of guid\r
-  UINT32    DataHL, // Lower 32-bits of upper 64 bits\r
-  UINT32    DataLH,\r
-  UINT32    DataLL\r
-  )\r
-{\r
-  GUID_RECORD *NewRec;\r
-  int         Index;\r
-\r
-  //\r
-  // Allocate memory for a new guid structure\r
-  //\r
-  NewRec = malloc (sizeof (GUID_RECORD));\r
-  if (NewRec == NULL) {\r
-    Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-    return STATUS_ERROR;\r
-  }\r
-\r
-  memset ((char *) NewRec, 0, sizeof (GUID_RECORD));\r
-  NewRec->FileName = malloc (strlen (FileName) + 1);\r
-  if (NewRec->FileName == NULL) {\r
-    free (NewRec);\r
-    Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-    return STATUS_ERROR;\r
-  }\r
-\r
-  strcpy (NewRec->FileName, FileName);\r
-  NewRec->Guid.Data1  = DataHL;\r
-  NewRec->Guid.Data2  = (UINT16) DataHH;\r
-  NewRec->Guid.Data3  = (UINT16) (DataHH >> 16);\r
-  for (Index = 0; Index < 4; Index++) {\r
-    NewRec->Guid.Data4[Index] = (UINT8) DataLL;\r
-    DataLL >>= 8;\r
-  }\r
-\r
-  for (Index = 0; Index < 4; Index++) {\r
-    NewRec->Guid.Data4[Index + 4] = (UINT8) DataLH;\r
-    DataLH >>= 8;\r
-  }\r
-  //\r
-  // Add it to the list\r
-  //\r
-  NewRec->Next  = gGuidList;\r
-  gGuidList     = NewRec;\r
-\r
-  //\r
-  // Report it\r
-  // ReportGuid (FileName, NewRec);\r
-  //\r
-  return STATUS_SUCCESS;\r
-}\r
-//\r
-// Process INF files. Look for:\r
-// FILE_GUID            = 240612B6-A063-11d4-9A3A-0090273FC14D\r
-//\r
-static\r
-STATUS\r
-ProcessINFFileGuids (\r
-  INT8    *FileName\r
-  )\r
-{\r
-  FILE    *Fptr;\r
-  INT8    Line[MAX_LINE_LEN * 2];\r
-  INT8    *Cptr;\r
-  INT8    *Cptr2;\r
-  UINT32  GuidScan[11];\r
-  UINT64  Guid64;\r
-\r
-  if ((Fptr = fopen (FileName, "r")) == NULL) {\r
-    Error (NULL, 0, 0, FileName, "could not open input file for reading");\r
-    return STATUS_ERROR;\r
-  }\r
-  //\r
-  // Read lines from the file until done\r
-  //\r
-  while (fgets (Line, sizeof (Line), Fptr) != NULL) {\r
-    Cptr = Line;\r
-    Cptr += SkipWhiteSpace (Line);\r
-    if (strncmp (Cptr, "FILE_GUID", 9) == 0) {\r
-      Cptr += 9;\r
-      Cptr += SkipWhiteSpace (Cptr);\r
-      if (*Cptr == '=') {\r
-        Cptr++;\r
-        Cptr += SkipWhiteSpace (Cptr + 1);\r
-        //\r
-        // Blank out dashes on the line.\r
-        //\r
-        for (Cptr2 = Cptr; *Cptr2; Cptr2++) {\r
-          if (*Cptr2 == '-') {\r
-            *Cptr2 = ' ';\r
-          }\r
-        }\r
-\r
-        if (sscanf (\r
-              Cptr,\r
-              "%X %X %X %X %I64X",\r
-              &GuidScan[0],\r
-              &GuidScan[1],\r
-              &GuidScan[2],\r
-              &GuidScan[3],\r
-              &Guid64\r
-              ) == 5) {\r
-          AddPkgGuid (FileName, GuidScan, &Guid64);\r
-        } else {\r
-          DebugMsg (NULL, 0, 0, FileName, "GUID scan failed");\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  fclose (Fptr);\r
-  return STATUS_SUCCESS;\r
-}\r
-//\r
-// Parse ('g','m','a','p','a','b','c','d')\r
-//\r
-static\r
-STATUS\r
-AddSignature (\r
-  INT8      *FileName,\r
-  INT8      *StrDef,\r
-  UINT32    SigSize\r
-  )\r
-{\r
-  SIGNATURE_RECORD  *NewRec;\r
-  INT8              *Cptr;\r
-  UINT32            Index;\r
-  BOOLEAN           Fail;\r
-\r
-  //\r
-  // Allocate memory for the new record\r
-  //\r
-  Fail    = FALSE;\r
-  NewRec  = malloc (sizeof (SIGNATURE_RECORD));\r
-  if (NewRec == NULL) {\r
-    Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-    return STATUS_ERROR;\r
-  }\r
-  //\r
-  // Allocate memory to save the file name\r
-  //\r
-  NewRec->FileName = malloc (strlen (FileName) + 1);\r
-  if (NewRec->FileName == NULL) {\r
-    Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-    free (NewRec);\r
-    return STATUS_ERROR;\r
-  }\r
-  //\r
-  // Fill in the fields\r
-  //\r
-  strcpy (NewRec->FileName, FileName);\r
-  NewRec->Signature.DataLen = (UINT8) SigSize;\r
-  //\r
-  // Skip to open parenthesis\r
-  //\r
-  Cptr = StrDef;\r
-  Cptr += SkipWhiteSpace (Cptr);\r
-  if (*Cptr != '(') {\r
-    Fail = TRUE;\r
-    goto Done;\r
-  }\r
-\r
-  Cptr++;\r
-  //\r
-  // Skip to first ' and start processing\r
-  //\r
-  while (*Cptr && (*Cptr != '\'')) {\r
-    Cptr++;\r
-  }\r
-\r
-  for (Index = 0; Index < SigSize; Index++) {\r
-    if (*Cptr == '\'') {\r
-      Cptr++;\r
-      NewRec->Signature.Data[Index] = (INT8) *Cptr;\r
-      //\r
-      // Skip to closing quote\r
-      //\r
-      Cptr++;\r
-      if (*Cptr != '\'') {\r
-        Fail = TRUE;\r
-        break;\r
-      }\r
-      //\r
-      // Skip over closing quote, go to next one\r
-      //\r
-      Cptr++;\r
-      while (*Cptr && (*Cptr != '\'')) {\r
-        Cptr++;\r
-      }\r
-    } else {\r
-      Fail = TRUE;\r
-      DebugMsg (NULL, 0, 0, StrDef, "failed to parse signature");\r
-      break;\r
-    }\r
-  }\r
-\r
-Done:\r
-  if (Fail) {\r
-    free (NewRec->FileName);\r
-    free (NewRec);\r
-    return STATUS_ERROR;\r
-  }\r
-\r
-  NewRec->Next    = gSignatureList;\r
-  gSignatureList  = NewRec;\r
-  return STATUS_SUCCESS;\r
-}\r
-//\r
-// Look for:\r
-// #define POOL_HEAD_SIGNATURE         EFI_SIGNATURE_16('p','h')\r
-// #define GCD_MEMORY_MAP_SIGNATURE    EFI_SIGNATURE_32('g','m','a','p')\r
-// #define GCD_MEMORY_MAP_SIGNATURE    EFI_SIGNATURE_64('g','m','a','p','a','b','c','d')\r
-//\r
-static\r
-STATUS\r
-ProcessCFileSigs (\r
-  INT8    *FileName\r
-  )\r
-{\r
-  FILE    *Fptr;\r
-  INT8    Line[MAX_LINE_LEN * 2];\r
-  INT8    *Cptr;\r
-  UINT32  Len;\r
-  UINT32  LineLen;\r
-\r
-  if ((Fptr = fopen (FileName, "r")) == NULL) {\r
-    Error (NULL, 0, 0, FileName, "could not open input file for reading");\r
-    return STATUS_ERROR;\r
-  }\r
-  //\r
-  // Read lines from the file until done\r
-  //\r
-  while (fgets (Line, sizeof (Line), Fptr) != NULL) {\r
-    Cptr = Line;\r
-    Cptr += SkipWhiteSpace (Line);\r
-    //\r
-    // look for #define xxxGUIDxxx value\r
-    //\r
-    if (*Cptr == '#') {\r
-      Cptr++;\r
-      Cptr += SkipWhiteSpace (Cptr);\r
-      //\r
-      // Look for "define"\r
-      //\r
-      if (!strncmp (Cptr, "define", 6)) {\r
-        Cptr += 6;\r
-        //\r
-        // Better be whitespace\r
-        //\r
-        Len = SkipWhiteSpace (Cptr);\r
-        if (Len) {\r
-          Cptr += Len;\r
-          //\r
-          // See if it's a valid symbol name\r
-          //\r
-          Len = ValidSymbolName (Cptr);\r
-          if (Len) {\r
-            //\r
-            // It is a valid symbol name. See if there's a line continuation,\r
-            // and if so, read one more line.\r
-            // Skip over the symbol name and look for the string "EFI_SIGNATURE_xx"\r
-            //\r
-            LineLen = strlen (Line);\r
-            if ((Line[LineLen - 1] == '\n') && (Line[LineLen - 2] == '\\')) {\r
-              fgets (Line + LineLen - 2, sizeof (Line) - LineLen, Fptr);\r
-            } else if (Line[LineLen - 1] == '\\') {\r
-              fgets (Line + LineLen - 1, sizeof (Line) - LineLen, Fptr);\r
-            }\r
-\r
-            Cptr += Len;\r
-            Cptr += SkipWhiteSpace (Cptr);\r
-            if (strncmp (Cptr, "EFI_SIGNATURE_16", 16) == 0) {\r
-              AddSignature (FileName, Cptr + 16, 2);\r
-            } else if (strncmp (Cptr, "EFI_SIGNATURE_32", 16) == 0) {\r
-              AddSignature (FileName, Cptr + 16, 4);\r
-            } else if (strncmp (Cptr, "EFI_SIGNATURE_64", 16) == 0) {\r
-              AddSignature (FileName, Cptr + 16, 8);\r
-            }\r
-          }\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  fclose (Fptr);\r
-  return STATUS_SUCCESS;\r
-}\r
-//\r
-// look for #define xxxGUIDyyy { 0x...}\r
-// xxx EFI_GUID  GuidName = { 0x... };\r
-//\r
-static\r
-STATUS\r
-ProcessCFileGuids (\r
-  INT8    *FileName\r
-  )\r
-{\r
-  FILE    *Fptr;\r
-  INT8    Line[MAX_LINE_LEN * 2];\r
-  INT8    *Cptr;\r
-  INT8    CSave;\r
-  INT8    *CSavePtr;\r
-  INT8    *TempCptr;\r
-  INT8    *SymName;\r
-  UINT32  Len;\r
-  UINT32  LineLen;\r
-  UINT32  GuidScan[11];\r
-\r
-  if ((Fptr = fopen (FileName, "r")) == NULL) {\r
-    Error (NULL, 0, 0, FileName, "could not open input file for reading");\r
-    return STATUS_ERROR;\r
-  }\r
-  //\r
-  // Read lines from the file until done\r
-  //\r
-  while (fgets (Line, sizeof (Line), Fptr) != NULL) {\r
-    Cptr = Line;\r
-    Cptr += SkipWhiteSpace (Line);\r
-    //\r
-    // look for #define xxxGUIDxxx value\r
-    //\r
-    if (*Cptr == '#') {\r
-      Cptr++;\r
-      Cptr += SkipWhiteSpace (Cptr);\r
-      //\r
-      // Look for "define"\r
-      //\r
-      if (!strncmp (Cptr, "define", 6)) {\r
-        Cptr += 6;\r
-        //\r
-        // Better be whitespace\r
-        //\r
-        Len = SkipWhiteSpace (Cptr);\r
-        if (Len) {\r
-          Cptr += Len;\r
-          //\r
-          // See if it's a valid symbol name\r
-          //\r
-          Len = ValidSymbolName (Cptr);\r
-          if (Len) {\r
-            //\r
-            // It is a valid symbol name. See if there's a line continuation,\r
-            // and if so, read one more line.\r
-            // Then truncate after the symbol name, look for the string "GUID",\r
-            // and continue.\r
-            //\r
-            SymName = Cptr;\r
-            LineLen = strlen (Line);\r
-            if ((Line[LineLen - 1] == '\n') && (Line[LineLen - 2] == '\\')) {\r
-              fgets (Line + LineLen - 2, sizeof (Line) - LineLen, Fptr);\r
-            } else if (Line[LineLen - 1] == '\\') {\r
-              fgets (Line + LineLen - 1, sizeof (Line) - LineLen, Fptr);\r
-            }\r
-\r
-            CSavePtr  = Cptr + Len;\r
-            CSave     = *CSavePtr;\r
-            *CSavePtr = 0;\r
-            while (*Cptr) {\r
-              if (strncmp (Cptr, "GUID", 4) == 0) {\r
-                break;\r
-              }\r
-\r
-              Cptr++;\r
-            }\r
-            //\r
-            // If we didn't run out of string, then we found the GUID string.\r
-            // Now look for { 0x....... }\r
-            //\r
-            if (*Cptr) {\r
-              Cptr      = CSavePtr;\r
-              *CSavePtr = CSave;\r
-              Cptr += SkipWhiteSpace (Cptr);\r
-              if (*Cptr == '{') {\r
-                *Cptr = 0;\r
-                Cptr++;\r
-                //\r
-                // 0x665E3FF6, 0x46CC, 0x11d4, 0x9A, 0x38, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D }\r
-                // If you have one suffixed with "L", then it doesn't work. So hack off 'L' characters\r
-                // in the string.\r
-                //\r
-                for (TempCptr = Cptr; *TempCptr; TempCptr++) {\r
-                  if (*TempCptr == 'L') {\r
-                    if (*(TempCptr + 1) == ',') {\r
-                      *TempCptr       = ',';\r
-                      *(TempCptr + 1) = ' ';\r
-                    }\r
-                  }\r
-                }\r
-\r
-                if (sscanf (\r
-                      Cptr,\r
-                      "%X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X",\r
-                      &GuidScan[0],\r
-                      &GuidScan[1],\r
-                      &GuidScan[2],\r
-                      &GuidScan[3],\r
-                      &GuidScan[4],\r
-                      &GuidScan[5],\r
-                      &GuidScan[6],\r
-                      &GuidScan[7],\r
-                      &GuidScan[8],\r
-                      &GuidScan[9],\r
-                      &GuidScan[10]\r
-                      ) == 11) {\r
-                  AddGuid11 (FileName, GuidScan, SymName);\r
-                }\r
-              }\r
-            }\r
-          }\r
-        }\r
-      }\r
-      //\r
-      // Else look for "static EFI_GUID xxxGUIDxxx = { 0x.... };\r
-      //\r
-    } else if ((CSavePtr = strstr (Line, "EFI_GUID")) != NULL) {\r
-      //\r
-      // Read the next line if line continuation\r
-      //\r
-      LineLen = strlen (Line);\r
-      if ((Line[LineLen - 1] == '\n') && (Line[LineLen - 2] == '\\')) {\r
-        fgets (Line + LineLen - 2, sizeof (Line) - LineLen, Fptr);\r
-      } else if (Line[LineLen - 1] == '\\') {\r
-        fgets (Line + LineLen - 1, sizeof (Line) - LineLen, Fptr);\r
-      }\r
-\r
-      Cptr = CSavePtr + 8;\r
-      Cptr += SkipWhiteSpace (Cptr);\r
-      //\r
-      // Should be variable name next\r
-      //\r
-      Len     = ValidSymbolName (Cptr);\r
-      SymName = Cptr;\r
-      Cptr += Len;\r
-      Cptr += SkipWhiteSpace (Cptr);\r
-      if (*Cptr == '=') {\r
-        Cptr++;\r
-        Cptr += SkipWhiteSpace (Cptr);\r
-        //\r
-        // Should be open-brace next to define guid\r
-        //\r
-        if (*Cptr == '{') {\r
-          Cptr++;\r
-          //\r
-          // 0x665E3FF6, 0x46CC, 0x11d4, 0x9A, 0x38, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D }\r
-          //\r
-          if (sscanf (\r
-                Cptr,\r
-                "%X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X",\r
-                &GuidScan[0],\r
-                &GuidScan[1],\r
-                &GuidScan[2],\r
-                &GuidScan[3],\r
-                &GuidScan[4],\r
-                &GuidScan[5],\r
-                &GuidScan[6],\r
-                &GuidScan[7],\r
-                &GuidScan[8],\r
-                &GuidScan[9],\r
-                &GuidScan[10]\r
-                ) == 11) {\r
-            AddGuid11 (FileName, GuidScan, Cptr);\r
-            //\r
-            // printf ("Found guid: %s", Cptr);\r
-            //\r
-          }\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  fclose (Fptr);\r
-  return STATUS_SUCCESS;\r
-}\r
-//\r
-// Process Intel Itanium(TM) GUID definitions. Look for:\r
-// #define Cs870MemoryTestPEIMGuidL 0x9C2403386E1C8FAA\r
-// #define Cs870MemoryTestPEIMGuidH 0xE89E95C6180342f0\r
-// in either order.\r
-// This function assumes no blank lines between definitions.\r
-//\r
-static\r
-STATUS\r
-ProcessIA64FileGuids (\r
-  INT8    *FileName\r
-  )\r
-{\r
-  FILE    *Fptr;\r
-  INT8    Line[MAX_LINE_LEN];\r
-  UINT32  Guid1H;\r
-  UINT32  Guid1L;\r
-  UINT32  Guid2H;\r
-  UINT32  Guid2L;\r
-  INT8    SymName1[MAX_LINE_LEN];\r
-  INT8    SymName2[MAX_LINE_LEN];\r
-  BOOLEAN Done;\r
-  BOOLEAN LowFirst;\r
-  BOOLEAN FoundLow;\r
-\r
-  if ((Fptr = fopen (FileName, "r")) == NULL) {\r
-    Error (NULL, 0, 0, FileName, "could not open input file for reading");\r
-    return STATUS_ERROR;\r
-  }\r
-\r
-  Done = FALSE;\r
-  if (fgets (Line, sizeof (Line), Fptr) == NULL) {\r
-    Done = 1;\r
-  }\r
-  //\r
-  // Read lines from the file until done. Since the guid definition takes\r
-  // two lines, we read lines in different places to recover gracefully\r
-  // from mismatches. For example, if you thought you found the first half,\r
-  // but the next line had a symbol mismatch, then you have to process the\r
-  // line again in case it's the start of a new definition.\r
-  //\r
-  while (!Done) {\r
-    //\r
-    // Check current line for GUID definition. Assume low define first.\r
-    //\r
-    if (IsIA64GuidLine (Line, &Guid1H, &Guid1L, &FoundLow, SymName1)) {\r
-      //\r
-      // Might have to swap guids later. Save off if we found the LOW first\r
-      //\r
-      if (FoundLow) {\r
-        LowFirst = TRUE;\r
-      } else {\r
-        LowFirst = FALSE;\r
-      }\r
-      //\r
-      // Read the next line and try for the rest of the guid definition\r
-      //\r
-      if (fgets (Line, sizeof (Line), Fptr) == NULL) {\r
-        Done = 1;\r
-      } else {\r
-        if (IsIA64GuidLine (Line, &Guid2H, &Guid2L, &FoundLow, SymName2)) {\r
-          //\r
-          // Found another. If the symbol names match, then save it off.\r
-          //\r
-          if (strcmp (SymName1, SymName2) == 0) {\r
-            //\r
-            // Yea, found one. Save it off.\r
-            //\r
-            if (LowFirst) {\r
-              AddGuid64x2 (FileName, Guid2H, Guid2L, Guid1H, Guid1L);\r
-            } else {\r
-              AddGuid64x2 (FileName, Guid1H, Guid1L, Guid2H, Guid2L);\r
-            }\r
-            //\r
-            // Read the next line for processing\r
-            //\r
-            if (fgets (Line, sizeof (Line), Fptr) == NULL) {\r
-              Done = 1;\r
-            }\r
-          } else {\r
-            //\r
-            // Don't get another line so that we reprocess this line in case it\r
-            // contains the start of a new definition.\r
-            // fprintf (stdout, "Symbol name mismatch: %s: %s != %s\n",\r
-            //    FileName, SymName1, SymName2);\r
-            //\r
-          }\r
-        } else {\r
-          //\r
-          // Second line was not a guid definition. Get the next line from the\r
-          // file.\r
-          //\r
-          if (fgets (Line, sizeof (Line), Fptr) == NULL) {\r
-            Done = 1;\r
-          }\r
-        }\r
-      }\r
-    } else {\r
-      //\r
-      // Not a guid define line. Next.\r
-      //\r
-      if (fgets (Line, sizeof (Line), Fptr) == NULL) {\r
-        Done = 1;\r
-      }\r
-    }\r
-  }\r
-\r
-  fclose (Fptr);\r
-  return STATUS_SUCCESS;\r
-}\r
-//\r
-// Given a line from an Itanium-based assembly file, check the line for a guid\r
-// defininition. One of either:\r
-// #define Cs870MemoryTestPEIMGuidL 0x9C2403386E1C8FAA\r
-// #define Cs870MemoryTestPEIMGuidH 0xE89E95C6180342f0\r
-// Return the defined value as two 32-bit values, and whether it's a high\r
-// or low guid.\r
-//\r
-static\r
-BOOLEAN\r
-IsIA64GuidLine (\r
-  INT8      *Line,\r
-  UINT32    *GuidHigh,\r
-  UINT32    *GuidLow,\r
-  BOOLEAN   *FoundLow,\r
-  INT8      *SymName\r
-  )\r
-{\r
-  INT8    *Cptr;\r
-  INT8    CSave;\r
-  INT8    *CSavePtr;\r
-  INT8    *SymStart;\r
-  UINT32  Len;\r
-\r
-  Cptr = Line;\r
-  Cptr += SkipWhiteSpace (Cptr);\r
-  //\r
-  // look for #define xxxGUID[L|H] 0xHexValue\r
-  //\r
-  if (*Cptr == '#') {\r
-    Cptr++;\r
-    Cptr += SkipWhiteSpace (Cptr);\r
-    //\r
-    // Look for "define"\r
-    //\r
-    if (!strncmp (Cptr, "define", 6)) {\r
-      Cptr += 6;\r
-      //\r
-      // Better be whitespace\r
-      //\r
-      Len = SkipWhiteSpace (Cptr);\r
-      if (Len) {\r
-        Cptr += Len;\r
-        //\r
-        // See if it's a valid symbol name\r
-        //\r
-        Len = ValidSymbolName (Cptr);\r
-        if (Len) {\r
-          //\r
-          // Save the start so we can copy it to their string if later checks are ok\r
-          //\r
-          SymStart = Cptr;\r
-          //\r
-          // It is a valid symbol name, look for the string GuidL or GuidH\r
-          //\r
-          CSavePtr  = Cptr + Len;\r
-          CSave     = *CSavePtr;\r
-          *CSavePtr = 0;\r
-          while (*Cptr) {\r
-            if (strncmp (Cptr, "GuidL", 5) == 0) {\r
-              *FoundLow = 1;\r
-              break;\r
-            } else if (strncmp (Cptr, "GuidH", 5) == 0) {\r
-              *FoundLow = 0;\r
-              break;\r
-            }\r
-\r
-            Cptr++;\r
-          }\r
-          //\r
-          // If we didn't run out of string, then we found the GUID string.\r
-          // Restore the null character we inserted above and continue.\r
-          // Now look for  0x.......\r
-          //\r
-          if (*Cptr) {\r
-            //\r
-            // Return symbol name less the "L" or "H"\r
-            //\r
-            strcpy (SymName, SymStart);\r
-            SymName[strlen (SymName) - 1] = 0;\r
-            Cptr                          = CSavePtr;\r
-            *CSavePtr                     = CSave;\r
-            Cptr += SkipWhiteSpace (Cptr);\r
-            if ((*Cptr == '0') && (*(Cptr + 1) == 'x')) {\r
-              //\r
-              // skip over "0x"\r
-              //\r
-              Cptr += 2;\r
-              //\r
-              // 0x0123456789ABCDEF -- null terminate after 8 characters,\r
-              // scan, replace the character and scan at that point.\r
-              //\r
-              CSave       = *(Cptr + 8);\r
-              *(Cptr + 8) = 0;\r
-              if (sscanf (Cptr, "%X", GuidHigh) == 1) {\r
-                *(Cptr + 8) = CSave;\r
-                if (sscanf (Cptr + 8, "%X", GuidLow) == 1) {\r
-                  return TRUE;\r
-                }\r
-              }\r
-            }\r
-          }\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  return FALSE;\r
-}\r
-//\r
-// Look at the characters in the string and determine if it's a valid\r
-// symbol name. Basically [a-zA-Z_][a-zA-Z_0-9]*\r
-//\r
-static\r
-UINT32\r
-ValidSymbolName (\r
-  INT8    *Name\r
-  )\r
-{\r
-  int Len;\r
-\r
-  Len = 0;\r
-\r
-  //\r
-  // Test first character\r
-  //\r
-  if (((*Name >= 'a') && (*Name <= 'z')) || ((*Name >= 'A') && (*Name <= 'Z')) || (*Name == '_')) {\r
-    Name++;\r
-    Len = 1;\r
-    while (*Name) {\r
-      if (((*Name >= 'a') && (*Name <= 'z')) ||\r
-          ((*Name >= 'A') && (*Name <= 'Z')) ||\r
-          ((*Name >= '0') && (*Name <= '9')) ||\r
-          (*Name == '_')\r
-          ) {\r
-        Name++;\r
-        Len++;\r
-      } else {\r
-        break;\r
-      }\r
-    }\r
-  }\r
-\r
-  return Len;\r
-}\r
-\r
-static\r
-UINT32\r
-SkipWhiteSpace (\r
-  INT8    *Str\r
-  )\r
-{\r
-  UINT32  Len;\r
-  Len = 0;\r
-  while (isspace (*Str) && *Str) {\r
-    Len++;\r
-    Str++;\r
-  }\r
-\r
-  return Len;\r
-}\r
-//\r
-// found FFS_FILEGUID=35b898ca-b6a9-49ce-8c72-904735cc49b7\r
-//\r
-static\r
-STATUS\r
-AddPkgGuid (\r
-  INT8      *FileName,\r
-  UINT32    *Data,\r
-  UINT64    *Data64\r
-  )\r
-{\r
-  GUID_RECORD *NewRec;\r
-  int         Index;\r
-\r
-  //\r
-  // Sanity check the data\r
-  //\r
-  if ((Data[1] | Data[2] | Data[3]) & 0xFFFF0000) {\r
-    Error (NULL, 0, 0, "out of range value for GUID data word(s) [1] - [3]", NULL);\r
-    return STATUS_ERROR;\r
-  }\r
-  //\r
-  // More checks for Data64?\r
-  // Allocate memory for a new one guid structure\r
-  //\r
-  NewRec = malloc (sizeof (GUID_RECORD));\r
-  if (NewRec == NULL) {\r
-    Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-    return STATUS_ERROR;\r
-  }\r
-\r
-  memset ((char *) NewRec, 0, sizeof (GUID_RECORD));\r
-  NewRec->FileName = malloc (strlen (FileName) + 1);\r
-  if (NewRec->FileName == NULL) {\r
-    free (NewRec);\r
-    Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-    return STATUS_ERROR;\r
-  }\r
-\r
-  strcpy (NewRec->FileName, FileName);\r
-  NewRec->Guid.Data1    = Data[0];\r
-  NewRec->Guid.Data2    = (UINT16) Data[1];\r
-  NewRec->Guid.Data3    = (UINT16) Data[2];\r
-  NewRec->Guid.Data4[0] = (UINT8) Data[3];\r
-  NewRec->Guid.Data4[1] = (UINT8) (Data[3] >> 8);\r
-  for (Index = 2; Index < 8; Index++) {\r
-    NewRec->Guid.Data4[Index] = (UINT8) *Data64;\r
-    *Data64 >>= 8;\r
-  }\r
-  //\r
-  // Add it to the list\r
-  //\r
-  NewRec->Next  = gGuidList;\r
-  gGuidList     = NewRec;\r
-\r
-  //\r
-  // Report it\r
-  // ReportGuid (FileName, NewRec);\r
-  //\r
-  return STATUS_SUCCESS;\r
-}\r
-//\r
-// Add a guid consisting of 11 fields to our list of guids\r
-//\r
-static\r
-STATUS\r
-AddGuid11 (\r
-  INT8      *FileName,\r
-  UINT32    *Data,\r
-  INT8      *SymName\r
-  )\r
-{\r
-  GUID_RECORD *NewRec;\r
-  int         Index;\r
-\r
-  //\r
-  // Sanity check the data\r
-  //\r
-  if (!CheckGuidData (Data, 11)) {\r
-    return STATUS_ERROR;\r
-  }\r
-  //\r
-  // Allocate memory for a new one guid structure\r
-  //\r
-  NewRec = malloc (sizeof (GUID_RECORD));\r
-  if (NewRec == NULL) {\r
-    Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-    return STATUS_ERROR;\r
-  }\r
-\r
-  memset ((char *) NewRec, 0, sizeof (GUID_RECORD));\r
-  NewRec->FileName = malloc (strlen (FileName) + 1);\r
-  if (NewRec->FileName == NULL) {\r
-    free (NewRec);\r
-    Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-    return STATUS_ERROR;\r
-  }\r
-\r
-  strcpy (NewRec->FileName, FileName);\r
-  if (SymName != NULL) {\r
-    NewRec->SymName = malloc (strlen (SymName) + 1);\r
-    if (NewRec->SymName == NULL) {\r
-      free (NewRec);\r
-      Error (NULL, 0, 0, "memory allocation failure", NULL);\r
-      return STATUS_ERROR;\r
-    }\r
-  }\r
-\r
-  strcpy (NewRec->SymName, SymName);\r
-\r
-  NewRec->Guid.Data1  = Data[0];\r
-  NewRec->Guid.Data2  = (UINT16) Data[1];\r
-  NewRec->Guid.Data3  = (UINT16) Data[2];\r
-  for (Index = 0; Index < 8; Index++) {\r
-    NewRec->Guid.Data4[Index] = (UINT8) Data[3 + Index];\r
-  }\r
-  //\r
-  // Add it to the list\r
-  //\r
-  NewRec->Next  = gGuidList;\r
-  gGuidList     = NewRec;\r
-\r
-  //\r
-  // Report it\r
-  // ReportGuid (FileName, NewRec);\r
-  //\r
-  return STATUS_SUCCESS;\r
-}\r
-//\r
-// For debug purposes, print each guid found\r
-//\r
-// static\r
-// VOID\r
-// ReportGuid (\r
-//  INT8        *FileName,\r
-// GUID_RECORD *NewGuid\r
-//  )\r
-// {\r
-//  //fprintf (stdout, "%s: 0x%08X\n", FileName, NewGuid->Guid.Data1);\r
-// }\r
-//\r
-// Free up memory we allocated to keep track of guids defined.\r
-//\r
-static\r
-VOID\r
-FreeGuids (\r
-  VOID\r
-  )\r
-{\r
-  GUID_RECORD *NextRec;\r
-  while (gGuidList != NULL) {\r
-    NextRec = gGuidList->Next;\r
-    if (gGuidList->FileName != NULL) {\r
-      free (gGuidList->FileName);\r
-    }\r
-\r
-    if (gGuidList->SymName != NULL) {\r
-      free (gGuidList->SymName);\r
-    }\r
-\r
-    free (gGuidList);\r
-    gGuidList = NextRec;\r
-  }\r
-}\r
-\r
-static\r
-VOID\r
-FreeSigs (\r
-  VOID\r
-  )\r
-{\r
-  SIGNATURE_RECORD  *NextRec;\r
-  while (gSignatureList != NULL) {\r
-    NextRec = gSignatureList->Next;\r
-    if (gSignatureList->FileName != NULL) {\r
-      free (gSignatureList->FileName);\r
-    }\r
-\r
-    free (gSignatureList);\r
-    gSignatureList = NextRec;\r
-  }\r
-}\r
-//\r
-// Scan through all guids defined and compare each for duplicates.\r
-//\r
-static\r
-STATUS\r
-CheckDuplicates (\r
-  VOID\r
-  )\r
-{\r
-  GUID_RECORD       *CurrentFile;\r
-\r
-  GUID_RECORD       *TempFile;\r
-  SIGNATURE_RECORD  *CurrentSig;\r
-  SIGNATURE_RECORD  *TempSig;\r
-  STATUS            Status;\r
-  int               Index;\r
-  int               DupCount;\r
-  int               Len;\r
-  BOOLEAN           Same;\r
-  UINT32            GuidSum;\r
-  INT8              *SymName;\r
-\r
-  Status = STATUS_SUCCESS;\r
-\r
-  //\r
-  // If we're checking guids.....\r
-  //\r
-  if (gOptions.CheckGuids) {\r
-    //\r
-    // If -p option, print all guids found\r
-    //\r
-    if (gOptions.PrintFound) {\r
-      CurrentFile = gGuidList;\r
-      while (CurrentFile != NULL) {\r
-        fprintf (\r
-          stdout,\r
-          "GUID:  0x%08X 0x%04X 0x%04X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X %s\n",\r
-          (UINT32) CurrentFile->Guid.Data1,\r
-          (UINT32) CurrentFile->Guid.Data2,\r
-          (UINT32) CurrentFile->Guid.Data3,\r
-          (UINT32) CurrentFile->Guid.Data4[0],\r
-          (UINT32) CurrentFile->Guid.Data4[1],\r
-          (UINT32) CurrentFile->Guid.Data4[2],\r
-          (UINT32) CurrentFile->Guid.Data4[3],\r
-          (UINT32) CurrentFile->Guid.Data4[4],\r
-          (UINT32) CurrentFile->Guid.Data4[5],\r
-          (UINT32) CurrentFile->Guid.Data4[6],\r
-          (UINT32) CurrentFile->Guid.Data4[7],\r
-          CurrentFile->FileName\r
-          );\r
-        CurrentFile = CurrentFile->Next;\r
-      }\r
-    }\r
-\r
-    if (gOptions.GuidXReference) {\r
-      CurrentFile = gGuidList;\r
-      while (CurrentFile != NULL) {\r
-        //\r
-        // If no symbol name, print "unknown"\r
-        //\r
-        SymName = CurrentFile->SymName;\r
-        if (SymName == NULL) {\r
-          SymName = "unknown";\r
-        }\r
-\r
-        fprintf (\r
-          stdout,\r
-          "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X %s\n",\r
-          (UINT32) CurrentFile->Guid.Data1,\r
-          (UINT32) CurrentFile->Guid.Data2,\r
-          (UINT32) CurrentFile->Guid.Data3,\r
-          (UINT32) CurrentFile->Guid.Data4[0],\r
-          (UINT32) CurrentFile->Guid.Data4[1],\r
-          (UINT32) CurrentFile->Guid.Data4[2],\r
-          (UINT32) CurrentFile->Guid.Data4[3],\r
-          (UINT32) CurrentFile->Guid.Data4[4],\r
-          (UINT32) CurrentFile->Guid.Data4[5],\r
-          (UINT32) CurrentFile->Guid.Data4[6],\r
-          (UINT32) CurrentFile->Guid.Data4[7],\r
-          SymName\r
-          );\r
-        CurrentFile = CurrentFile->Next;\r
-      }\r
-    }\r
-    //\r
-    // Now go through all guids and report duplicates.\r
-    //\r
-    CurrentFile = gGuidList;\r
-    while (CurrentFile != NULL) {\r
-      DupCount  = 0;\r
-      TempFile  = CurrentFile->Next;\r
-      while (TempFile) {\r
-        //\r
-        // Compare the guids\r
-        //\r
-        if ((CurrentFile->Guid.Data1 == TempFile->Guid.Data1) &&\r
-            (CurrentFile->Guid.Data2 == TempFile->Guid.Data2) &&\r
-            (CurrentFile->Guid.Data3 == TempFile->Guid.Data3)\r
-            ) {\r
-          //\r
-          // OR in all the guid bytes so we can ignore NULL-guid definitions.\r
-          //\r
-          GuidSum = CurrentFile->Guid.Data1 | CurrentFile->Guid.Data2 | CurrentFile->Guid.Data3;\r
-          Same    = TRUE;\r
-          for (Index = 0; Index < 8; Index++) {\r
-            GuidSum |= CurrentFile->Guid.Data4[Index];\r
-            if (CurrentFile->Guid.Data4[Index] != TempFile->Guid.Data4[Index]) {\r
-              Same = FALSE;\r
-              break;\r
-            }\r
-          }\r
-          //\r
-          // If they're the same, and the guid was non-zero, print a message.\r
-          //\r
-          if (Same && GuidSum) {\r
-            if (DupCount == 0) {\r
-              Error (NULL, 0, 0, "duplicate GUIDS found", NULL);\r
-              fprintf (stdout, "   FILE1: %s\n", CurrentFile->FileName);\r
-            }\r
-\r
-            DupCount++;\r
-            fprintf (stdout, "   FILE%d: %s\n", DupCount + 1, TempFile->FileName);\r
-            //\r
-            // Flag it as reported so we don't report it again if there's three or more\r
-            //\r
-            TempFile->Reported = TRUE;\r
-          }\r
-        }\r
-        //\r
-        // Next one\r
-        //\r
-        TempFile = TempFile->Next;\r
-      }\r
-      //\r
-      // Print the guid if we found duplicates\r
-      //\r
-      if (DupCount) {\r
-        fprintf (\r
-          stdout,\r
-          "   GUID:  0x%08X 0x%04X 0x%04X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n",\r
-          (UINT32) CurrentFile->Guid.Data1,\r
-          (UINT32) CurrentFile->Guid.Data2,\r
-          (UINT32) CurrentFile->Guid.Data3,\r
-          (UINT32) CurrentFile->Guid.Data4[0],\r
-          (UINT32) CurrentFile->Guid.Data4[1],\r
-          (UINT32) CurrentFile->Guid.Data4[2],\r
-          (UINT32) CurrentFile->Guid.Data4[3],\r
-          (UINT32) CurrentFile->Guid.Data4[4],\r
-          (UINT32) CurrentFile->Guid.Data4[5],\r
-          (UINT32) CurrentFile->Guid.Data4[6],\r
-          (UINT32) CurrentFile->Guid.Data4[7]\r
-          );\r
-        //\r
-        // return STATUS_ERROR;\r
-        //\r
-      }\r
-      //\r
-      // Find the next one that hasn't been reported\r
-      //\r
-      do {\r
-        CurrentFile = CurrentFile->Next;\r
-      } while ((CurrentFile != NULL) && (CurrentFile->Reported));\r
-    }\r
-  }\r
-\r
-  if (gOptions.CheckSignatures) {\r
-    //\r
-    // Print ones found if specified\r
-    //\r
-    if (gOptions.PrintFound) {\r
-      CurrentSig = gSignatureList;\r
-      while (CurrentSig != NULL) {\r
-        Len = CurrentSig->Signature.DataLen;\r
-        for (Index = 0; Index < Len; Index++) {\r
-          fprintf (stdout, "%c", CurrentSig->Signature.Data[Index]);\r
-        }\r
-\r
-        fprintf (stdout, "  %s\n", CurrentSig->FileName);\r
-        CurrentSig = CurrentSig->Next;\r
-      }\r
-    }\r
-\r
-    CurrentSig = gSignatureList;\r
-    while (CurrentSig != NULL) {\r
-      DupCount  = 0;\r
-      TempSig   = CurrentSig->Next;\r
-      Len       = CurrentSig->Signature.DataLen;\r
-      while (TempSig) {\r
-        //\r
-        // Check for same length, then do string compare\r
-        //\r
-        if (Len == TempSig->Signature.DataLen) {\r
-          if (strncmp (CurrentSig->Signature.Data, TempSig->Signature.Data, Len) == 0) {\r
-            //\r
-            // Print header message if first failure for this sig\r
-            //\r
-            if (DupCount == 0) {\r
-              Error (NULL, 0, 0, "duplicate signatures found", NULL);\r
-              fprintf (stdout, "   FILE1: %s\n", CurrentSig->FileName);\r
-            }\r
-\r
-            DupCount++;\r
-            fprintf (stdout, "   FILE%d: %s\n", DupCount + 1, TempSig->FileName);\r
-            TempSig->Reported = TRUE;\r
-          }\r
-        }\r
-\r
-        TempSig = TempSig->Next;\r
-      }\r
-\r
-      if (DupCount) {\r
-        fprintf (stdout, "   SIG:   ");\r
-        for (Index = 0; Index < Len; Index++) {\r
-          fprintf (stdout, "%c", CurrentSig->Signature.Data[Index]);\r
-        }\r
-\r
-        fprintf (stdout, "\n");\r
-      }\r
-      //\r
-      // On to the next one that hasn't been reported\r
-      //\r
-      do {\r
-        CurrentSig = CurrentSig->Next;\r
-      } while ((CurrentSig != NULL) && (CurrentSig->Reported));\r
-    }\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-static\r
-VOID\r
-FreeOptions (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Free up any memory we allocated when processing command-line options.\r
-\r
-Arguments:\r
-  None.\r
-\r
-Returns:\r
-  NA\r
-\r
-Notes:\r
-  We don't free up the ->Str fields because we did not allocate them.\r
-  Instead, we just set the pointer to point to the actual parameter\r
-  from the command line.\r
-\r
---*/\r
-{\r
-  STRING_LIST *Ptr;\r
-  while (gOptions.ExcludeDirs != NULL) {\r
-    Ptr = gOptions.ExcludeDirs->Next;\r
-    //\r
-    // free (gOptions.ExcludeDirs->Str);\r
-    //\r
-    free (gOptions.ExcludeDirs);\r
-    gOptions.ExcludeDirs = Ptr;\r
-  }\r
-\r
-  while (gOptions.ExcludeSubDirs != NULL) {\r
-    Ptr = gOptions.ExcludeSubDirs->Next;\r
-    //\r
-    // free (gOptions.ExcludeSubDirs->Str);\r
-    //\r
-    free (gOptions.ExcludeSubDirs);\r
-    gOptions.ExcludeSubDirs = Ptr;\r
-  }\r
-\r
-  while (gOptions.ExcludeExtensions != NULL) {\r
-    Ptr = gOptions.ExcludeExtensions->Next;\r
-    //\r
-    // free (gOptions.ExcludeExtensions->Str);\r
-    //\r
-    free (gOptions.ExcludeExtensions);\r
-    gOptions.ExcludeExtensions = Ptr;\r
-  }\r
-\r
-  while (gOptions.ExcludeFiles != NULL) {\r
-    Ptr = gOptions.ExcludeFiles->Next;\r
-    //\r
-    // free (gOptions.ExcludeFiles->Str);\r
-    //\r
-    free (gOptions.ExcludeFiles);\r
-    gOptions.ExcludeFiles = Ptr;\r
-  }\r
-}\r
-//\r
-// Given an array of 32-bit data, validate the data for the given number of\r
-// guid data. For example, it might have been scanned as 16 bytes of data, or\r
-// 11 fields of data.\r
-//\r
-static\r
-BOOLEAN\r
-CheckGuidData (\r
-  UINT32    *Data,\r
-  UINT32    DataCount\r
-  )\r
-{\r
-  UINT32  Index;\r
-\r
-  if (DataCount == 16) {\r
-    for (Index = 0; Index < 16; Index++) {\r
-      if (Data[Index] &~0xFF) {\r
-        return FALSE;\r
-      }\r
-    }\r
-\r
-    return TRUE;\r
-  } else if (DataCount == 11) {\r
-    //\r
-    // Data[0] never out of range (32-bit)\r
-    //\r
-    if ((Data[1] | Data[2]) &~0xFFFF) {\r
-      //\r
-      // Error ("Out of range value for GUID data word(s) [1] and/or [2]");\r
-      //\r
-      return FALSE;\r
-    }\r
-\r
-    for (Index = 0; Index < 8; Index++) {\r
-      if (Data[Index + 3] &~0xFF) {\r
-        //\r
-        // Error ("Out of range value for GUID data byte(s) [4] - [11]");\r
-        //\r
-        return FALSE;\r
-      }\r
-    }\r
-\r
-    return TRUE;\r
-  }\r
-\r
-  return FALSE;\r
-}\r