]> git.saurik.com Git - apple/mdnsresponder.git/blobdiff - mDNSShared/GenLinkedList.c
mDNSResponder-379.27.tar.gz
[apple/mdnsresponder.git] / mDNSShared / GenLinkedList.c
index 6e371b9db52994208a6ed6422b79de156e8db1e8..45dbb7cbd35319915665023e8b055b5816f03aa0 100644 (file)
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *     http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
 
-       File:           GenLinkedList.c
+    File:              GenLinkedList.c
 
-       Contains:       implementation of generic linked lists.
+    Contains:  implementation of generic linked lists.
 
-       Version:        1.0
-       Tabs:           4 spaces
+    Version:   1.0
+    Tabs:              4 spaces
  */
 
 #include "GenLinkedList.h"
 
 
 // Return the link pointer contained within element e at offset o.
-#define                GETLINK( e, o)                  ( *(void**)((char*) (e) + (o)) )
+#define     GETLINK( e, o)          ( *(void**)((char*) (e) + (o)) )
 
 // Assign the link pointer l to element e at offset o.
-#define                ASSIGNLINK( e, l, o)    ( *((void**)((char*) (e) + (o))) = (l))
+#define     ASSIGNLINK( e, l, o)    ( *((void**)((char*) (e) + (o))) = (l))
 
 
 //             GenLinkedList           /////////////////////////////////////////////////////////////
 
-void           InitLinkedList( GenLinkedList *pList, size_t linkOffset)
+void        InitLinkedList( GenLinkedList *pList, size_t linkOffset)
 /* Initialize the block of memory pointed to by pList as a linked list. */
 {
-       pList->Head = NULL;
-       pList->Tail = NULL;
-       pList->LinkOffset = linkOffset;
+    pList->Head = NULL;
+    pList->Tail = NULL;
+    pList->LinkOffset = linkOffset;
 }
 
 
-void           AddToTail( GenLinkedList *pList, void *elem)
+void        AddToTail( GenLinkedList *pList, void *elem)
 /* Add a linked list element to the tail of the list. */
 {
-       if ( pList->Tail) {
-               ASSIGNLINK( pList->Tail, elem, pList->LinkOffset);
-       } else
-               pList->Head = elem;
-       ASSIGNLINK( elem, NULL, pList->LinkOffset);
+    if ( pList->Tail) {
+        ASSIGNLINK( pList->Tail, elem, pList->LinkOffset);
+    } else
+        pList->Head = elem;
+    ASSIGNLINK( elem, NULL, pList->LinkOffset);
 
-       pList->Tail = elem;
+    pList->Tail = elem;
 }
 
 
-void           AddToHead( GenLinkedList *pList, void *elem)
+void        AddToHead( GenLinkedList *pList, void *elem)
 /* Add a linked list element to the head of the list. */
 {
-       ASSIGNLINK( elem, pList->Head, pList->LinkOffset);
-       if ( pList->Tail == NULL) 
-               pList->Tail = elem;
+    ASSIGNLINK( elem, pList->Head, pList->LinkOffset);
+    if ( pList->Tail == NULL)
+        pList->Tail = elem;
 
-       pList->Head = elem;
+    pList->Head = elem;
 }
 
 
