BaseTools: Fix flexible PCD single quote and double quote bugs
1.The " and ' inside the string, must use escape character format
(\", \')
2.'string' and L'string' format in --pcd, it must be double quoted
first.
Some examples that to match --pcd format and DSC format
--pcd DSC format
L"ABC" L"ABC"
"AB\\\"C" "AB\"C"
"AB\\\'C" "AB\'C"
L"\'AB\\\"C\'" L'AB\"C'
"\'AB\\\'C\'" 'AB\'C'
H"{0, L\"AB\\\"B\", \'ab\\\"c\'}" {0, L"AB\"B", 'ab\"c'}
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: Yonghong Zhu <yonghong.zhu@intel.com>
(cherry picked from commit ea927d2f3f
)
This commit is contained in:
committed by
Yonghong Zhu
parent
4347b17b96
commit
9a47d8a3d4
@ -1555,13 +1555,19 @@ class TopLevelMakefile(BuildFile):
|
||||
for index, option in enumerate(GlobalData.gCommand):
|
||||
if "--pcd" == option and GlobalData.gCommand[index+1]:
|
||||
pcdName, pcdValue = GlobalData.gCommand[index+1].split('=')
|
||||
if pcdValue.startswith('H'):
|
||||
pcdValue = 'H' + '"' + pcdValue[1:] + '"'
|
||||
ExtraOption += " --pcd " + pcdName + '=' + pcdValue
|
||||
elif pcdValue.startswith("L'"):
|
||||
ExtraOption += "--pcd " + pcdName + '=' + pcdValue
|
||||
elif pcdValue.startswith('L'):
|
||||
pcdValue = 'L' + '"' + pcdValue[1:] + '"'
|
||||
for Item in GlobalData.BuildOptionPcd:
|
||||
if '.'.join(Item[0:2]) == pcdName:
|
||||
pcdValue = Item[2]
|
||||
if pcdValue.startswith('L') or pcdValue.startswith('"'):
|
||||
pcdValue, Size = ParseFieldValue(pcdValue)
|
||||
NewVal = '{'
|
||||
for S in range(Size):
|
||||
NewVal = NewVal + '0x%02X' % ((pcdValue >> S * 8) & 0xff)
|
||||
NewVal += ','
|
||||
pcdValue = NewVal[:-1] + '}'
|
||||
break
|
||||
if pcdValue.startswith('{'):
|
||||
pcdValue = 'H' + '"' + pcdValue + '"'
|
||||
ExtraOption += " --pcd " + pcdName + '=' + pcdValue
|
||||
else:
|
||||
ExtraOption += " --pcd " + GlobalData.gCommand[index+1]
|
||||
|
Reference in New Issue
Block a user