# If passed in file does not end with efi, return as is\r
#\r
def PatchEfiFile(self, EfiFile, FileType):\r
+ #\r
+ # If the module does not have any patches, then return path to input file\r
+ # \r
if not self.PatchPcds:\r
return EfiFile\r
+\r
+ #\r
+ # Only patch file if FileType is PE32 or ModuleType is USER_DEFINED\r
+ # \r
if FileType != 'PE32' and self.ModuleType != "USER_DEFINED":\r
return EfiFile\r
+\r
+ #\r
+ # Generate path to patched output file\r
+ #\r
+ Basename = os.path.basename(EfiFile)\r
+ Output = os.path.normpath (os.path.join(self.OutputPath, Basename))\r
+\r
+ #\r
+ # If this file has already been patched, then return the path to the patched file\r
+ #\r
+ if self.PatchedBinFile == Output:\r
+ return Output\r
+\r
+ #\r
+ # If a different file from the same module has already been patched, then generate an error\r
+ # \r
if self.PatchedBinFile:\r
EdkLogger.error("GenFds", GENFDS_ERROR,\r
'Only one binary file can be patched:\n'\r
' a binary file has been patched: %s\n'\r
' current file: %s' % (self.PatchedBinFile, EfiFile),\r
File=self.InfFileName)\r
- Basename = os.path.basename(EfiFile)\r
- Output = os.path.join(self.OutputPath, Basename)\r
+\r
+ #\r
+ # Copy unpatched file contents to output file location to perform patching\r
+ # \r
CopyLongFilePath(EfiFile, Output)\r
+\r
+ #\r
+ # Apply patches to patched output file\r
+ # \r
for Pcd, Value in self.PatchPcds:\r
RetVal, RetStr = PatchBinaryFile(Output, int(Pcd.Offset, 0), Pcd.DatumType, Value, Pcd.MaxDatumSize)\r
if RetVal:\r
EdkLogger.error("GenFds", GENFDS_ERROR, RetStr, File=self.InfFileName)\r
- self.PatchedBinFile = os.path.normpath(EfiFile)\r
+\r
+ #\r
+ # Save the path of the patched output file\r
+ # \r
+ self.PatchedBinFile = Output\r
+\r
+ #\r
+ # Return path to patched output file\r
+ # \r
return Output\r
+\r
## GenFfs() method\r
#\r
# Generate FFS\r