-int            RemoveFromList( GenLinkedList *pList, void *elem)
+int     RemoveFromList( GenLinkedList *pList, void *elem)
 /* Remove a linked list element from the list. Return 0 if it was not found. */
 /* If the element is removed, its link will be set to NULL. */
 {
-void   *iElem, *lastElem;
-
-       for ( iElem = pList->Head, lastElem = NULL; iElem; iElem = GETLINK( iElem, pList->LinkOffset)) {
-               if ( iElem == elem) {
-                       if ( lastElem) {                // somewhere past the head
-                               ASSIGNLINK( lastElem, GETLINK( elem, pList->LinkOffset), pList->LinkOffset);
-                       } else {                                // at the head
-                               pList->Head = GETLINK( elem, pList->LinkOffset);
-                       }
-                       if ( pList->Tail == elem)
-                               pList->Tail = lastElem ? lastElem : NULL;
-                       ASSIGNLINK( elem, NULL, pList->LinkOffset);                     // maybe catch a stale reference bug.
-                       return 1;
-               }
-               lastElem = iElem;
-       }
-       
-       return 0;
+    void    *iElem, *lastElem;
+
+    for ( iElem = pList->Head, lastElem = NULL; iElem; iElem = GETLINK( iElem, pList->LinkOffset)) {
+        if ( iElem == elem) {
+            if ( lastElem) {        // somewhere past the head
+                ASSIGNLINK( lastElem, GETLINK( elem, pList->LinkOffset), pList->LinkOffset);
+            } else {                // at the head
+                pList->Head = GETLINK( elem, pList->LinkOffset);
+            }
+            if ( pList->Tail == elem)
+                pList->Tail = lastElem ? lastElem : NULL;
+            ASSIGNLINK( elem, NULL, pList->LinkOffset);         // maybe catch a stale reference bug.
+            return 1;
+        }
+        lastElem = iElem;
+    }
+
+    return 0;
 }
 
 
-int                    ReplaceElem( GenLinkedList *pList, void *elemInList, void *newElem)
+int         ReplaceElem( GenLinkedList *pList, void *elemInList, void *newElem)
 /* Replace an element in the list with a new element, in the same position. */
 {
-void   *iElem, *lastElem;
-
-       if ( elemInList == NULL || newElem == NULL)
-               return 0;
-
-       for ( iElem = pList->Head, lastElem = NULL; iElem; iElem = GETLINK( iElem, pList->LinkOffset)) 
-       {
-               if ( iElem == elemInList)
-               {
-                       ASSIGNLINK( newElem, GETLINK( elemInList, pList->LinkOffset), pList->LinkOffset);
-                       if ( lastElem)          // somewhere past the head
-                       {
-                               ASSIGNLINK( lastElem, newElem, pList->LinkOffset);
-                       } 
-                       else                            // at the head
-                       {
-                               pList->Head = newElem;
-                       }
-                       if ( pList->Tail == elemInList)
-                               pList->Tail = newElem;
-                       return 1;
-               }
-               lastElem = iElem;
-       }
-
-       return 0;
+    void    *iElem, *lastElem;
+
+    if ( elemInList == NULL || newElem == NULL)
+        return 0;
+
+    for ( iElem = pList->Head, lastElem = NULL; iElem; iElem = GETLINK( iElem, pList->LinkOffset))
+    {
+        if ( iElem == elemInList)
+        {
+            ASSIGNLINK( newElem, GETLINK( elemInList, pList->LinkOffset), pList->LinkOffset);
+            if ( lastElem)      // somewhere past the head
+            {
+                ASSIGNLINK( lastElem, newElem, pList->LinkOffset);
+            }
+            else                // at the head
+            {
+                pList->Head = newElem;
+            }
+            if ( pList->Tail == elemInList)
+                pList->Tail = newElem;
+            return 1;
+        }
+        lastElem = iElem;
+    }
+
+    return 0;
 }
 
 
 //             GenDoubleLinkedList             /////////////////////////////////////////////////////////
 
-void           InitDoubleLinkedList( GenDoubleLinkedList *pList, size_t fwdLinkOffset,
-                                                                         size_t backLinkOffset)
+void        InitDoubleLinkedList( GenDoubleLinkedList *pList, size_t fwdLinkOffset,
+                                  size_t backLinkOffset)
 /* Initialize the block of memory pointed to by pList as a double linked list. */
 {
-       pList->Head = NULL;
-       pList->Tail = NULL;
-       pList->FwdLinkOffset = fwdLinkOffset;
-       pList->BackLinkOffset = backLinkOffset;
+    pList->Head = NULL;
+    pList->Tail = NULL;
+    pList->FwdLinkOffset = fwdLinkOffset;
+    pList->BackLinkOffset = backLinkOffset;
 }
 
 
-void                   DLLAddToHead( GenDoubleLinkedList *pList, void *elem)
+void            DLLAddToHead( GenDoubleLinkedList *pList, void *elem)
 /* Add a linked list element to the head of the list. */
 {
-void           *pNext;
+    void        *pNext;
 
-       pNext = pList->Head;
+    pNext = pList->Head;
 
-       // fix up the forward links
-       ASSIGNLINK( elem, pList->Head, pList->FwdLinkOffset);
-       pList->Head = elem;
+    // fix up the forward links
+    ASSIGNLINK( elem, pList->Head, pList->FwdLinkOffset);
+    pList->Head = elem;
 
-       // fix up the backward links
-       if ( pNext) {
-               ASSIGNLINK( pNext, elem, pList->BackLinkOffset);
-       } else
-               pList->Tail = elem;
-       ASSIGNLINK( elem, NULL, pList->BackLinkOffset);
+    // fix up the backward links
+    if ( pNext) {
+        ASSIGNLINK( pNext, elem, pList->BackLinkOffset);
+    } else
+        pList->Tail = elem;
+    ASSIGNLINK( elem, NULL, pList->BackLinkOffset);
 }
 
 
-void                   DLLRemoveFromList( GenDoubleLinkedList *pList, void *elem)
+void            DLLRemoveFromList( GenDoubleLinkedList *pList, void *elem)
 /* Remove a linked list element from the list. */
 /* When the element is removed, its link will be set to NULL. */
 {
-void           *pNext, *pPrev;
-
-       pNext = GETLINK( elem, pList->FwdLinkOffset);
-       pPrev = GETLINK( elem, pList->BackLinkOffset);
-
-       // fix up the forward links
-       if ( pPrev)
-               ASSIGNLINK( pPrev, pNext, pList->FwdLinkOffset);
-       else
-               pList->Head = pNext;
-               
-       // fix up the backward links
-       if ( pNext)     
-               ASSIGNLINK( pNext, pPrev, pList->BackLinkOffset);
-       else
-               pList->Tail = pPrev;
-
-       ASSIGNLINK( elem, NULL, pList->FwdLinkOffset);
-       ASSIGNLINK( elem, NULL, pList->BackLinkOffset);
+    void        *pNext, *pPrev;
+
+    pNext = GETLINK( elem, pList->FwdLinkOffset);
+    pPrev = GETLINK( elem, pList->BackLinkOffset);
+
+    // fix up the forward links
+    if ( pPrev)
+        ASSIGNLINK( pPrev, pNext, pList->FwdLinkOffset);
+    else
+        pList->Head = pNext;
+
+    // fix up the backward links
+    if ( pNext)
+        ASSIGNLINK( pNext, pPrev, pList->BackLinkOffset);
+    else
+        pList->Tail = pPrev;
+
+    ASSIGNLINK( elem, NULL, pList->FwdLinkOffset);
+    ASSIGNLINK( elem, NULL, pList->BackLinkOffset);
 }
 
 
 //             GenLinkedOffsetList             /////////////////////////////////////////////////////
 
 // Extract the Next offset from element
-#define                GETOFFSET( e, o)        ( *(size_t*)((char*) (e) + (o)) )
+#define     GETOFFSET( e, o)    ( *(size_t*)((char*) (e) + (o)) )
 
-static void            AssignOffsetLink( void *elem, void *link, size_t linkOffset);
+static void     AssignOffsetLink( void *elem, void *link, size_t linkOffset);
 
 
-static void    AssignOffsetLink( void *elem, void *link, size_t linkOffset)
+static void AssignOffsetLink( void *elem, void *link, size_t linkOffset)
 // Assign link to elem as an offset from elem. Assign 0 to elem if link is NULL.
 {
-       GETOFFSET( elem, linkOffset) = link ? (size_t) link - (size_t) elem : 0;
+    GETOFFSET( elem, linkOffset) = link ? (size_t) link - (size_t) elem : 0;
 }
 
 
-void           *GetHeadPtr( GenLinkedOffsetList *pList)
+void        *GetHeadPtr( GenLinkedOffsetList *pList)
 /* Return a pointer to the head element of a list, or NULL if none. */
 {
-       return pList->Head ? ( (char*) (pList) + pList->Head) : NULL;
+    return pList->Head ? ( (char*) (pList) + pList->Head) : NULL;
 }
 
 
-void           *GetTailPtr( GenLinkedOffsetList *pList)
+void        *GetTailPtr( GenLinkedOffsetList *pList)
 /* Return a pointer to the tail element of a list, or NULL if none. */
 {
-       return pList->Tail ? ( (char*) (pList) + pList->Tail) : NULL;
+    return pList->Tail ? ( (char*) (pList) + pList->Tail) : NULL;
 }
 
 
-void           *GetOffsetLink( GenLinkedOffsetList *pList, void *elem)
+void        *GetOffsetLink( GenLinkedOffsetList *pList, void *elem)
 /* Return the link pointer contained within element e for pList, or NULL if it is 0. */
 {
-size_t         nextOffset;
+    size_t nextOffset;
 
-       nextOffset = GETOFFSET( elem, pList->LinkOffset);
+    nextOffset = GETOFFSET( elem, pList->LinkOffset);
 
-       return nextOffset ? (char*) elem + nextOffset : NULL;
+    return nextOffset ? (char*) elem + nextOffset : NULL;
 }
 
 
-void           InitLinkedOffsetList( GenLinkedOffsetList *pList, size_t linkOffset)
+void        InitLinkedOffsetList( GenLinkedOffsetList *pList, size_t linkOffset)
 /* Initialize the block of memory pointed to by pList as a linked list. */
 {
-       pList->Head = 0;
-       pList->Tail = 0;
-       pList->LinkOffset = linkOffset;
+    pList->Head = 0;
+    pList->Tail = 0;
+    pList->LinkOffset = linkOffset;
 }
 
 
-void           OffsetAddToTail( GenLinkedOffsetList *pList, void *elem)
+void        OffsetAddToTail( GenLinkedOffsetList *pList, void *elem)
 /* Add a linked list element to the tail of the list. */
 {
-       if ( pList->Tail) {
-               AssignOffsetLink( GetTailPtr( pList), elem, pList->LinkOffset);
-       } else
-               pList->Head = (size_t) elem - (size_t) pList;
-       AssignOffsetLink( elem, NULL, pList->LinkOffset);
+    if ( pList->Tail) {
+        AssignOffsetLink( GetTailPtr( pList), elem, pList->LinkOffset);
+    } else
+        pList->Head = (size_t) elem - (size_t) pList;
+    AssignOffsetLink( elem, NULL, pList->LinkOffset);
 
-       pList->Tail = (size_t) elem - (size_t) pList;
+    pList->Tail = (size_t) elem - (size_t) pList;
 }
 
 
-void           OffsetAddToHead( GenLinkedOffsetList *pList, void *elem)
+void        OffsetAddToHead( GenLinkedOffsetList *pList, void *elem)
 /* Add a linked list element to the head of the list. */
 {
-       AssignOffsetLink( elem, GetHeadPtr( pList), pList->LinkOffset);
-       if ( pList->Tail == 0) 
-               pList->Tail = (size_t) elem - (size_t) pList;
+    AssignOffsetLink( elem, GetHeadPtr( pList), pList->LinkOffset);
+    if ( pList->Tail == 0)
+        pList->Tail = (size_t) elem - (size_t) pList;
 
-       pList->Head = (size_t) elem - (size_t) pList;
+    pList->Head = (size_t) elem - (size_t) pList;
 }
 
 
