From patchwork Fri Nov 30 22:45:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 152613 Delivered-To: patch@linaro.org Received: by 2002:a2e:299d:0:0:0:0:0 with SMTP id p29-v6csp4212026ljp; Fri, 30 Nov 2018 14:46:01 -0800 (PST) X-Google-Smtp-Source: AFSGD/V/ZnufHZomT9eQPY6MQNrv9JZ6QYIDQhOgea8osQZVh907XCGinxPbyG4F0DPIFYCf7Ai/ X-Received: by 2002:a17:902:780a:: with SMTP id p10mr7597495pll.54.1543617961112; Fri, 30 Nov 2018 14:46:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543617961; cv=none; d=google.com; s=arc-20160816; b=jby/eBJupChjnhRZ5R3YpUfHzkLeDBrzjFoeD6aElLCzlvjnrI2LTuK7zk8vJInkcJ iaps9N+NhvnmYFyyhDlGmHQYuA/zCNYuwbmfAdMj3QBqoDdXDrLgjxiS+WoFcFzIusF/ pcBaePsHjyTm8GoQ3NBsVce4vTRiNO0uA10+WXR7awT4FAylJIJPOTFpu/kKkSLhW5yc uzXZw2HLQtqbTEZ41djB+fGcTjEnbELQ1M4Gu4m4oKgCCXdaloI8d9MN6jZuQ5FPDGPa Y5rJjY16UtqWdJ3kBItniqlJZfEEpu6FDKgvMmCkOyB94Pdlwp21+vPj7bNLeMS3CZOX 2xzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=V3/4i2Ykut4wRMpYY9mb35eE5R8ruXF6WZqi28KVKBM=; b=jXFMmf7bCgwuzwp/jGD7KwKUSvQLSQHj5GVWNGLZ+r1Jaj2tLHJLN9Qjmch++f0LNL khIb1MvAglrbsgqB1Me7fRFE+3VlsEw/ZAO3kmJ01gGhnSriUhP2Y2WoE+oCO+Nwn7nc VWWFRwmwwQmIDrY2Jyt1iaSu++WVhbztmmYtQ2RnKbtaUHbepp648Gmw6NP0F1GYtgqu KIb0KvR8dubfHRs8aZjy11RPHVUIGOzNHbj34by+Hv3r9SbCCasqm4btuOXdTMIx3VF+ LEcP/ezFJCqSCwDo/Q7HpCX8x9WyX+ms2x1ThHhHUOfxN1V8c9W/k0G+9eVR27MXXx45 8LMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=QbOXRFrV; spf=pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from ml01.01.org (ml01.01.org. [2001:19d0:306:5::1]) by mx.google.com with ESMTPS id u25si6075344pgm.532.2018.11.30.14.46.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 30 Nov 2018 14:46:01 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) client-ip=2001:19d0:306:5::1; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=QbOXRFrV; spf=pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 5707121196826; Fri, 30 Nov 2018 14:45:51 -0800 (PST) X-Original-To: edk2-devel@lists.01.org Delivered-To: edk2-devel@lists.01.org Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2a00:1450:4864:20::32b; helo=mail-wm1-x32b.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id F1F3F211963D9 for ; Fri, 30 Nov 2018 14:45:49 -0800 (PST) Received: by mail-wm1-x32b.google.com with SMTP id c126so457262wmh.0 for ; Fri, 30 Nov 2018 14:45:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hu6mjLWNLWlb1ueQGWZH3nKMMHmDlor+nTG8xlhj0TU=; b=QbOXRFrV+VZMOUHu+9gFjntPEwLUqLKSNRjNO71Oxaaxg82fEckOutToR3kalgdbTk UrGPLE6EfAM4l0eu4DuhETpOkjuSLKKnHwcU9bfgh43zHptkrCH7p4vkqN9FPil0Wy9m TPS2qA4Zh49z9ueLVeekavRmIO9gR9CBKdJdk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hu6mjLWNLWlb1ueQGWZH3nKMMHmDlor+nTG8xlhj0TU=; b=m7e3qt2ZuILfTcDasQkopgj19oHiuDs7ddfecS9BI/H7enxEuQZVrvKHJ+EQjAB2mO YsHLpxpljyQgkES1Zy+478vth+jbOnzVsNzBegBlWdM1nT2vDDzpAA5aMQFBjB0zUaQ8 Ppt+6ywKiQ6U//ByxG0fYQFbqoec1Zbatm6+Jb2gK54gWfHQU3NhLWxipQatzJ773g95 G3LCdTHOlpIel9VfZFj05STeudXeXtJN73LlA0VyWtnNdbfj/4DsXV1ecktiwFNY+v0y SmiPWqMXAqMQypFppS1V0dzBrNaTMoA33gNfX/eU1uCoyx1jF9KGn77TldsTpvACeBPs pTpg== X-Gm-Message-State: AA+aEWZTld1tWnftuGwdm6xKbEMfFFfJ29r9+ReZuo6uXji+BoLPYLrJ UBTOhA6aFcK7fVGmFbkmFLwHuC91U/g= X-Received: by 2002:a1c:7e43:: with SMTP id z64mr484079wmc.43.1543617948062; Fri, 30 Nov 2018 14:45:48 -0800 (PST) Received: from harold.home ([2a01:cb1d:112:6f00:d895:e032:7b00:86cd]) by smtp.gmail.com with ESMTPSA id m6sm10561195wrv.24.2018.11.30.14.45.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 30 Nov 2018 14:45:47 -0800 (PST) From: Ard Biesheuvel To: edk2-devel@lists.01.org Date: Fri, 30 Nov 2018 23:45:36 +0100 Message-Id: <20181130224537.18936-6-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181130224537.18936-1-ard.biesheuvel@linaro.org> References: <20181130224537.18936-1-ard.biesheuvel@linaro.org> MIME-Version: 1.0 Subject: [edk2] [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: , Cc: Liming Gao , Jaben Carsey , Laszlo Ersek Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" 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(-) -- 2.19.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel Reviewed-by: Philippe Mathieu-Daudé Reviewed-by: Laszlo Ersek 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