SectionAlign points to section alignment, which support\n\\r
the alignment scope 1~16M. It is specified in same\n\\r
order that the section file is input.\n");\r
+ fprintf (stdout, " --dummy dummyfile\n\\r
+ compare dummpyfile with input_file to decide whether\n\\r
+ need to set PROCESSING_REQUIRED attribute.\n");\r
fprintf (stdout, " -v, --verbose Turn on verbose output with informational messages.\n");\r
fprintf (stdout, " -q, --quiet Disable all messages except key message and fatal error\n");\r
fprintf (stdout, " -d, --debug level Enable debug messages, at input debug level.\n");\r
UINT32 *InputFileAlign;\r
UINT32 InputFileAlignNum;\r
EFI_COMMON_SECTION_HEADER *SectionHeader;\r
+ CHAR8 *DummyFileName;\r
+ FILE *DummyFile;\r
+ UINTN DummyFileSize;\r
+ UINT8 *DummyFileBuffer;\r
+ FILE *InFile;\r
+ UINT8 *InFileBuffer;\r
+ UINTN InFileSize;\r
\r
InputFileAlign = NULL;\r
InputFileAlignNum = 0;\r
SectGuidHeaderLength = 0;\r
VersionSect = NULL;\r
UiSect = NULL;\r
+ DummyFileSize = 0;\r
+ DummyFileName = NULL;\r
+ DummyFile = NULL;\r
+ DummyFileBuffer = NULL;\r
+ InFile = NULL;\r
+ InFileSize = 0;\r
+ InFileBuffer = NULL;\r
\r
SetUtilityName (UTILITY_NAME);\r
\r
argv += 2;\r
continue;\r
}\r
+ if (stricmp (argv[0], "--dummy") == 0) {\r
+ DummyFileName = argv[1];\r
+ if (DummyFileName == NULL) {\r
+ Error (NULL, 0, 1003, "Invalid option value", "Dummy file can't be NULL");\r
+ goto Finish;\r
+ }\r
+ argc -= 2;\r
+ argv += 2;\r
+ continue;\r
+ }\r
\r
if ((stricmp (argv[0], "-r") == 0) || (stricmp (argv[0], "--attributes") == 0)) {\r
if (argv[1] == NULL) {\r
\r
VerboseMsg ("%s tool start.", UTILITY_NAME);\r
\r
+ if (DummyFileName != NULL) {\r
+ //\r
+ // Open file and read contents\r
+ //\r
+ DummyFile = fopen (LongFilePath (DummyFileName), "rb");\r
+ if (DummyFile == NULL) {\r
+ Error (NULL, 0, 0001, "Error opening file", DummyFileName);\r
+ return EFI_ABORTED;\r
+ }\r
+\r
+ fseek (DummyFile, 0, SEEK_END);\r
+ DummyFileSize = ftell (DummyFile);\r
+ fseek (DummyFile, 0, SEEK_SET);\r
+ DummyFileBuffer = (UINT8 *) malloc (DummyFileSize);\r
+ fread(DummyFileBuffer, 1, DummyFileSize, DummyFile);\r
+ fclose(DummyFile);\r
+ DebugMsg (NULL, 0, 9, "Dummy files", "the dummy file name is %s and the size is %u bytes", DummyFileName, (unsigned) DummyFileSize);\r
+\r
+ InFile = fopen(LongFilePath(InputFileName[0]), "rb");\r
+ if (InFile == NULL) {\r
+ Error (NULL, 0, 0001, "Error opening file", InputFileName[0]);\r
+ return EFI_ABORTED;\r
+ }\r
+\r
+ fseek (InFile, 0, SEEK_END);\r
+ InFileSize = ftell (InFile);\r
+ fseek (InFile, 0, SEEK_SET);\r
+ InFileBuffer = (UINT8 *) malloc (InFileSize);\r
+ fread(InFileBuffer, 1, InFileSize, InFile);\r
+ fclose(InFile);\r
+ DebugMsg (NULL, 0, 9, "Input files", "the input file name is %s and the size is %u bytes", InputFileName[0], (unsigned) InFileSize);\r
+ if (InFileSize > DummyFileSize){\r
+ if (stricmp(DummyFileBuffer, InFileBuffer + (InFileSize - DummyFileSize)) == 0){\r
+ SectGuidHeaderLength = InFileSize - DummyFileSize;\r
+ }\r
+ }\r
+ if (SectGuidHeaderLength == 0) {\r
+ SectGuidAttribute |= EFI_GUIDED_SECTION_PROCESSING_REQUIRED;\r
+ }\r
+ if (DummyFileBuffer != NULL) {\r
+ free (DummyFileBuffer);\r
+ }\r
+ if (InFileBuffer != NULL) {\r
+ free (InFileBuffer);\r
+ }\r
+ }\r
+\r
//\r
// Parse all command line parameters to get the corresponding section type.\r
//\r