-int            OffsetRemoveFromList( GenLinkedOffsetList *pList, void *elem)
+int     OffsetRemoveFromList( GenLinkedOffsetList *pList, void *elem)
 /* Remove a linked list element from the list. Return 0 if it was not found. */
 /* If the element is removed, its link will be set to NULL. */
 {
-void   *iElem, *lastElem;
-
-       for ( iElem = GetHeadPtr( pList), lastElem = NULL; iElem; 
-                 iElem = GetOffsetLink( pList, iElem))
-       {
-               if ( iElem == elem) {
-                       if ( lastElem) {                // somewhere past the head
-                               AssignOffsetLink( lastElem, GetOffsetLink( pList, elem), pList->LinkOffset);
-                       } else {                                // at the head
-                               iElem = GetOffsetLink( pList, elem);
-                               pList->Head = iElem ? (size_t) iElem - (size_t) pList : 0;
-                       }
-                       if ( GetTailPtr( pList) == elem)
-                               pList->Tail = lastElem ? (size_t) lastElem - (size_t) pList : 0;
-                       AssignOffsetLink( elem, NULL, pList->LinkOffset);       // maybe catch a stale reference bug.
-                       return 1;
-               }
-               lastElem = iElem;
-       }
-
-       return 0;
+    void    *iElem, *lastElem;
+
+    for ( iElem = GetHeadPtr( pList), lastElem = NULL; iElem;
+          iElem = GetOffsetLink( pList, iElem))
+    {
+        if ( iElem == elem) {
+            if ( lastElem) {        // somewhere past the head
+                AssignOffsetLink( lastElem, GetOffsetLink( pList, elem), pList->LinkOffset);
+            } else {                // at the head
+                iElem = GetOffsetLink( pList, elem);
+                pList->Head = iElem ? (size_t) iElem - (size_t) pList : 0;
+            }
+            if ( GetTailPtr( pList) == elem)
+                pList->Tail = lastElem ? (size_t) lastElem - (size_t) pList : 0;
+            AssignOffsetLink( elem, NULL, pList->LinkOffset);   // maybe catch a stale reference bug.
+            return 1;
+        }
+        lastElem = iElem;
+    }
+
+    return 0;
 }
 
 
-int                    OffsetReplaceElem( GenLinkedOffsetList *pList, void *elemInList, void *newElem)
+int         OffsetReplaceElem( GenLinkedOffsetList *pList, void *elemInList, void *newElem)
 /* Replace an element in the list with a new element, in the same position. */
 {
-void   *iElem, *lastElem;
-
-       if ( elemInList == NULL || newElem == NULL)
-               return 0;
-
-       for ( iElem = GetHeadPtr( pList), lastElem = NULL; iElem; 
-                 iElem = GetOffsetLink( pList, iElem))
-       {
-               if ( iElem == elemInList)
-               {
-                       AssignOffsetLink( newElem, GetOffsetLink( pList, elemInList), pList->LinkOffset);
-                       if ( lastElem)          // somewhere past the head
-                       {
-                               AssignOffsetLink( lastElem, newElem, pList->LinkOffset);
-                       } 
-                       else                            // at the head
-                       {
-                               pList->Head = (size_t) newElem - (size_t) pList;
-                       }
-                       if ( GetTailPtr( pList) == elemInList)
-                               pList->Tail = (size_t) newElem - (size_t) pList;
-                       return 1;
-               }
-               lastElem = iElem;
-       }
-
-       return 0;
+    void    *iElem, *lastElem;
+
+    if ( elemInList == NULL || newElem == NULL)
+        return 0;
+
+    for ( iElem = GetHeadPtr( pList), lastElem = NULL; iElem;
+          iElem = GetOffsetLink( pList, iElem))
+    {
+        if ( iElem == elemInList)
+        {
+            AssignOffsetLink( newElem, GetOffsetLink( pList, elemInList), pList->LinkOffset);
+            if ( lastElem)      // somewhere past the head
+            {
+                AssignOffsetLink( lastElem, newElem, pList->LinkOffset);
+            }
+            else                // at the head
+            {
+                pList->Head = (size_t) newElem - (size_t) pList;
+            }
+            if ( GetTailPtr( pList) == elemInList)
+                pList->Tail = (size_t) newElem - (size_t) pList;
+            return 1;
+        }
+        lastElem = iElem;
+    }
+
+    return 0;
 }