Index: nss/lib/base/list.c |
diff --git a/nss/lib/base/list.c b/nss/lib/base/list.c |
index 5f34923b2054b6e2647aaef866ccd4ef57e7efbd..0173b853b2bfc7979817f0bbaa25464e41c4e3a6 100644 |
--- a/nss/lib/base/list.c |
+++ b/nss/lib/base/list.c |
@@ -13,19 +13,19 @@ |
#endif /* BASE_H */ |
struct nssListElementStr { |
- PRCList link; |
- void *data; |
+ PRCList link; |
+ void *data; |
}; |
typedef struct nssListElementStr nssListElement; |
struct nssListStr { |
- NSSArena *arena; |
- PZLock *lock; |
+ NSSArena *arena; |
+ PZLock *lock; |
nssListElement *head; |
- PRUint32 count; |
+ PRUint32 count; |
nssListCompareFunc compareFunc; |
- nssListSortFunc sortFunc; |
+ nssListSortFunc sortFunc; |
PRBool i_alloced_arena; |
}; |
@@ -35,11 +35,13 @@ struct nssListIteratorStr { |
nssListElement *current; |
}; |
-#define NSSLIST_LOCK_IF(list) \ |
- if ((list)->lock) PZ_Lock((list)->lock) |
+#define NSSLIST_LOCK_IF(list) \ |
+ if ((list)->lock) \ |
+ PZ_Lock((list)->lock) |
-#define NSSLIST_UNLOCK_IF(list) \ |
- if ((list)->lock) PZ_Unlock((list)->lock) |
+#define NSSLIST_UNLOCK_IF(list) \ |
+ if ((list)->lock) \ |
+ PZ_Unlock((list)->lock) |
static PRBool |
pointer_compare(void *a, void *b) |
@@ -54,61 +56,57 @@ nsslist_get_matching_element(nssList *list, void *data) |
nssListElement *node; |
node = list->head; |
if (!node) { |
- return NULL; |
+ return NULL; |
} |
link = &node->link; |
while (node) { |
- /* using a callback slows things down when it's just compare ... */ |
- if (list->compareFunc(node->data, data)) { |
- break; |
- } |
- link = &node->link; |
- if (link == PR_LIST_TAIL(&list->head->link)) { |
- node = NULL; |
- break; |
- } |
- node = (nssListElement *)PR_NEXT_LINK(&node->link); |
+ /* using a callback slows things down when it's just compare ... */ |
+ if (list->compareFunc(node->data, data)) { |
+ break; |
+ } |
+ link = &node->link; |
+ if (link == PR_LIST_TAIL(&list->head->link)) { |
+ node = NULL; |
+ break; |
+ } |
+ node = (nssListElement *)PR_NEXT_LINK(&node->link); |
} |
return node; |
} |
NSS_IMPLEMENT nssList * |
-nssList_Create |
-( |
- NSSArena *arenaOpt, |
- PRBool threadSafe |
-) |
+nssList_Create(NSSArena *arenaOpt, PRBool threadSafe) |
{ |
NSSArena *arena; |
nssList *list; |
PRBool i_alloced; |
if (arenaOpt) { |
- arena = arenaOpt; |
- i_alloced = PR_FALSE; |
+ arena = arenaOpt; |
+ i_alloced = PR_FALSE; |
} else { |
- arena = nssArena_Create(); |
- i_alloced = PR_TRUE; |
+ arena = nssArena_Create(); |
+ i_alloced = PR_TRUE; |
} |
if (!arena) { |
- return (nssList *)NULL; |
+ return (nssList *)NULL; |
} |
list = nss_ZNEW(arena, nssList); |
if (!list) { |
- if (!arenaOpt) { |
- NSSArena_Destroy(arena); |
- } |
- return (nssList *)NULL; |
+ if (!arenaOpt) { |
+ NSSArena_Destroy(arena); |
+ } |
+ return (nssList *)NULL; |
} |
if (threadSafe) { |
- list->lock = PZ_NewLock(nssILockOther); |
- if (!list->lock) { |
- if (arenaOpt) { |
- nss_ZFreeIf(list); |
- } else { |
- NSSArena_Destroy(arena); |
- } |
- return (nssList *)NULL; |
- } |
+ list->lock = PZ_NewLock(nssILockOther); |
+ if (!list->lock) { |
+ if (arenaOpt) { |
+ nss_ZFreeIf(list); |
+ } else { |
+ NSSArena_Destroy(arena); |
+ } |
+ return (nssList *)NULL; |
+ } |
} |
list->arena = arena; |
list->i_alloced_arena = i_alloced; |
@@ -120,14 +118,14 @@ NSS_IMPLEMENT PRStatus |
nssList_Destroy(nssList *list) |
{ |
if (!list->i_alloced_arena) { |
- nssList_Clear(list, NULL); |
+ nssList_Clear(list, NULL); |
} |
if (list->lock) { |
- (void)PZ_DestroyLock(list->lock); |
+ (void)PZ_DestroyLock(list->lock); |
} |
if (list->i_alloced_arena) { |
- NSSArena_Destroy(list->arena); |
- list = NULL; |
+ NSSArena_Destroy(list->arena); |
+ list = NULL; |
} |
nss_ZFreeIf(list); |
return PR_SUCCESS; |
@@ -161,13 +159,14 @@ nssList_Clear(nssList *list, nssListElementDestructorFunc destructor) |
node = list->head; |
list->head = NULL; |
while (node && list->count > 0) { |
- if (destructor) (*destructor)(node->data); |
- link = &node->link; |
- tmp = (nssListElement *)PR_NEXT_LINK(link); |
- PR_REMOVE_LINK(link); |
- nss_ZFreeIf(node); |
- node = tmp; |
- --list->count; |
+ if (destructor) |
+ (*destructor)(node->data); |
+ link = &node->link; |
+ tmp = (nssListElement *)PR_NEXT_LINK(link); |
+ PR_REMOVE_LINK(link); |
+ nss_ZFreeIf(node); |
+ node = tmp; |
+ --list->count; |
} |
NSSLIST_UNLOCK_IF(list); |
} |
@@ -177,38 +176,39 @@ nsslist_add_element(nssList *list, void *data) |
{ |
nssListElement *node = nss_ZNEW(list->arena, nssListElement); |
if (!node) { |
- return PR_FAILURE; |
+ return PR_FAILURE; |
} |
PR_INIT_CLIST(&node->link); |
node->data = data; |
if (list->head) { |
- if (list->sortFunc) { |
- PRCList *link; |
- nssListElement *currNode; |
- currNode = list->head; |
- /* insert in ordered list */ |
- while (currNode) { |
- link = &currNode->link; |
- if (list->sortFunc(data, currNode->data) <= 0) { |
- /* new element goes before current node */ |
- PR_INSERT_BEFORE(&node->link, link); |
- /* reset head if this is first */ |
- if (currNode == list->head) list->head = node; |
- break; |
- } |
- if (link == PR_LIST_TAIL(&list->head->link)) { |
- /* reached end of list, append */ |
- PR_INSERT_AFTER(&node->link, link); |
- break; |
- } |
- currNode = (nssListElement *)PR_NEXT_LINK(&currNode->link); |
- } |
- } else { |
- /* not sorting */ |
- PR_APPEND_LINK(&node->link, &list->head->link); |
- } |
+ if (list->sortFunc) { |
+ PRCList *link; |
+ nssListElement *currNode; |
+ currNode = list->head; |
+ /* insert in ordered list */ |
+ while (currNode) { |
+ link = &currNode->link; |
+ if (list->sortFunc(data, currNode->data) <= 0) { |
+ /* new element goes before current node */ |
+ PR_INSERT_BEFORE(&node->link, link); |
+ /* reset head if this is first */ |
+ if (currNode == list->head) |
+ list->head = node; |
+ break; |
+ } |
+ if (link == PR_LIST_TAIL(&list->head->link)) { |
+ /* reached end of list, append */ |
+ PR_INSERT_AFTER(&node->link, link); |
+ break; |
+ } |
+ currNode = (nssListElement *)PR_NEXT_LINK(&currNode->link); |
+ } |
+ } else { |
+ /* not sorting */ |
+ PR_APPEND_LINK(&node->link, &list->head->link); |
+ } |
} else { |
- list->head = node; |
+ list->head = node; |
} |
++list->count; |
return PR_SUCCESS; |
@@ -231,9 +231,9 @@ nssList_AddUnique(nssList *list, void *data) |
NSSLIST_LOCK_IF(list); |
node = nsslist_get_matching_element(list, data); |
if (node) { |
- /* already in, finish */ |
- NSSLIST_UNLOCK_IF(list); |
- return PR_SUCCESS; |
+ /* already in, finish */ |
+ NSSLIST_UNLOCK_IF(list); |
+ return PR_SUCCESS; |
} |
nssrv = nsslist_add_element(list, data); |
NSSLIST_UNLOCK_IF(list); |
@@ -247,14 +247,14 @@ nssList_Remove(nssList *list, void *data) |
NSSLIST_LOCK_IF(list); |
node = nsslist_get_matching_element(list, data); |
if (node) { |
- if (node == list->head) { |
- list->head = (nssListElement *)PR_NEXT_LINK(&node->link); |
- } |
- PR_REMOVE_LINK(&node->link); |
- nss_ZFreeIf(node); |
- if (--list->count == 0) { |
- list->head = NULL; |
- } |
+ if (node == list->head) { |
+ list->head = (nssListElement *)PR_NEXT_LINK(&node->link); |
+ } |
+ PR_REMOVE_LINK(&node->link); |
+ nss_ZFreeIf(node); |
+ if (--list->count == 0) { |
+ list->head = NULL; |
+ } |
} |
NSSLIST_UNLOCK_IF(list); |
return PR_SUCCESS; |
@@ -284,16 +284,17 @@ nssList_GetArray(nssList *list, void **rvArray, PRUint32 maxElements) |
PR_ASSERT(maxElements > 0); |
node = list->head; |
if (!node) { |
- return PR_SUCCESS; |
+ return PR_SUCCESS; |
} |
NSSLIST_LOCK_IF(list); |
while (node) { |
- rvArray[i++] = node->data; |
- if (i == maxElements) break; |
- node = (nssListElement *)PR_NEXT_LINK(&node->link); |
- if (node == list->head) { |
- break; |
- } |
+ rvArray[i++] = node->data; |
+ if (i == maxElements) |
+ break; |
+ node = (nssListElement *)PR_NEXT_LINK(&node->link); |
+ if (node == list->head) { |
+ break; |
+ } |
} |
NSSLIST_UNLOCK_IF(list); |
return PR_SUCCESS; |
@@ -306,18 +307,18 @@ nssList_Clone(nssList *list) |
nssListElement *node; |
rvList = nssList_Create(NULL, (list->lock != NULL)); |
if (!rvList) { |
- return NULL; |
+ return NULL; |
} |
NSSLIST_LOCK_IF(list); |
if (list->count > 0) { |
- node = list->head; |
- while (PR_TRUE) { |
- nssList_Add(rvList, node->data); |
- node = (nssListElement *)PR_NEXT_LINK(&node->link); |
- if (node == list->head) { |
- break; |
- } |
- } |
+ node = list->head; |
+ while (PR_TRUE) { |
+ nssList_Add(rvList, node->data); |
+ node = (nssListElement *)PR_NEXT_LINK(&node->link); |
+ if (node == list->head) { |
+ break; |
+ } |
+ } |
} |
NSSLIST_UNLOCK_IF(list); |
return rvList; |
@@ -329,21 +330,21 @@ nssList_CreateIterator(nssList *list) |
nssListIterator *rvIterator; |
rvIterator = nss_ZNEW(NULL, nssListIterator); |
if (!rvIterator) { |
- return NULL; |
+ return NULL; |
} |
rvIterator->list = nssList_Clone(list); |
if (!rvIterator->list) { |
- nss_ZFreeIf(rvIterator); |
- return NULL; |
+ nss_ZFreeIf(rvIterator); |
+ return NULL; |
} |
rvIterator->current = rvIterator->list->head; |
if (list->lock) { |
- rvIterator->lock = PZ_NewLock(nssILockOther); |
- if (!rvIterator->lock) { |
- nssList_Destroy(rvIterator->list); |
- nss_ZFreeIf(rvIterator); |
- rvIterator = NULL; |
- } |
+ rvIterator->lock = PZ_NewLock(nssILockOther); |
+ if (!rvIterator->lock) { |
+ nssList_Destroy(rvIterator->list); |
+ nss_ZFreeIf(rvIterator); |
+ rvIterator = NULL; |
+ } |
} |
return rvIterator; |
} |
@@ -352,7 +353,7 @@ NSS_IMPLEMENT void |
nssListIterator_Destroy(nssListIterator *iter) |
{ |
if (iter->lock) { |
- (void)PZ_DestroyLock(iter->lock); |
+ (void)PZ_DestroyLock(iter->lock); |
} |
nssList_Destroy(iter->list); |
nss_ZFreeIf(iter); |
@@ -363,7 +364,7 @@ nssListIterator_Start(nssListIterator *iter) |
{ |
NSSLIST_LOCK_IF(iter); |
if (iter->list->count == 0) { |
- return NULL; |
+ return NULL; |
} |
iter->current = iter->list->head; |
return iter->current->data; |
@@ -375,17 +376,17 @@ nssListIterator_Next(nssListIterator *iter) |
nssListElement *node; |
PRCList *link; |
if (iter->list->count == 1 || iter->current == NULL) { |
- /* Reached the end of the list. Don't change the state, force to |
- * user to call nssList_Finish to clean up. |
- */ |
- return NULL; |
+ /* Reached the end of the list. Don't change the state, force to |
+ * user to call nssList_Finish to clean up. |
+ */ |
+ return NULL; |
} |
node = (nssListElement *)PR_NEXT_LINK(&iter->current->link); |
link = &node->link; |
if (link == PR_LIST_TAIL(&iter->list->head->link)) { |
- /* Signal the end of the list. */ |
- iter->current = NULL; |
- return node->data; |
+ /* Signal the end of the list. */ |
+ iter->current = NULL; |
+ return node->data; |
} |
iter->current = node; |
return node->data; |
@@ -397,4 +398,3 @@ nssListIterator_Finish(nssListIterator *iter) |
iter->current = iter->list->head; |
return (iter->lock) ? PZ_Unlock(iter->lock) : PR_SUCCESS; |
} |
- |