Generate output file when the output file is older than the input file.
authorlgao4 <lgao4@c2973edb-eda0-4c78-bc6a-9341b269661f>
Tue, 9 Mar 2010 08:23:21 +0000 (08:23 +0000)
committerlgao4 <lgao4@c2973edb-eda0-4c78-bc6a-9341b269661f>
Tue, 9 Mar 2010 08:23:21 +0000 (08:23 +0000)
git-svn-id: https://edk2-buildtools.svn.sourceforge.net/svnroot/edk2-buildtools/trunk/BaseTools@1922 c2973edb-eda0-4c78-bc6a-9341b269661f

Source/C/GenFw/GenFw.c

index e4d7f84..e609f93 100644 (file)
@@ -24,6 +24,8 @@ Abstract:
 #ifndef __GNUC__\r
 #include <windows.h>\r
 #include <io.h>\r
+#include <sys/types.h>\r
+#include <sys/stat.h>\r
 #endif\r
 #include <stdio.h>\r
 #include <stdlib.h>\r
@@ -1993,6 +1995,9 @@ Returns:
   FILE                             *ReportFile;\r
   CHAR8                            *ReportFileName;\r
   UINTN                            FileLen;\r
+  time_t                           InputFileTime;\r
+  time_t                           OutputFileTime;\r
+  struct stat                      Stat_Buf;\r
 \r
   SetUtilityName (UTILITY_NAME);\r
 \r
@@ -2038,6 +2043,8 @@ Returns:
   HiiSectionHeader       = NULL;\r
   NewBaseAddress         = 0;\r
   NegativeAddr           = FALSE;\r
+  InputFileTime          = 0;\r
+  OutputFileTime         = 0;\r
 \r
   if (argc == 1) {\r
     Error (NULL, 0, 1001, "Missing options", "No input options.");\r
@@ -2434,6 +2441,14 @@ Returns:
   if (OutImageName != NULL) {\r
     fpOut = fopen (OutImageName, "rb");\r
     if (fpOut != NULL) {\r
+      //\r
+      // Get Output file time stamp\r
+      //\r
+      fstat(fileno (fpOut), &Stat_Buf);\r
+      OutputFileTime = Stat_Buf.st_mtime;\r
+      //\r
+      // Get Output file data\r
+      //\r
       OutputFileLength = _filelength (fileno (fpOut));\r
       OutputFileBuffer = malloc (OutputFileLength);\r
       if (OutputFileBuffer == NULL) {\r
@@ -2460,6 +2475,14 @@ Returns:
     Error (NULL, 0, 0001, "Error opening file", mInImageName);\r
     goto Finish;\r
   }\r
+  //\r
+  // Get Iutput file time stamp\r
+  //\r
+  fstat(fileno (fpIn), &Stat_Buf);\r
+  InputFileTime = Stat_Buf.st_mtime;\r
+  //\r
+  // Get Input file data\r
+  //\r
   InputFileLength = _filelength (fileno (fpIn));\r
   InputFileBuffer = malloc (InputFileLength);\r
   if (InputFileBuffer == NULL) {\r
@@ -3508,7 +3531,10 @@ WriteFile:
       VerboseMsg ("the size of output file is %u bytes", (unsigned) FileLength);\r
     }\r
   } else {\r
-    if ((FileLength != OutputFileLength) || (memcmp (FileBuffer, OutputFileBuffer, FileLength) != 0)) {\r
+    if ((OutputFileTime < InputFileTime) || (FileLength != OutputFileLength) || (memcmp (FileBuffer, OutputFileBuffer, FileLength) != 0)) {\r
+      //\r
+      // Update File when File is changed or File is old.\r
+      //\r
       fpOut = fopen (OutImageName, "wb");\r
       if (fpOut == NULL) {\r
         Error (NULL, 0, 0001, "Error opening output file", OutImageName);\r