Hi Marvin, Can you provide a few more details on why you would like to see tis internal function promoted to a library class API?
Thanks, Mike > -----Original Message----- > From: Marvin Häuser [mailto:[email protected]] > Sent: Sunday, July 23, 2017 3:11 AM > To: [email protected] > Cc: Kinney, Michael D <[email protected]>; Gao, Liming > <[email protected]> > Subject: [PATCH 1/2] MdePkg/BaseLib: Add IsNodeInList() function. > > This patch adds IsNodeInList() to BaseLib, which verifies the > given > Node is part of the doubly-linked List provided. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Marvin Haeuser <[email protected]> > --- > MdePkg/Library/BaseLib/LinkedList.c | 70 > +++++++++++++++++++- > MdePkg/Include/Library/BaseLib.h | 25 +++++++ > MdePkg/Library/BaseLib/BaseLibInternals.h | 28 -------- > 3 files changed, 94 insertions(+), 29 deletions(-) > > diff --git a/MdePkg/Library/BaseLib/LinkedList.c > b/MdePkg/Library/BaseLib/LinkedList.c > index ba373f4b7be3..b364ae41c647 100644 > --- a/MdePkg/Library/BaseLib/LinkedList.c > +++ b/MdePkg/Library/BaseLib/LinkedList.c > @@ -1,7 +1,7 @@ > /** @file > Linked List Library Functions. > > - Copyright (c) 2006 - 2013, Intel Corporation. All rights > reserved.<BR> > + Copyright (c) 2006 - 2017, Intel Corporation. All rights > reserved.<BR> > This program and the accompanying materials > are licensed and made available under the terms and conditions > of the BSD License > which accompanies this distribution. The full text of the > license may be found at > @@ -113,6 +113,74 @@ InternalBaseLibIsNodeInList ( > } > > /** > + Checks whether Node is part of a doubly-linked list. > + > + If List is NULL, then ASSERT(). > + If List->ForwardLink is NULL, then ASSERT(). > + If List->BackLink is NULL, then ASSERT(). > + If Node is NULL, then ASSERT(); > + If PcdMaximumLinkedListLength is not zero, and List contains > more than > + PcdMaximumLinkedListLength nodes, then ASSERT(). > + > + @param List A pointer to a node in a linked list. > + @param Node A pointer to the node to locate. > + > + @retval TRUE Node is in List. > + @retval FALSE Node isn't in List, or List is invalid. > + > +**/ > +BOOLEAN > +EFIAPI > +IsNodeInList ( > + IN CONST LIST_ENTRY *List, > + IN CONST LIST_ENTRY *Node > + ) > +{ > + UINTN Count; > + CONST LIST_ENTRY *Ptr; > + > + // > + // Test the validity of List and Node > + // > + ASSERT (List != NULL); > + ASSERT (List->ForwardLink != NULL); > + ASSERT (List->BackLink != NULL); > + ASSERT (Node != NULL); > + > + // > + // ASSERT List not too long > + // > + ASSERT (InternalBaseLibIsNodeInList (ListHead, Entry, FALSE)); > + > + Count = 0; > + Ptr = List; > + > + // > + // Check to see if Node is a member of List. > + // Exit early if the number of nodes in List >= > PcdMaximumLinkedListLength > + // > + do { > + Ptr = Ptr->ForwardLink; > + if (PcdGet32 (PcdMaximumLinkedListLength) > 0) { > + Count++; > + > + // > + // Return if the linked list is too long > + // > + if (Count == PcdGet32 (PcdMaximumLinkedListLength)) { > + return (BOOLEAN)(Ptr == Node); > + } > + } > + > + if (Ptr == Node) { > + return TRUE; > + } > + } while (Ptr != List); > + > + return FALSE; > +} > + > +/** > Initializes the head node of a doubly-linked list, and returns > the pointer to > the head node of the doubly-linked list. > > diff --git a/MdePkg/Include/Library/BaseLib.h > b/MdePkg/Include/Library/BaseLib.h > index 791849b80406..4f3f4fd51f3f 100644 > --- a/MdePkg/Include/Library/BaseLib.h > +++ b/MdePkg/Include/Library/BaseLib.h > @@ -2869,6 +2869,31 @@ PathCleanUpDirectories( > > > /** > + Checks whether Node is part of a doubly-linked list. > + > + If List is NULL, then ASSERT(). > + If List->ForwardLink is NULL, then ASSERT(). > + If List->BackLink is NULL, then ASSERT(). > + If Node is NULL, then ASSERT(); > + If PcdMaximumLinkedListLength is not zero, and List contains > more than > + PcdMaximumLinkedListLength nodes, then ASSERT(). > + > + @param List A pointer to a node in a linked list. > + @param Node A pointer to the node to locate. > + > + @retval TRUE Node is in List. > + @retval FALSE Node isn't in List, or List is invalid. > + > +**/ > +BOOLEAN > +EFIAPI > +IsNodeInList ( > + IN CONST LIST_ENTRY *List, > + IN CONST LIST_ENTRY *Node > + ); > + > + > +/** > Initializes the head node of a doubly linked list, and returns > the pointer to > the head node of the doubly linked list. > > diff --git a/MdePkg/Library/BaseLib/BaseLibInternals.h > b/MdePkg/Library/BaseLib/BaseLibInternals.h > index ea387ce37d27..9dca97a0dcc9 100644 > --- a/MdePkg/Library/BaseLib/BaseLibInternals.h > +++ b/MdePkg/Library/BaseLib/BaseLibInternals.h > @@ -340,34 +340,6 @@ InternalSwitchStack ( > > > /** > - Worker function that locates the Node in the List. > - > - By searching the List, finds the location of the Node in List. > At the same time, > - verifies the validity of this list. > - > - If List is NULL, then ASSERT(). > - If List->ForwardLink is NULL, then ASSERT(). > - If List->backLink is NULL, then ASSERT(). > - If Node is NULL, then ASSERT(); > - If PcdMaximumLinkedListLength is not zero, and prior to > insertion the number > - of nodes in ListHead, including the ListHead node, is greater > than or > - equal to PcdMaximumLinkedListLength, then ASSERT(). > - > - @param List A pointer to a node in a linked list. > - @param Node A pointer to one nod. > - > - @retval TRUE Node is in List. > - @retval FALSE Node isn't in List, or List is invalid. > - > -**/ > -BOOLEAN > -EFIAPI > -IsNodeInList ( > - IN CONST LIST_ENTRY *List, > - IN CONST LIST_ENTRY *Node > - ); > - > -/** > Worker function that returns a bit field from Operand. > > Returns the bitfield specified by the StartBit and the EndBit > from Operand. > -- > 2.12.2.windows.2 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

