1. Free the allocated memory and Close the open file when exit.
authorlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 20 Oct 2009 06:03:40 +0000 (06:03 +0000)
committerlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 20 Oct 2009 06:03:40 +0000 (06:03 +0000)
2. Calculate PI FV header size with PI extension header and extension header entry.

git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1724 7335b38e-4728-0410-8992-fb3ffe349368

Source/C/GenFv/GenFvInternalLib.c

index 92444cd..8d33b25 100644 (file)
@@ -2004,6 +2004,7 @@ Returns:
   // Add PI FV extension header\r
   //\r
   FvExtHeader = NULL;\r
+  FvExtHeaderFile = NULL;\r
   if (mFvDataInfo.FvExtHeaderFile[0] != 0) {\r
     //\r
     // Open the FV Extension Header file\r
@@ -2027,6 +2028,7 @@ Returns:
     // Read the FV Extension Header\r
     //\r
     fread (FvExtHeader, sizeof (UINT8), FileSize, FvExtHeaderFile);\r
+    fclose (FvExtHeaderFile);\r
 \r
     //\r
     // See if there is an override for the FV Name GUID\r
@@ -2324,6 +2326,10 @@ Finish:
   if (FvBufferHeader != NULL) {\r
     free (FvBufferHeader);\r
   }\r
+\r
+  if (FvExtHeader != NULL) {\r
+    free (FvExtHeader);\r
+  }\r
   \r
   if (FvFile != NULL) {\r
     fclose (FvFile);\r
@@ -2427,11 +2433,13 @@ Returns:
   UINTN               Index;\r
   FILE                *fpin;\r
   UINTN               FfsFileSize;\r
+  UINTN               FvExtendHeaderSize;\r
   UINT32              FfsAlignment;\r
   EFI_FFS_FILE_HEADER FfsHeader;\r
   BOOLEAN             VtfFileFlag;\r
   UINTN               VtfFileSize;\r
   \r
+  FvExtendHeaderSize = 0;\r
   VtfFileSize = 0;\r
   VtfFileFlag = FALSE;\r
   fpin  = NULL;\r
@@ -2460,7 +2468,17 @@ Returns:
   //\r
   // Calculate PI extension header\r
   //\r
-  if (CompareGuid (&mFvDataInfo.FvNameGuid, &mZeroGuid) != 0) {\r
+  if (mFvDataInfo.FvExtHeaderFile[0] != '\0') {\r
+    fpin = fopen (mFvDataInfo.FvExtHeaderFile, "rb");\r
+    if (fpin == NULL) {\r
+      Error (NULL, 0, 0001, "Error opening file", mFvDataInfo.FvExtHeaderFile);\r
+      return EFI_ABORTED;\r
+    }\r
+    FvExtendHeaderSize = _filelength (fileno (fpin));\r
+    fclose (fpin);\r
+    CurrentOffset += sizeof (EFI_FFS_FILE_HEADER) + FvExtendHeaderSize;\r
+    CurrentOffset = (CurrentOffset + 7) & (~7);\r
+  } else if (mFvDataInfo.FvNameGuidSet && (CompareGuid (&mFvDataInfo.FvNameGuid, &mZeroGuid) != 0)) {\r
     CurrentOffset += sizeof (EFI_FFS_FILE_HEADER) + sizeof (EFI_FIRMWARE_VOLUME_EXT_HEADER);\r
     CurrentOffset = (CurrentOffset + 7) & (~7);\r
   }\r