Fix override feature for the input file.
authorlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Mon, 17 Sep 2007 10:12:20 +0000 (10:12 +0000)
committerlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Mon, 17 Sep 2007 10:12:20 +0000 (10:12 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@734 7335b38e-4728-0410-8992-fb3ffe349368

Source/C/GenFw/GenFw.c

index 3b58c43..c1366ff 100644 (file)
@@ -1218,34 +1218,19 @@ Returns:
 \r
   //\r
   // Open output file and Write image into the output file.\r
-  // if OutImageName == NULL, output data to stdout.\r
   //\r
-  if (OutImageName == NULL) {\r
-    if (ReplaceFlag) {\r
-      fpOut = fopen (InImageName, "wb");\r
-      if (!fpOut) {\r
-        Error (NULL, 0, 0001, "Error opening file", InImageName);\r
-        goto Finish;\r
-      }\r
-    } else {\r
-      Error (NULL, 0, 1001, "Missing option", "output file\n");\r
-      goto Finish;\r
-      // binary stream can't be output to string strem stdout\r
-      // because 0x0A can be auto converted to 0x0D 0x0A.\r
-      // fpOut = stdout;\r
-    }\r
-  } else {\r
+  if (OutImageName != NULL) {\r
     fpOut = fopen (OutImageName, "wb");\r
     if (!fpOut) {\r
       Error (NULL, 0, 0001, "Error opening file", OutImageName);\r
       goto Finish;\r
     }\r
-    if (ReplaceFlag != 0) {\r
-      fpInOut = fopen (InImageName, "wb");\r
-      if (!fpInOut) {\r
-        Error (NULL, 0, 0001, "Error opening file", InImageName);\r
-        goto Finish;\r
-      }\r
+  } else if (!ReplaceFlag) {\r
+    if (OutImageType == DUMP_TE_HEADER) {\r
+      fpOut = stdout;\r
+    } else {\r
+      Error (NULL, 0, 1001, "Missing option", "output file\n");\r
+      goto Finish;\r
     }\r
   }
 \r
@@ -1382,10 +1367,25 @@ Returns:
     //\r
     // Open the output file and write the buffer contents\r
     //\r
-    if (fwrite (FileBuffer, FileLength, 1, fpOut) != 1) {\r
-      Error (NULL, 0, 0002, "Error writing file", OutImageName);\r
-      goto Finish;\r
+    if (fpOut != NULL) {\r
+      if (fwrite (FileBuffer, FileLength, 1, fpOut) != 1) {\r
+        Error (NULL, 0, 0002, "Error writing file", OutImageName);\r
+        goto Finish;\r
+      }\r
+    }\r
+    \r
+    if (ReplaceFlag) {\r
+      fpInOut = fopen (InImageName, "wb");\r
+      if (fpInOut != NULL) {\r
+        Error (NULL, 0, 0001, "Error opening file", InImageName);\r
+        goto Finish;\r
+      }\r
+      if (fwrite (FileBuffer, FileLength, 1, fpInOut) != 1) {\r
+        Error (NULL, 0, 0002, "Error writing file", InImageName);\r
+        goto Finish;\r
+      }\r
     }\r
+      \r
     //\r
     //  Convert Mci.TXT to Mci.bin file successfully\r
     //\r
@@ -1411,7 +1411,17 @@ Returns:
   \r
   fread (FileBuffer, 1, FileLength, fpIn);\r
   fclose (fpIn);\r
\r
+  \r
+  //\r
+  // Replace file\r
+  //\r
+  if (ReplaceFlag) {\r
+    fpInOut = fopen (InImageName, "wb");\r
+    if (!fpInOut) {\r
+      Error (NULL, 0, 0001, "Error opening file", InImageName);\r
+      goto Finish;\r
+    }\r
+  }\r
   //\r
   // Dump TeImage Header into output file.\r
   //\r
@@ -1421,17 +1431,33 @@ Returns:
       Error (NULL, 0, 3000, "Invalid", "TE header signature of file %s is not correct", InImageName);\r
       goto Finish;      \r
     }\r
-    fprintf (fpOut, "Dump of file %s\n\n", InImageName);\r
-    fprintf (fpOut, "TE IMAGE HEADER VALUES\n");\r
-    fprintf (fpOut, "%17X machine\n", TEImageHeader.Machine);\r
-    fprintf (fpOut, "%17X number of sections\n", TEImageHeader.NumberOfSections);\r
-    fprintf (fpOut, "%17X subsystems\n", TEImageHeader.Subsystem);\r
-    fprintf (fpOut, "%17X stripped size\n", TEImageHeader.StrippedSize);\r
-    fprintf (fpOut, "%17X entry point\n", TEImageHeader.AddressOfEntryPoint);\r
-    fprintf (fpOut, "%17X base of code\n", TEImageHeader.BaseOfCode);\r
-    fprintf (fpOut, "%17X image base\n", TEImageHeader.ImageBase);\r
-    fprintf (fpOut, "%17X [%8X] RVA [size] of Base Relocation Directory\n", TEImageHeader.DataDirectory[0].VirtualAddress, TEImageHeader.DataDirectory[0].Size);\r
-    fprintf (fpOut, "%17X [%8X] RVA [size] of Debug Directory\n", TEImageHeader.DataDirectory[1].VirtualAddress, TEImageHeader.DataDirectory[1].Size);\r
+    if (fpInOut != NULL) {\r
+      fprintf (fpInOut, "Dump of file %s\n\n", InImageName);\r
+      fprintf (fpInOut, "TE IMAGE HEADER VALUES\n");\r
+      fprintf (fpInOut, "%17X machine\n", TEImageHeader.Machine);\r
+      fprintf (fpInOut, "%17X number of sections\n", TEImageHeader.NumberOfSections);\r
+      fprintf (fpInOut, "%17X subsystems\n", TEImageHeader.Subsystem);\r
+      fprintf (fpInOut, "%17X stripped size\n", TEImageHeader.StrippedSize);\r
+      fprintf (fpInOut, "%17X entry point\n", TEImageHeader.AddressOfEntryPoint);\r
+      fprintf (fpInOut, "%17X base of code\n", TEImageHeader.BaseOfCode);\r
+      fprintf (fpInOut, "%17X image base\n", TEImageHeader.ImageBase);\r
+      fprintf (fpInOut, "%17X [%8X] RVA [size] of Base Relocation Directory\n", TEImageHeader.DataDirectory[0].VirtualAddress, TEImageHeader.DataDirectory[0].Size);\r
+      fprintf (fpInOut, "%17X [%8X] RVA [size] of Debug Directory\n", TEImageHeader.DataDirectory[1].VirtualAddress, TEImageHeader.DataDirectory[1].Size);\r
+    }\r
+\r
+    if (fpOut != NULL) {\r
+      fprintf (fpOut, "Dump of file %s\n\n", InImageName);\r
+      fprintf (fpOut, "TE IMAGE HEADER VALUES\n");\r
+      fprintf (fpOut, "%17X machine\n", TEImageHeader.Machine);\r
+      fprintf (fpOut, "%17X number of sections\n", TEImageHeader.NumberOfSections);\r
+      fprintf (fpOut, "%17X subsystems\n", TEImageHeader.Subsystem);\r
+      fprintf (fpOut, "%17X stripped size\n", TEImageHeader.StrippedSize);\r
+      fprintf (fpOut, "%17X entry point\n", TEImageHeader.AddressOfEntryPoint);\r
+      fprintf (fpOut, "%17X base of code\n", TEImageHeader.BaseOfCode);\r
+      fprintf (fpOut, "%17X image base\n", TEImageHeader.ImageBase);\r
+      fprintf (fpOut, "%17X [%8X] RVA [size] of Base Relocation Directory\n", TEImageHeader.DataDirectory[0].VirtualAddress, TEImageHeader.DataDirectory[0].Size);\r
+      fprintf (fpOut, "%17X [%8X] RVA [size] of Debug Directory\n", TEImageHeader.DataDirectory[1].VirtualAddress, TEImageHeader.DataDirectory[1].Size);\r
+    }\r
     goto Finish;\r
   }\r
 \r
@@ -1520,7 +1546,9 @@ Returns:
     //\r
     // Output bin data from exe file\r
     //\r
-    fwrite (FileBuffer + PeHdr->OptionalHeader.SizeOfHeaders, 1, FileLength - PeHdr->OptionalHeader.SizeOfHeaders, fpOut);\r
+    if (fpOut != NULL) {\r
+      fwrite (FileBuffer + PeHdr->OptionalHeader.SizeOfHeaders, 1, FileLength - PeHdr->OptionalHeader.SizeOfHeaders, fpOut);\r
+    }\r
     if (fpInOut != NULL) {\r
       fwrite (FileBuffer + PeHdr->OptionalHeader.SizeOfHeaders, 1, FileLength - PeHdr->OptionalHeader.SizeOfHeaders, fpInOut);\r
     }\r
@@ -1535,8 +1563,10 @@ Returns:
     if (EFI_ERROR (Status)) {\r
       goto Finish;\r
     }\r
-\r
-    fwrite (FileBuffer, 1, FileLength, fpOut);\r
+    \r
+    if (fpOut != NULL) {\r
+      fwrite (FileBuffer, 1, FileLength, fpOut);\r
+    }\r
     if (fpInOut != NULL) {\r
       fwrite (FileBuffer, 1, FileLength, fpInOut);\r
     }\r
@@ -1551,8 +1581,10 @@ Returns:
     if (EFI_ERROR (Status)) {\r
       goto Finish;\r
     }\r
-\r
-    fwrite (FileBuffer, 1, FileLength, fpOut);\r
+    \r
+    if (fpOut != NULL) {\r
+      fwrite (FileBuffer, 1, FileLength, fpOut);  \r
+    }\r
     if (fpInOut != NULL) {\r
       fwrite (FileBuffer, 1, FileLength, fpInOut);\r
     }\r
@@ -1583,7 +1615,9 @@ Returns:
         //\r
         // Output Apci data to file\r
         //\r
-        fwrite (FileBuffer + SectionHeader->PointerToRawData, 1, FileLength, fpOut);\r
+        if (fpOut != NULL) {\r
+          fwrite (FileBuffer + SectionHeader->PointerToRawData, 1, FileLength, fpOut);\r
+        }\r
         if (fpInOut != NULL) {\r
           fwrite (FileBuffer + SectionHeader->PointerToRawData, 1, FileLength, fpInOut);\r
         }\r
@@ -1807,19 +1841,23 @@ Returns:
     //\r
     // Update Image to TeImage\r
     //\r
-    fwrite (&TEImageHeader, 1, sizeof (EFI_TE_IMAGE_HEADER), fpOut);\r
-    fwrite (FileBuffer + TEImageHeader.StrippedSize, 1, FileLength - TEImageHeader.StrippedSize, fpOut);\r
-    if (fpInOut != NULL) {\r
+    if (fpOut != NULL) {\r
       fwrite (&TEImageHeader, 1, sizeof (EFI_TE_IMAGE_HEADER), fpOut);\r
       fwrite (FileBuffer + TEImageHeader.StrippedSize, 1, FileLength - TEImageHeader.StrippedSize, fpOut);\r
     }\r
+    if (fpInOut != NULL) {\r
+      fwrite (&TEImageHeader, 1, sizeof (EFI_TE_IMAGE_HEADER), fpInOut);\r
+      fwrite (FileBuffer + TEImageHeader.StrippedSize, 1, FileLength - TEImageHeader.StrippedSize, fpInOut);\r
+    }\r
     goto Finish;\r
   }\r
   \r
   //\r
   // Update Image to EfiImage\r
   //\r
-  fwrite (FileBuffer, 1, FileLength, fpOut);\r
+  if (fpOut != NULL) {\r
+    fwrite (FileBuffer, 1, FileLength, fpOut);\r
+  }\r
   if (fpInOut != NULL) {\r
     fwrite (FileBuffer, 1, FileLength, fpInOut);\r
   }\r