From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=209.132.183.28; helo=mx1.redhat.com; envelope-from=lersek@redhat.com; receiver=edk2-devel@lists.01.org Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (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 03E35211982DC for ; Mon, 3 Dec 2018 05:08:06 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 77E41C057E06; Mon, 3 Dec 2018 13:08:06 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-120-61.rdu2.redhat.com [10.10.120.61]) by smtp.corp.redhat.com (Postfix) with ESMTP id C35405B69F; Mon, 3 Dec 2018 13:08:04 +0000 (UTC) To: Ard Biesheuvel , edk2-devel@lists.01.org Cc: Yonghong Zhu , Liming Gao , Bob Feng , Jaben Carsey References: <20181130224537.18936-1-ard.biesheuvel@linaro.org> <20181130224537.18936-6-ard.biesheuvel@linaro.org> From: Laszlo Ersek Message-ID: Date: Mon, 3 Dec 2018 14:08:03 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20181130224537.18936-6-ard.biesheuvel@linaro.org> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Mon, 03 Dec 2018 13:08:06 +0000 (UTC) Subject: Re: [PATCH v2 5/6] BaseTools/CommonLib: get rid of 'native' type string parsing routines X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Dec 2018 13:08:07 -0000 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit On 11/30/18 23:45, Ard Biesheuvel wrote: > Parsing a string into an integer variable of the native word size > is not defined for the BaseTools, since the same tools may be used > to build firmware for different targets with different native word > sizes. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ard Biesheuvel > --- > BaseTools/Source/C/Common/CommonLib.h | 24 --- > BaseTools/Source/C/Common/CommonLib.c | 174 +------------------- > 2 files changed, 5 insertions(+), 193 deletions(-) > > diff --git a/BaseTools/Source/C/Common/CommonLib.h b/BaseTools/Source/C/Common/CommonLib.h > index fa10fac4682a..6930d9227b87 100644 > --- a/BaseTools/Source/C/Common/CommonLib.h > +++ b/BaseTools/Source/C/Common/CommonLib.h > @@ -250,16 +250,6 @@ StrSize ( > CONST CHAR16 *String > ); > > -UINTN > -StrHexToUintn ( > - CONST CHAR16 *String > - ); > - > -UINTN > -StrDecimalToUintn ( > - CONST CHAR16 *String > - ); > - > UINT64 > StrHexToUint64 ( > CONST CHAR16 *String > @@ -277,13 +267,6 @@ StrHexToUint64S ( > UINT64 *Data > ); > > -RETURN_STATUS > -StrHexToUintnS ( > - CONST CHAR16 *String, > - CHAR16 **EndPointer, OPTIONAL > - UINTN *Data > - ); > - > RETURN_STATUS > StrDecimalToUint64S ( > CONST CHAR16 *String, > @@ -291,13 +274,6 @@ StrDecimalToUint64S ( > UINT64 *Data > ); > > -RETURN_STATUS > -StrDecimalToUintnS ( > - CONST CHAR16 *String, > - CHAR16 **EndPointer, OPTIONAL > - UINTN *Data > - ); > - > VOID * > ReallocatePool ( > UINTN OldSize, > diff --git a/BaseTools/Source/C/Common/CommonLib.c b/BaseTools/Source/C/Common/CommonLib.c > index 4a28f635f3a8..42dfa821624d 100644 > --- a/BaseTools/Source/C/Common/CommonLib.c > +++ b/BaseTools/Source/C/Common/CommonLib.c > @@ -882,72 +882,6 @@ InternalSafeStringNoStrOverlap ( > return !InternalSafeStringIsOverlap (Str1, Size1 * sizeof(CHAR16), Str2, Size2 * sizeof(CHAR16)); > } > > -RETURN_STATUS > -StrDecimalToUintnS ( > - CONST CHAR16 *String, > - CHAR16 **EndPointer, OPTIONAL > - UINTN *Data > - ) > -{ > - ASSERT (((UINTN) String & BIT0) == 0); > - > - // > - // 1. Neither String nor Data shall be a null pointer. > - // > - SAFE_STRING_CONSTRAINT_CHECK ((String != NULL), RETURN_INVALID_PARAMETER); > - SAFE_STRING_CONSTRAINT_CHECK ((Data != NULL), RETURN_INVALID_PARAMETER); > - > - // > - // 2. The length of String shall not be greater than RSIZE_MAX. > - // > - if (RSIZE_MAX != 0) { > - SAFE_STRING_CONSTRAINT_CHECK ((StrnLenS (String, RSIZE_MAX + 1) <= RSIZE_MAX), RETURN_INVALID_PARAMETER); > - } > - > - if (EndPointer != NULL) { > - *EndPointer = (CHAR16 *) String; > - } > - > - // > - // Ignore the pad spaces (space or tab) > - // > - while ((*String == L' ') || (*String == L'\t')) { > - String++; > - } > - > - // > - // Ignore leading Zeros after the spaces > - // > - while (*String == L'0') { > - String++; > - } > - > - *Data = 0; > - > - while (InternalIsDecimalDigitCharacter (*String)) { > - // > - // If the number represented by String overflows according to the range > - // defined by UINTN, then MAX_UINTN is stored in *Data and > - // RETURN_UNSUPPORTED is returned. > - // > - if (*Data > ((MAX_UINTN - (*String - L'0')) / 10)) { > - *Data = MAX_UINTN; > - if (EndPointer != NULL) { > - *EndPointer = (CHAR16 *) String; > - } > - return RETURN_UNSUPPORTED; > - } > - > - *Data = *Data * 10 + (*String - L'0'); > - String++; > - } > - > - if (EndPointer != NULL) { > - *EndPointer = (CHAR16 *) String; > - } > - return RETURN_SUCCESS; > -} > - > /** > Convert a Null-terminated Unicode decimal string to a value of type UINT64. > > @@ -1064,9 +998,9 @@ StrDecimalToUint64S ( > > /** > Convert a Null-terminated Unicode hexadecimal string to a value of type > - UINTN. > + UINT64. > > - This function outputs a value of type UINTN by interpreting the contents of > + This function outputs a value of type UINT64 by interpreting the contents of > the Unicode string specified by String as a hexadecimal number. The format of > the input Unicode string String is: > > @@ -1091,8 +1025,8 @@ StrDecimalToUint64S ( > > If String has no valid hexadecimal digits in the above format, then 0 is > stored at the location pointed to by Data. > - If the number represented by String exceeds the range defined by UINTN, then > - MAX_UINTN is stored at the location pointed to by Data. > + If the number represented by String exceeds the range defined by UINT64, then > + MAX_UINT64 is stored at the location pointed to by Data. > > If EndPointer is not NULL, a pointer to the character that stopped the scan > is stored at the location pointed to by EndPointer. If String has no valid > @@ -1112,86 +1046,10 @@ StrDecimalToUint64S ( > characters, not including the > Null-terminator. > @retval RETURN_UNSUPPORTED If the number represented by String exceeds > - the range defined by UINTN. > + the range defined by UINT64. > > **/ > RETURN_STATUS > -StrHexToUintnS ( > - CONST CHAR16 *String, > - CHAR16 **EndPointer, OPTIONAL > - UINTN *Data > - ) > -{ > - ASSERT (((UINTN) String & BIT0) == 0); > - > - // > - // 1. Neither String nor Data shall be a null pointer. > - // > - SAFE_STRING_CONSTRAINT_CHECK ((String != NULL), RETURN_INVALID_PARAMETER); > - SAFE_STRING_CONSTRAINT_CHECK ((Data != NULL), RETURN_INVALID_PARAMETER); > - > - // > - // 2. The length of String shall not be greater than RSIZE_MAX. > - // > - if (RSIZE_MAX != 0) { > - SAFE_STRING_CONSTRAINT_CHECK ((StrnLenS (String, RSIZE_MAX + 1) <= RSIZE_MAX), RETURN_INVALID_PARAMETER); > - } > - > - if (EndPointer != NULL) { > - *EndPointer = (CHAR16 *) String; > - } > - > - // > - // Ignore the pad spaces (space or tab) > - // > - while ((*String == L' ') || (*String == L'\t')) { > - String++; > - } > - > - // > - // Ignore leading Zeros after the spaces > - // > - while (*String == L'0') { > - String++; > - } > - > - if (InternalCharToUpper (*String) == L'X') { > - if (*(String - 1) != L'0') { > - *Data = 0; > - return RETURN_SUCCESS; > - } > - // > - // Skip the 'X' > - // > - String++; > - } > - > - *Data = 0; > - > - while (InternalIsHexaDecimalDigitCharacter (*String)) { > - // > - // If the number represented by String overflows according to the range > - // defined by UINTN, then MAX_UINTN is stored in *Data and > - // RETURN_UNSUPPORTED is returned. > - // > - if (*Data > ((MAX_UINTN - InternalHexCharToUintn (*String)) >> 4)) { > - *Data = MAX_UINTN; > - if (EndPointer != NULL) { > - *EndPointer = (CHAR16 *) String; > - } > - return RETURN_UNSUPPORTED; > - } > - > - *Data = (*Data << 4) + InternalHexCharToUintn (*String); > - String++; > - } > - > - if (EndPointer != NULL) { > - *EndPointer = (CHAR16 *) String; > - } > - return RETURN_SUCCESS; > -} > -RETURN_STATUS > StrHexToUint64S ( > CONST CHAR16 *String, > CHAR16 **EndPointer, OPTIONAL > @@ -1291,28 +1149,6 @@ StrHexToUint64 ( > return Result; > } > > -UINTN > -StrDecimalToUintn ( > - CONST CHAR16 *String > - ) > -{ > - UINTN Result; > - > - StrDecimalToUintnS (String, (CHAR16 **) NULL, &Result); > - return Result; > -} > - > -UINTN > -StrHexToUintn ( > - CONST CHAR16 *String > - ) > -{ > - UINTN Result; > - > - StrHexToUintnS (String, (CHAR16 **) NULL, &Result); > - return Result; > -} > - > UINTN > StrSize ( > CONST CHAR16 *String > Reviewed-by: Laszlo Ersek