BaseTools: Handle the bytes and str difference
Deal with bytes and str is different, remove the unicode(), correct open file parameter. Using utcfromtimestamp instead of fromtimestamp. Cc: Bob Feng <bob.c.feng@intel.com> Cc: Liming Gao <liming.gao@intel.com> Cc: Yonghong Zhu <yonghong.zhu@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com> Tested-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Bob Feng <bob.c.feng@intel.com>
This commit is contained in:
@ -456,15 +456,22 @@ def RemoveDirectory(Directory, Recursively=False):
|
||||
# @retval False If the file content is the same
|
||||
#
|
||||
def SaveFileOnChange(File, Content, IsBinaryFile=True):
|
||||
if not IsBinaryFile:
|
||||
Content = Content.replace("\n", os.linesep)
|
||||
|
||||
if os.path.exists(File):
|
||||
try:
|
||||
if Content == open(File, "rb").read():
|
||||
return False
|
||||
except:
|
||||
EdkLogger.error(None, FILE_OPEN_FAILURE, ExtraData=File)
|
||||
if IsBinaryFile:
|
||||
try:
|
||||
with open(File, "rb") as f:
|
||||
if Content == f.read():
|
||||
return False
|
||||
except:
|
||||
EdkLogger.error(None, FILE_OPEN_FAILURE, ExtraData=File)
|
||||
else:
|
||||
try:
|
||||
with open(File, "r") as f:
|
||||
if Content == f.read():
|
||||
return False
|
||||
except:
|
||||
EdkLogger.error(None, FILE_OPEN_FAILURE, ExtraData=File)
|
||||
|
||||
DirName = os.path.dirname(File)
|
||||
if not CreateDirectory(DirName):
|
||||
@ -475,12 +482,18 @@ def SaveFileOnChange(File, Content, IsBinaryFile=True):
|
||||
if not os.access(DirName, os.W_OK):
|
||||
EdkLogger.error(None, PERMISSION_FAILURE, "Do not have write permission on directory %s" % DirName)
|
||||
|
||||
try:
|
||||
Fd = open(File, "wb")
|
||||
Fd.write(Content)
|
||||
Fd.close()
|
||||
except IOError as X:
|
||||
EdkLogger.error(None, FILE_CREATE_FAILURE, ExtraData='IOError %s' % X)
|
||||
if IsBinaryFile:
|
||||
try:
|
||||
with open(File, "wb") as Fd:
|
||||
Fd.write(Content)
|
||||
except IOError as X:
|
||||
EdkLogger.error(None, FILE_CREATE_FAILURE, ExtraData='IOError %s' % X)
|
||||
else:
|
||||
try:
|
||||
with open(File, 'w') as Fd:
|
||||
Fd.write(Content)
|
||||
except IOError as X:
|
||||
EdkLogger.error(None, FILE_CREATE_FAILURE, ExtraData='IOError %s' % X)
|
||||
|
||||
return True
|
||||
|
||||
@ -1060,7 +1073,10 @@ def ParseFieldValue (Value):
|
||||
if Value[0] == '"' and Value[-1] == '"':
|
||||
Value = Value[1:-1]
|
||||
try:
|
||||
Value = "'" + uuid.UUID(Value).bytes_le + "'"
|
||||
Value = str(uuid.UUID(Value).bytes_le)
|
||||
if Value.startswith("b'"):
|
||||
Value = Value[2:-1]
|
||||
Value = "'" + Value + "'"
|
||||
except ValueError as Message:
|
||||
raise BadExpression(Message)
|
||||
Value, Size = ParseFieldValue(Value)
|
||||
@ -1536,7 +1552,7 @@ class PeImageClass():
|
||||
ByteArray = array.array('B')
|
||||
ByteArray.fromfile(PeObject, 4)
|
||||
# PE signature should be 'PE\0\0'
|
||||
if ByteArray.tostring() != 'PE\0\0':
|
||||
if ByteArray.tostring() != b'PE\0\0':
|
||||
self.ErrorInfo = self.FileName + ' has no valid PE signature PE00'
|
||||
return
|
||||
|
||||
@ -1752,7 +1768,7 @@ class SkuClass():
|
||||
# @retval Value The integer value that the input represents
|
||||
#
|
||||
def GetIntegerValue(Input):
|
||||
if type(Input) in (int, long):
|
||||
if not isinstance(Input, str):
|
||||
return Input
|
||||
String = Input
|
||||
if String.endswith("U"):
|
||||
|
Reference in New Issue
Block a user