]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: fix the open file's read and write bugs
authorYunhua Feng <yunhuax.feng@intel.com>
Fri, 27 Jul 2018 08:02:05 +0000 (16:02 +0800)
committerYonghong Zhu <yonghong.zhu@intel.com>
Sat, 13 Oct 2018 01:50:45 +0000 (09:50 +0800)
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
BaseTools/Source/Python/AutoGen/GenMake.py
BaseTools/Source/Python/AutoGen/InfSectionParser.py
BaseTools/Source/Python/BPDG/GenVpd.py
BaseTools/Source/Python/Common/Misc.py
BaseTools/Source/Python/GenFds/FdfParser.py
BaseTools/Source/Python/Trim/Trim.py
BaseTools/Source/Python/build/BuildReport.py

index 75b4e2247af565318ee409f307f48b8c07d68c67..b168a6663d2f266c1cda5baef3031343ddd7cfa4 100644 (file)
@@ -1031,7 +1031,7 @@ cleanlib:
                 CurrentFileDependencyList = DepDb[F]\r
             else:\r
                 try:\r
-                    Fd = open(F.Path, 'r')\r
+                    Fd = open(F.Path, 'rb')\r
                 except BaseException as X:\r
                     EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData=F.Path + "\n\t" + str(X))\r
 \r
@@ -1041,8 +1041,14 @@ cleanlib:
                     continue\r
 \r
                 if FileContent[0] == 0xff or FileContent[0] == 0xfe:\r
-                    FileContent = unicode(FileContent, "utf-16")\r
-                IncludedFileList = gIncludePattern.findall(FileContent)\r
+                    FileContent = str(FileContent, encoding="utf-16")\r
+                    IncludedFileList = gIncludePattern.findall(FileContent)\r
+                else:\r
+                    try:\r
+                        FileContent = str(FileContent, encoding="utf-8")\r
+                        IncludedFileList = gIncludePattern.findall(FileContent)\r
+                    except:\r
+                        continue\r
 \r
                 for Inc in IncludedFileList:\r
                     Inc = Inc.strip()\r
index d98508973841ed61ec9562151dd3cc3d2d5983d7..09e9af3fb49e97e365c2c6ef30cdfee6f193b29a 100644 (file)
@@ -34,7 +34,7 @@ class InfSectionParser():
         SectionData = []\r
 \r
         try:\r
-            FileLinesList = open(self._FilePath, "r", 0).readlines()\r
+            FileLinesList = open(self._FilePath, "r").readlines()\r
         except BaseException:\r
             EdkLogger.error("build", AUTOGEN_ERROR, 'File %s is opened failed.' % self._FilePath)\r
 \r
index 366fac095b69930f160dea0654181b88e509c3a9..bd2c05d7820e51c9a82be2a1748074607d4927f9 100644 (file)
@@ -305,7 +305,7 @@ class GenVPD :
         self.PcdFixedOffsetSizeList  = []\r
         self.PcdUnknownOffsetList    = []\r
         try:\r
-            fInputfile = open(InputFileName, "r", 0)\r
+            fInputfile = open(InputFileName, "r")\r
             try:\r
                 self.FileLinesList = fInputfile.readlines()\r
             except:\r
@@ -650,7 +650,7 @@ class GenVPD :
             EdkLogger.error("BPDG", BuildToolError.FILE_OPEN_FAILURE, "File open failed for %s" % self.VpdFileName, None)\r
 \r
         try :\r
-            fMapFile = open(MapFileName, "w", 0)\r
+            fMapFile = open(MapFileName, "w")\r
         except:\r
             # Open failed\r
             EdkLogger.error("BPDG", BuildToolError.FILE_OPEN_FAILURE, "File open failed for %s" % self.MapFileName, None)\r
index b91f06b19e96e137e243e81e979d040aef19daf6..1d62a8b56b8b55e8646acceed3601e6d45c4b7eb 100644 (file)
@@ -459,8 +459,14 @@ def SaveFileOnChange(File, Content, IsBinaryFile=True):
 \r
     if os.path.exists(File):\r
         try:\r
-            if Content == open(File, "rb").read():\r
-                return False\r
+            if isinstance(Content, bytes):\r
+                with open(File, "rb") as f:\r
+                    if Content == f.read():\r
+                        return False\r
+            else:\r
+                with open(File, "r") as f:\r
+                    if Content == f.read():\r
+                        return False\r
         except:\r
             EdkLogger.error(None, FILE_OPEN_FAILURE, ExtraData=File)\r
 \r
@@ -480,13 +486,19 @@ def SaveFileOnChange(File, Content, IsBinaryFile=True):
                 if not SaveFileToDisk(File, Content):\r
                     EdkLogger.error(None, FILE_CREATE_FAILURE, ExtraData=File)\r
             except:\r
-                Fd = open(File, "wb")\r
-                Fd.write(Content)\r
-                Fd.close()\r
+                if isinstance(Content, bytes):\r
+                    with open(File, "wb") as Fd:\r
+                        Fd.write(Content)\r
+                else:\r
+                    with open(File, "w") as Fd:\r
+                        Fd.write(Content)\r
         else:\r
-            Fd = open(File, "wb")\r
-            Fd.write(Content)\r
-            Fd.close()\r
+            if isinstance(Content, bytes):\r
+                with open(File, "wb") as Fd:\r
+                    Fd.write(Content)\r
+            else:\r
+                with open(File, "w") as Fd:\r
+                    Fd.write(Content)\r
     except IOError as X:\r
         EdkLogger.error(None, FILE_CREATE_FAILURE, ExtraData='IOError %s' % X)\r
 \r
index cbdc893cdf19c41b0968e5fbeaa351fa6500f1e5..ff8ccf21bda5898794c1786238d5c72a76335d07 100644 (file)
@@ -155,7 +155,7 @@ class IncludeFileProfile :
         self.FileName = FileName\r
         self.FileLinesList = []\r
         try:\r
-            fsock = open(FileName, "rb", 0)\r
+            fsock = open(FileName, "r")\r
             try:\r
                 self.FileLinesList = fsock.readlines()\r
                 for index, line in enumerate(self.FileLinesList):\r
@@ -216,7 +216,7 @@ class FileProfile :
     def __init__(self, FileName):\r
         self.FileLinesList = []\r
         try:\r
-            fsock = open(FileName, "rb", 0)\r
+            fsock = open(FileName, "r")\r
             try:\r
                 self.FileLinesList = fsock.readlines()\r
             finally:\r
index 4b3091bec3df2372d4b6f3a46e4529f01e964784..b9ca83d6d89efd771e14785087e2cae60ae44557 100644 (file)
@@ -245,7 +245,7 @@ def TrimPreprocessedFile(Source, Target, ConvertHex, TrimLong):
 \r
     # save to file\r
     try:\r
-        f = open (Target, 'wb')\r
+        f = open (Target, 'w')\r
     except:\r
         EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Target)\r
     f.writelines(NewLines)\r
@@ -562,7 +562,7 @@ def TrimEdkSourceCode(Source, Target):
     CreateDirectory(os.path.dirname(Target))\r
 \r
     try:\r
-        f = open (Source, 'rb')\r
+        f = open (Source, 'r')\r
     except:\r
         EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Source)\r
     # read whole file\r
@@ -581,7 +581,7 @@ def TrimEdkSourceCode(Source, Target):
         return\r
 \r
     try:\r
-        f = open (Target, 'wb')\r
+        f = open (Target, 'w')\r
     except:\r
         EdkLogger.error("Trim", FILE_OPEN_FAILURE, ExtraData=Target)\r
     f.write(NewLines)\r
index 4fe29f124d842d3371de129f0a173f7b6b3978f8..33cc9db7359f336303a3c1a0d5f74dd62729b6ab 100644 (file)
@@ -634,7 +634,7 @@ class ModuleReport(object):
         FwReportFileName = os.path.join(self._BuildDir, "DEBUG", self.ModuleName + ".txt")\r
         if os.path.isfile(FwReportFileName):\r
             try:\r
-                FileContents = open(FwReportFileName).read()\r
+                FileContents = open(FwReportFileName, 'r').read()\r
                 Match = gModuleSizePattern.search(FileContents)\r
                 if Match:\r
                     self.Size = int(Match.group(1))\r