From nobody Mon Dec 23 10:32:22 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1517325632448795.2477752402685; Tue, 30 Jan 2018 07:20:32 -0800 (PST) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id BD24A22364893; Tue, 30 Jan 2018 07:14:55 -0800 (PST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id EA2F822364886 for ; Tue, 30 Jan 2018 07:14:52 -0800 (PST) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Jan 2018 07:20:27 -0800 Received: from shwdeopenpsi168.ccr.corp.intel.com ([10.239.158.129]) by FMSMGA003.fm.intel.com with ESMTP; 30 Jan 2018 07:20:27 -0800 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.151; helo=mga17.intel.com; envelope-from=yonghong.zhu@intel.com; receiver=edk2-devel@lists.01.org X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,435,1511856000"; d="scan'208";a="23608062" From: Yonghong Zhu To: edk2-devel@lists.01.org Date: Tue, 30 Jan 2018 23:20:26 +0800 Message-Id: <1517325626-10712-1-git-send-email-yonghong.zhu@intel.com> X-Mailer: git-send-email 2.6.1.windows.1 Subject: [edk2] [Patch] BaseTools: Update BPDG to support L'' and '' format as VPD Pcd Value X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Current Pcd value support flexible format, this patch add support for BPDG Tool to support L'' and '' format. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Yonghong Zhu Reviewed-by: Liming Gao --- BaseTools/Source/Python/BPDG/GenVpd.py | 32 ++++++++++++++++++------------= -- BaseTools/Source/Python/Common/Misc.py | 6 +++--- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/BaseTools/Source/Python/BPDG/GenVpd.py b/BaseTools/Source/Pyth= on/BPDG/GenVpd.py index 9861e7d..612400d 100644 --- a/BaseTools/Source/Python/BPDG/GenVpd.py +++ b/BaseTools/Source/Python/BPDG/GenVpd.py @@ -59,11 +59,11 @@ class PcdEntry: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid PCD format(Name: %s File: %s Line: %s= ), no PcdSize specified!" % (self.PcdCName, self.FileName, self.Lineno)) =20 self._GenOffsetValue () =20 - ## Analyze the string value to judge the PCD's datum type euqal to Boo= lean or not. + ## Analyze the string value to judge the PCD's datum type equal to Boo= lean or not. #=20 # @param ValueString PCD's value # @param Size PCD's size # =20 # @retval True PCD's datum type is Boolean @@ -162,42 +162,45 @@ class PcdEntry: "Invalid size or value for PCD %s to pack(File= : %s Line: %s)." % (self.PcdCName, self.FileName, self.Lineno)) =20 ## Pack VOID* type VPD PCD's value form string to binary type. # # The VOID* type of string divided into 3 sub-type: - # 1: L"String", Unicode type string. - # 2: "String", Ascii type string. + # 1: L"String"/L'String', Unicode type string. + # 2: "String"/'String', Ascii type string. # 3: {bytearray}, only support byte-array. # # @param ValueString The Integer type string for pack. # =20 def _PackPtrValue(self, ValueString, Size): - if ValueString.startswith('L"'): + if ValueString.startswith('L"') or ValueString.startswith("L'"): self._PackUnicode(ValueString, Size) elif ValueString.startswith('{') and ValueString.endswith('}'): self._PackByteArray(ValueString, Size) - elif ValueString.startswith('"') and ValueString.endswith('"'): + elif (ValueString.startswith('"') and ValueString.endswith('"')) o= r (ValueString.startswith("'") and ValueString.endswith("'")): self._PackString(ValueString, Size) else: EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid VOID* type PCD %s value %s (File: %s = Line: %s)" % (self.PcdCName, ValueString, self.FileName, self.Lineno)) =20 ## Pack an Ascii PCD value. # =20 - # An Ascii string for a PCD should be in format as "". + # An Ascii string for a PCD should be in format as ""/''. # =20 def _PackString(self, ValueString, Size): if (Size < 0): EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid parameter Size %s of PCD %s!(File: %s= Line: %s)" % (self.PcdBinSize, self.PcdCName, self.FileName, self.Lineno)) if (ValueString =3D=3D ""): EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invali= d parameter ValueString %s of PCD %s!(File: %s Line: %s)" % (self.PcdUnpack= Value, self.PcdCName, self.FileName, self.Lineno)) - if (len(ValueString) < 2): - EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "For PC= D: %s ,ASCII string %s at least contains two!(File: %s Line: %s)" % (self.P= cdCName, self.PcdUnpackValue, self.FileName, self.Lineno)) + + QuotedFlag =3D True + if ValueString.startswith("'"): + QuotedFlag =3D False =20 ValueString =3D ValueString[1:-1] - if len(ValueString) + 1 > Size: + # No null-terminator in 'string'=20 + if (QuotedFlag and len(ValueString) + 1 > Size) or (not QuotedFlag= and len(ValueString) > Size): EdkLogger.error("BPDG", BuildToolError.RESOURCE_OVERFLOW, "PCD value string %s is exceed to size %d(File= : %s Line: %s)" % (ValueString, Size, self.FileName, self.Lineno)) try: self.PcdValue =3D pack('%ds' % Size, ValueString) except: @@ -256,23 +259,24 @@ class PcdEntry: =20 self.PcdValue =3D ReturnArray.tolist() =20 ## Pack a unicode PCD value into byte array. # =20 - # A unicode string for a PCD should be in format as L"". + # A unicode string for a PCD should be in format as L""/L''. # def _PackUnicode(self, UnicodeString, Size): if (Size < 0): EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invali= d parameter Size %s of PCD %s!(File: %s Line: %s)" % \ (self.PcdBinSize, self.PcdCName, self.FileNam= e, self.Lineno)) - if (len(UnicodeString) < 3): - EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "For PC= D: %s ,ASCII string %s at least contains two!(File: %s Line: %s)" % \ - (self.PcdCName, self.PcdUnpackValue, self.File= Name, self.Lineno)) =20 + QuotedFlag =3D True + if UnicodeString.startswith("L'"): + QuotedFlag =3D False=20 UnicodeString =3D UnicodeString[2:-1] =20 - if (len(UnicodeString) + 1) * 2 > Size: + # No null-terminator in L'string' + if (QuotedFlag and (len(UnicodeString) + 1) * 2 > Size) or (not Qu= otedFlag and len(UnicodeString) * 2 > Size): EdkLogger.error("BPDG", BuildToolError.RESOURCE_OVERFLOW, "The size of unicode string %s is too larger f= or size %s(File: %s Line: %s)" % \ (UnicodeString, Size, self.FileName, self.Line= no)) =20 ReturnArray =3D array.array('B') diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Source/Pyth= on/Common/Misc.py index a8ed718..ef52154 100644 --- a/BaseTools/Source/Python/Common/Misc.py +++ b/BaseTools/Source/Python/Common/Misc.py @@ -1,9 +1,9 @@ ## @file # Common routines used by all tools # -# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BS= D License # which accompanies this distribution. The full text of the license may b= e found at # http://opensource.org/licenses/bsd-license.php # @@ -1816,14 +1816,14 @@ def AnalyzeVpdPcdData(Setting): # def CheckPcdDatum(Type, Value): if Type =3D=3D "VOID*": ValueRe =3D re.compile(r'\s*L?\".*\"\s*$') if not (((Value.startswith('L"') or Value.startswith('"')) and Val= ue.endswith('"')) - or (Value.startswith('{') and Value.endswith('}')) + or (Value.startswith('{') and Value.endswith('}')) or (Val= ue.startswith("L'") or Value.startswith("'") and Value.endswith("'")) ): return False, "Invalid value [%s] of type [%s]; must be in the= form of {...} for array"\ - ", or \"...\" for string, or L\"...\" for unicod= e string" % (Value, Type) + ", \"...\" or \'...\' for string, L\"...\" or L\= '...\' for unicode string" % (Value, Type) elif ValueRe.match(Value): # Check the chars in UnicodeString or CString is printable if Value.startswith("L"): Value =3D Value[2:-1] else: --=20 2.6.1.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel