From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.92.23.43]) by mx.groups.io with SMTP id smtpd.web11.4844.1586548960935467017 for ; Fri, 10 Apr 2020 13:02:41 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@outlook.com header.s=selector1 header.b=TX2YnTMS; spf=pass (domain: outlook.com, ip: 40.92.23.43, mailfrom: michael.kubacki@outlook.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IZqekCFTjThYNRcz8ccMgJ5roBFq7F4Wsy0+1kqtVFlMfcfXLrEilludkIuegQ67/RVbPlV759ZB6Y0PajF+qsZfXneEzmBbZbwl24DgOu2noDUanN50ciQdUFlfbqFuPAUCthlt+n62VIEmCbfb+6zq4CWmrAESaZFTAH0DEEDE7B/peDf8Rf/9W90bEDEDH5U27RIJ6S0OMmmETc3GBf/ldCOSRdGNAzAHdEUU2sWxmEH8jofy9hrhqw6fKLSja1EdE7Tx+NpSwxM9zNumk+vj/UaaxnMB881BhJfHtNSVCu1RuGJ4o8TnL18URMMQTzOEg5HWY/hJRFald+gghQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=io6QVcIHx6lmfWiR+YhjrTyqKAPLFXFjFs4PND58wag=; b=CBoKyTDTO3WwQJ4orZO/7Galzmdjm6PyhQTtn77l7k8Ss1wbo1DlKvsRJNtUX+X/2gMZm+eaUC/K2jaZ5mD6bW5U/aeunHmQL3IG1pxEzv0mwa3mzU/oyGCurfayVKOYO2zTEtY/qAfM4PGb8/hGdw5LrjyeM4Ma9N8MHF4AVUqw3h1XbT2PCkSIgVPhvWMxc59/0NGai4zeVvLk44dQ6AD4cWcPRPoZciZHEntsVf6UZXKVlLW1mB3vfimQ/wG4w8YQb5CIc78KrR+gWHZ6j2dLMfZxgfpb5tdEZorK4N7oNPbrK0IbpCbm2XkgRqyqoXXp8GhsU3bpWLnFhuu0oQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=outlook.com; dmarc=pass action=none header.from=outlook.com; dkim=pass header.d=outlook.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=io6QVcIHx6lmfWiR+YhjrTyqKAPLFXFjFs4PND58wag=; b=TX2YnTMSvPPlxtyiWXTbHSWoYk5liNacsF2+4iY7M19yDUSLXVSjgQcwmcqltrANutdJBy5AQDlZClF7AwNlnasyynQ7lzeFo1nXd46+4kNJoOwPTPwHT8kRyiuVIlmILHHdJOh/AzCSg41ObR9waKARbWGNFO0s1LiP9lODDR8TR6hvZf2OIRMeQssIi1ouSG09bUzBAIcDdlLAFHJneCt0k5gp0eNRkJ+cTwE4PANNf60UsHboHz+C8KdQIVb5fRxkl5qIpSTW8VDgB1MmURVd+kqH48a9X7S7lqwYWQl3P9dngND4ISVwewHoliUiyHWQTQEv4g2R17WrPLprpg== Received: from MW2NAM12FT048.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc65::41) by MW2NAM12HT040.eop-nam12.prod.protection.outlook.com (2a01:111:e400:fc65::118) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2921.12; Fri, 10 Apr 2020 20:02:39 +0000 Received: from MWHPR07MB3440.namprd07.prod.outlook.com (2a01:111:e400:fc65::48) by MW2NAM12FT048.mail.protection.outlook.com (2a01:111:e400:fc65::215) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2921.12 via Frontend Transport; Fri, 10 Apr 2020 20:02:39 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:D2363C24E539DF4F6BAB6D6E40915370824AD856C133ED1DCD46282D032A4A80;UpperCasedChecksum:7A83C9C0B43EE36430866ACE5ED33C2D22B8E4D8940203B99FF955E8CD73C014;SizeAsReceived:7889;Count:49 Received: from MWHPR07MB3440.namprd07.prod.outlook.com ([fe80::bcc9:271b:20db:52e3]) by MWHPR07MB3440.namprd07.prod.outlook.com ([fe80::bcc9:271b:20db:52e3%6]) with mapi id 15.20.2900.015; Fri, 10 Apr 2020 20:02:39 +0000 From: "Michael Kubacki" To: devel@edk2.groups.io Cc: Dandan Bi , Hao A Wu , Jian J Wang , Liming Gao , Michael D Kinney , Sean Brogan Subject: [PATCH v2 1/7] MdePkg/BaseLib: Add linked list iteration macros Date: Fri, 10 Apr 2020 13:02:12 -0700 Message-ID: X-Mailer: git-send-email 2.16.3.windows.1 In-Reply-To: <20200410200218.24992-1-michael.kubacki@outlook.com> References: <20200410200218.24992-1-michael.kubacki@outlook.com> X-ClientProxiedBy: MWHPR01CA0033.prod.exchangelabs.com (2603:10b6:300:101::19) To MWHPR07MB3440.namprd07.prod.outlook.com (2603:10b6:301:69::28) Return-Path: michael.kubacki@outlook.com X-Microsoft-Original-Message-ID: <20200410200218.24992-2-michael.kubacki@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (2001:4898:80e8:1:71cb:63a2:e2d4:2255) by MWHPR01CA0033.prod.exchangelabs.com (2603:10b6:300:101::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.15 via Frontend Transport; Fri, 10 Apr 2020 20:02:39 +0000 X-Mailer: git-send-email 2.16.3.windows.1 X-Microsoft-Original-Message-ID: <20200410200218.24992-2-michael.kubacki@outlook.com> X-TMN: [QEb1XloQgcES3vLaPEkuIYXhFfMwTvdveI2WhK2KrW59jIdra6LDjrYUn0PETLyj] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 49 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: cbc7158a-33ee-40dc-4dee-08d7dd8a1f57 X-MS-TrafficTypeDiagnostic: MW2NAM12HT040: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ++EAQ2nS3pBf8GatSq7IwZ13Ibo1PavgFzwQgUAZ/xTUpdygWY3v7gKkAM8RIDZjLUOUqbRq8yyUod4HRC8O6TPGeIv76Z5CPhdBPx4MCoBASM4AjCrPikqTKo/SYIyRtyOMOJEepA7leG4F/uZymRtKU31dltVV3kTaUQIcnyJpeAXlSEz/ZFU8qtliLYhWCNn2M/Rljt6ubTX56MXu5jjIUpBBN02wBrj6XLEniyo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:0;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR07MB3440.namprd07.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:;DIR:OUT;SFP:1901; X-MS-Exchange-AntiSpam-MessageData: xYgzehW+D9cMQD/Y/r53aOunb2luIdqMhX7wgYk22CTm7bzXy5mv0IkCTD+lDPON5io5aDiaWmT4U/cEgc4FJNnVT0qhHeZjXxxIrOnjXv3Eb8VVrJeN/50P+o8w8tw7WCrTctTi+vCeH8TcSoFET0W5xHYMCFnc7AhEC7uc1vXTxFgpabwKokwb1JV0RuobrN/NF8jC7oJ+cv2vfSj4cA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: cbc7158a-33ee-40dc-4dee-08d7dd8a1f57 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Apr 2020 20:02:39.8714 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW2NAM12HT040 Content-Type: text/plain From: Michael Kubacki REF:https://bugzilla.tianocore.org/show_bug.cgi?id=1959 The macros EFI_LIST_FOR_EACH and EFI_LIST_FOR_EACH_SAFE have been duplicated across several drivers. These macros have proven useful and established a commonly used pattern for linked list iteration. This change defines the macros in BaseLib.h alongside other generic linked list macros and functions. Cc: Dandan Bi Cc: Hao A Wu Cc: Jian J Wang Cc: Liming Gao Cc: Michael D Kinney Cc: Sean Brogan Signed-off-by: Michael Kubacki Reviewed-by: Guomin Jiang --- MdePkg/Include/Library/BaseLib.h | 27 ++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/BaseLib.h index ecadff8b235e..d066f1be2495 100644 --- a/MdePkg/Include/Library/BaseLib.h +++ b/MdePkg/Include/Library/BaseLib.h @@ -4,6 +4,7 @@ Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
+Copyright (c) Microsoft Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -2972,6 +2973,32 @@ PathCleanUpDirectories( **/ #define INITIALIZE_LIST_HEAD_VARIABLE(ListHead) {&(ListHead), &(ListHead)} +/** + Iterates over each node in a doubly linked list using each node's forward link. + + @param Entry A pointer to a list node used as a loop cursor during iteration + @param ListHead The head node of the doubly linked list + +**/ +#define BASE_LIST_FOR_EACH(Entry, ListHead) \ + for(Entry = (ListHead)->ForwardLink; Entry != (ListHead); Entry = Entry->ForwardLink) + +/** + Iterates over each node in a doubly linked list using each node's forward link + with safety against node removal. + + This macro uses NextEntry to temporarily store the next list node so the node + pointed to by Entry may be deleted in the current loop iteration step and + iteration can continue from the node pointed to by NextEntry. + + @param Entry A pointer to a list node used as a loop cursor during iteration + @param NextEntry A pointer to a list node used to temporarily store the next node + @param ListHead The head node of the doubly linked list + +**/ +#define BASE_LIST_FOR_EACH_SAFE(Entry, NextEntry, ListHead) \ + for(Entry = (ListHead)->ForwardLink, NextEntry = Entry->ForwardLink;\ + Entry != (ListHead); Entry = NextEntry, NextEntry = Entry->ForwardLink) /** Checks whether FirstEntry and SecondEntry are part of the same doubly-linked -- 2.16.3.windows.1