Creates output file that is a properly formed section per the PI spec.\r
\r
Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>\r
-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
+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
**/\r
#ifndef __GNUC__\r
STATIC EFI_GUID mEfiCrc32SectionGuid = EFI_CRC32_GUIDED_SECTION_EXTRACTION_PROTOCOL_GUID;\r
\r
STATIC\r
-VOID \r
+VOID\r
Version (\r
VOID\r
)\r
Arguments:\r
\r
None\r
- \r
+\r
Returns:\r
\r
None\r
- \r
---*/ \r
+\r
+--*/\r
{\r
fprintf (stdout, "%s Version %d.%d %s \n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION, __BUILD_VERSION);\r
}\r
// Summary usage\r
//\r
fprintf (stdout, "\nUsage: %s [options] [input_file]\n\n", UTILITY_NAME);\r
- \r
+\r
//\r
// Copyright declaration\r
- // \r
- fprintf (stdout, "Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.\n\n");\r
+ //\r
+ fprintf (stdout, "Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.\n\n");\r
\r
//\r
// Details Option\r
EFI_SECTION_ALL is default section type.\n");\r
fprintf (stdout, " -c [Type], --compress [Type]\n\\r
Compress method type can be PI_NONE or PI_STD.\n\\r
- if -c option is not given, PI_STD is default type.\n"); \r
+ if -c option is not given, PI_STD is default type.\n");\r
fprintf (stdout, " -g GuidValue, --vendor GuidValue\n\\r
GuidValue is one specific vendor guid value.\n\\r
Its format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n");\r
\r
Routine Description:\r
\r
- Write ascii string as unicode string format to FILE \r
+ Write ascii string as unicode string format to FILE\r
\r
Arguments:\r
\r
// End the UniString with a NULL.\r
//\r
*UniString = '\0';\r
-} \r
+}\r
\r
STATUS\r
GenSectionCommonLeafSection (\r
UINT8 **OutFileBuffer\r
)\r
/*++\r
- \r
+\r
Routine Description:\r
- \r
+\r
Generate a leaf section of type other than EFI_SECTION_VERSION\r
and EFI_SECTION_USER_INTERFACE. Input file must be well formed.\r
The function won't validate the input file's contents. For\r
common leaf sections, the input file may be a binary file.\r
The utility will add section header to the file.\r
- \r
+\r
Arguments:\r
- \r
+\r
InputFileName - Name of the input file.\r
- \r
+\r
InputFileNum - Number of input files. Should be 1 for leaf section.\r
\r
SectionType - A valid section type string\r
OutFileBuffer - Buffer pointer to Output file contents\r
\r
Returns:\r
- \r
+\r
STATUS_ERROR - can't continue\r
STATUS_SUCCESS - successful return\r
\r
//\r
Buffer = (UINT8 *) malloc ((size_t) TotalLength);\r
if (Buffer == NULL) {\r
- Error (NULL, 0, 4001, "Resource", "memory cannot be allcoated"); \r
+ Error (NULL, 0, 4001, "Resource", "memory cannot be allcoated");\r
goto Done;\r
}\r
CommonSect = (EFI_COMMON_SECTION_HEADER *) Buffer;\r
memset(CommonSect->Size, 0xff, sizeof(UINT8) * 3);\r
((EFI_COMMON_SECTION_HEADER2 *)CommonSect)->ExtendedSize = TotalLength;\r
}\r
- \r
+\r
//\r
// read data from the input file.\r
//\r
}\r
\r
//\r
- // Set OutFileBuffer \r
+ // Set OutFileBuffer\r
//\r
*OutFileBuffer = Buffer;\r
Status = STATUS_SUCCESS;\r
UINT32 *BufferLength\r
)\r
/*++\r
- \r
+\r
Routine Description:\r
- \r
+\r
Get the contents of all section files specified in InputFileName\r
into FileBuffer.\r
- \r
+\r
Arguments:\r
- \r
+\r
InputFileName - Name of the input file.\r
\r
InputFileAlign - Alignment required by the input file data.\r
\r
FileBuffer - Output buffer to contain data\r
\r
- BufferLength - On input, this is size of the FileBuffer. \r
+ BufferLength - On input, this is size of the FileBuffer.\r
On output, this is the actual length of the data.\r
\r
Returns:\r
- \r
+\r
EFI_SUCCESS on successful return\r
EFI_INVALID_PARAMETER if InputFileNum is less than 1 or BufferLength point is NULL.\r
EFI_ABORTED if unable to open input file.\r
}\r
Size++;\r
}\r
- \r
- // \r
+\r
+ //\r
// Open file and read contents\r
//\r
InFile = fopen (LongFilePath (InputFileName[Index]), "rb");\r
fseek (InFile, 0, SEEK_END);\r
FileSize = ftell (InFile);\r
fseek (InFile, 0, SEEK_SET);\r
- DebugMsg (NULL, 0, 9, "Input files", "the input file name is %s and the size is %u bytes", InputFileName[Index], (unsigned) FileSize); \r
+ DebugMsg (NULL, 0, 9, "Input files", "the input file name is %s and the size is %u bytes", InputFileName[Index], (unsigned) FileSize);\r
//\r
// Adjust section buffer when section alignment is required.\r
//\r
HeaderSize = GuidSectHeader.DataOffset;\r
}\r
}\r
- } \r
+ }\r
\r
fseek (InFile, 0, SEEK_SET);\r
\r
if ((InputFileAlign [Index] != 0) && (((Size + HeaderSize + TeOffset) % InputFileAlign [Index]) != 0)) {\r
Offset = (Size + sizeof (EFI_COMMON_SECTION_HEADER) + HeaderSize + TeOffset + InputFileAlign [Index] - 1) & ~(InputFileAlign [Index] - 1);\r
Offset = Offset - Size - HeaderSize - TeOffset;\r
- \r
+\r
if (FileBuffer != NULL && ((Size + Offset) < *BufferLength)) {\r
//\r
// The maximal alignment is 64K, the raw section size must be less than 0xffffff\r
fclose (InFile);\r
Size += FileSize;\r
}\r
- \r
+\r
//\r
// Set the real required buffer size.\r
//\r
UINT8 **OutFileBuffer\r
)\r
/*++\r
- \r
+\r
Routine Description:\r
- \r
+\r
Generate an encapsulating section of type EFI_SECTION_COMPRESSION\r
Input file must be already sectioned. The function won't validate\r
- the input files' contents. Caller should hand in files already \r
+ the input files' contents. Caller should hand in files already\r
with section header.\r
- \r
+\r
Arguments:\r
- \r
+\r
InputFileName - Name of the input file.\r
\r
InputFileAlign - Alignment required by the input file data.\r
\r
InputFileNum - Number of input files. Should be at least 1.\r
\r
- SectCompSubType - Specify the compression algorithm requested. \r
- \r
+ SectCompSubType - Specify the compression algorithm requested.\r
+\r
OutFileBuffer - Buffer pointer to Output file contents\r
\r
Returns:\r
- \r
+\r
EFI_SUCCESS on successful return\r
EFI_INVALID_PARAMETER if InputFileNum is less than 1\r
EFI_ABORTED if unable to open input file.\r
}\r
}\r
\r
- DebugMsg (NULL, 0, 9, "comprss file size", \r
+ DebugMsg (NULL, 0, 9, "comprss file size",\r
"the original section size is %d bytes and the compressed section size is %u bytes", (unsigned) InputLength, (unsigned) CompressedLength);\r
\r
//if (TotalLength >= MAX_SECTION_SIZE) {\r
CompressionSect2->UncompressedLength = InputLength;\r
} else {\r
CompressionSect = (EFI_COMPRESSION_SECTION *) FileBuffer;\r
- \r
+\r
CompressionSect->CommonHeader.Type = EFI_SECTION_COMPRESSION;\r
CompressionSect->CommonHeader.Size[0] = (UINT8) (TotalLength & 0xff);\r
CompressionSect->CommonHeader.Size[1] = (UINT8) ((TotalLength & 0xff00) >> 8);\r
}\r
\r
//\r
- // Set OutFileBuffer \r
+ // Set OutFileBuffer\r
//\r
*OutFileBuffer = FileBuffer;\r
\r
UINT8 **OutFileBuffer\r
)\r
/*++\r
- \r
+\r
Routine Description:\r
- \r
+\r
Generate an encapsulating section of type EFI_SECTION_GUID_DEFINED\r
Input file must be already sectioned. The function won't validate\r
- the input files' contents. Caller should hand in files already \r
+ the input files' contents. Caller should hand in files already\r
with section header.\r
- \r
+\r
Arguments:\r
- \r
+\r
InputFileName - Name of the input file.\r
- \r
+\r
InputFileAlign - Alignment required by the input file data.\r
\r
InputFileNum - Number of input files. Should be at least 1.\r
\r
VendorGuid - Specify vendor guid value.\r
\r
- DataAttribute - Specify attribute for the vendor guid data. \r
- \r
+ DataAttribute - Specify attribute for the vendor guid data.\r
+\r
DataHeaderSize- Guided Data Header Size\r
- \r
+\r
OutFileBuffer - Buffer pointer to Output file contents\r
\r
Returns:\r
- \r
+\r
EFI_SUCCESS on successful return\r
EFI_INVALID_PARAMETER if InputFileNum is less than 1\r
EFI_ABORTED if unable to open input file.\r
//\r
Crc32Checksum = 0;\r
CalculateCrc32 (FileBuffer + Offset, InputLength, &Crc32Checksum);\r
- \r
+\r
if (TotalLength >= MAX_SECTION_SIZE) {\r
Crc32GuidSect2 = (CRC32_SECTION_HEADER2 *) FileBuffer;\r
Crc32GuidSect2->GuidSectionHeader.CommonHeader.Type = EFI_SECTION_GUID_DEFINED;\r
}\r
}\r
VerboseMsg ("the size of the created section file is %u bytes", (unsigned) TotalLength);\r
- \r
+\r
//\r
- // Set OutFileBuffer \r
+ // Set OutFileBuffer\r
//\r
*OutFileBuffer = FileBuffer;\r
\r
int VersionNumber;\r
UINT8 SectType;\r
UINT8 SectCompSubType;\r
- UINT16 SectGuidAttribute; \r
+ UINT16 SectGuidAttribute;\r
UINT64 SectGuidHeaderLength;\r
EFI_VERSION_SECTION *VersionSect;\r
EFI_USER_INTERFACE_SECTION *UiSect;\r
InFile = NULL;\r
InFileSize = 0;\r
InFileBuffer = NULL;\r
- \r
+\r
SetUtilityName (UTILITY_NAME);\r
- \r
+\r
if (argc == 1) {\r
Error (NULL, 0, 1001, "Missing options", "No options input");\r
Usage ();\r
if ((stricmp (argv[0], "-h") == 0) || (stricmp (argv[0], "--help") == 0)) {\r
Version ();\r
Usage ();\r
- return STATUS_SUCCESS; \r
+ return STATUS_SUCCESS;\r
}\r
\r
if (stricmp (argv[0], "--version") == 0) {\r
Version ();\r
- return STATUS_SUCCESS; \r
+ return STATUS_SUCCESS;\r
}\r
\r
while (argc > 0) {\r
}\r
argc -= 2;\r
argv += 2;\r
- continue; \r
+ continue;\r
}\r
\r
if ((stricmp (argv[0], "-o") == 0) || (stricmp (argv[0], "--outputfile") == 0)) {\r
}\r
argc -= 2;\r
argv += 2;\r
- continue; \r
+ continue;\r
}\r
\r
if ((stricmp (argv[0], "-c") == 0) || (stricmp (argv[0], "--compress") == 0)) {\r
argc -= 2;\r
argv += 2;\r
InputFileAlignNum ++;\r
- continue; \r
+ continue;\r
}\r
\r
//\r
VerboseMsg ("Compress method is %s", mCompressionTypeName [SectCompSubType]);\r
} else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_GUID_DEFINED]) == 0) {\r
SectType = EFI_SECTION_GUID_DEFINED;\r
- \r
+\r
if ((SectGuidAttribute & EFI_GUIDED_SECTION_NONE) != 0) {\r
//\r
// NONE attribute, clear attribute value.\r
//\r
SectGuidAttribute = SectGuidAttribute & ~EFI_GUIDED_SECTION_NONE;\r
}\r
- VerboseMsg ("Vendor Guid is %08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", \r
+ VerboseMsg ("Vendor Guid is %08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",\r
(unsigned) VendorGuid.Data1,\r
VendorGuid.Data2,\r
VendorGuid.Data3,\r
Error (NULL, 0, 1003, "Invalid option value", "SectionType = %s", SectionName);\r
goto Finish;\r
}\r
- \r
+\r
//\r
// GuidValue is only required by Guided section.\r
//\r
(CompareGuid (&VendorGuid, &mZeroGuid) != 0)) {\r
fprintf (stdout, "Warning: the input guid value is not required for this section type %s\n", SectionName);\r
}\r
- \r
+\r
//\r
// Check whether there is input file\r
- // \r
+ //\r
if ((SectType != EFI_SECTION_VERSION) && (SectType != EFI_SECTION_USER_INTERFACE)) {\r
//\r
// The input file are required for other section type.\r
OutFileBuffer,\r
&InputLength\r
);\r
- \r
+\r
if (Status == EFI_BUFFER_TOO_SMALL) {\r
OutFileBuffer = (UINT8 *) malloc (InputLength);\r
if (OutFileBuffer == NULL) {\r
);\r
break;\r
}\r
- \r
+\r
if (Status != EFI_SUCCESS || OutFileBuffer == NULL) {\r
Error (NULL, 0, 2000, "Status is not successful", "Status value is 0x%X", (int) Status);\r
- goto Finish;\r
+ goto Finish;\r
}\r
\r
//\r
InputLength = ((EFI_COMMON_SECTION_HEADER2 *)SectionHeader)->ExtendedSize;\r
}\r
}\r
- \r
+\r
//\r
// Write the output file\r
//\r