diff options
author | ian.mcgreer%sun.com <devnull@localhost> | 2001-11-28 16:23:51 +0000 |
---|---|---|
committer | ian.mcgreer%sun.com <devnull@localhost> | 2001-11-28 16:23:51 +0000 |
commit | 1f76ef2659e4785f0411c1dc7c70c0aa36af7b7c (patch) | |
tree | eca905b0b3bea53d2c8314c807567912b5b31c3a /security/nss/lib/base | |
parent | ba8cfdd8b7d0dfa4ab81f470228cf11a0d13ef8d (diff) | |
download | nss-hg-1f76ef2659e4785f0411c1dc7c70c0aa36af7b7c.tar.gz |
land changes for handling temporary and cached certs in 3.4
* separate trust object from cert object
* move handling of cryptoki objects into libdev
* implement digest in libdev (for trust object indexing)
* fixes in cache implementation; connect cache to 3.4 certs
* implement CERT_NewTempCertificate via crypto context
Diffstat (limited to 'security/nss/lib/base')
-rw-r--r-- | security/nss/lib/base/base.h | 20 | ||||
-rw-r--r-- | security/nss/lib/base/hash.c | 2 | ||||
-rw-r--r-- | security/nss/lib/base/item.c | 13 | ||||
-rw-r--r-- | security/nss/lib/base/list.c | 32 |
4 files changed, 53 insertions, 14 deletions
diff --git a/security/nss/lib/base/base.h b/security/nss/lib/base/base.h index b7ec1ce24..9523a243b 100644 --- a/security/nss/lib/base/base.h +++ b/security/nss/lib/base/base.h @@ -562,6 +562,12 @@ nssItem_Create const void *data ); +NSS_EXTERN void +nssItem_Destroy +( + NSSItem *item +); + NSS_EXTERN NSSItem * nssItem_Duplicate ( @@ -831,8 +837,8 @@ nssList_Destroy nssList *list ); -NSS_EXTERN PRStatus -nssList_DestroyElements +NSS_EXTERN void +nssList_Clear ( nssList *list, nssListElementDestructorFunc destructor @@ -1005,6 +1011,16 @@ nssListIterator_Finish */ NSS_EXTERN nssHash * +nssHash_Create +( + NSSArena *arenaOpt, + PRUint32 numBuckets, + PLHashFunction keyHash, + PLHashComparator keyCompare, + PLHashComparator valueCompare +); + +NSS_EXTERN nssHash * nssHash_CreatePointer ( NSSArena *arenaOpt, diff --git a/security/nss/lib/base/hash.c b/security/nss/lib/base/hash.c index dd0a61576..39598ddd9 100644 --- a/security/nss/lib/base/hash.c +++ b/security/nss/lib/base/hash.c @@ -112,7 +112,7 @@ nss_compare_items(const void *v1, const void *v2) * nssHash_create * */ -static nssHash * +NSS_IMPLEMENT nssHash * nssHash_Create ( NSSArena *arenaOpt, diff --git a/security/nss/lib/base/item.c b/security/nss/lib/base/item.c index 073e437d3..efa9d1200 100644 --- a/security/nss/lib/base/item.c +++ b/security/nss/lib/base/item.c @@ -116,6 +116,19 @@ nssItem_Create return (NSSItem *)NULL; } +NSS_IMPLEMENT void +nssItem_Destroy +( + NSSItem *item +) +{ + nss_ClearErrorStack(); + + nss_ZFreeIf(item->data); + nss_ZFreeIf(item); + +} + /* * nssItem_Duplicate * diff --git a/security/nss/lib/base/list.c b/security/nss/lib/base/list.c index 1037c989f..97eb874f8 100644 --- a/security/nss/lib/base/list.c +++ b/security/nss/lib/base/list.c @@ -138,8 +138,17 @@ nssList_Create NSS_IMPLEMENT PRStatus nssList_Destroy(nssList *list) { - if (list->lock) PZ_DestroyLock(list->lock); - NSSArena_Destroy(list->arena); + PZLock *lock = list->lock; + if (list->arena) { + NSSArena_Destroy(list->arena); + list = NULL; + } else { + nssList_Clear(list, NULL); + } + if (lock) { + PZ_DestroyLock(lock); + } + nss_ZFreeIf(list); return PR_SUCCESS; } @@ -162,22 +171,23 @@ nssList_GetCompareFunction(nssList *list) return list->compareFunc; } -NSS_IMPLEMENT PRStatus -nssList_DestroyElements(nssList *list, nssListElementDestructorFunc destructor) +NSS_IMPLEMENT void +nssList_Clear(nssList *list, nssListElementDestructorFunc destructor) { PRCList *link; - nssListElement *node; + nssListElement *node, *tmp; NSSLIST_LOCK_IF(list); node = list->head; while (node && list->count > 0) { - (*destructor)(node->data); + if (destructor) (*destructor)(node->data); link = &node->link; - node = (nssListElement *)PR_NEXT_LINK(link); + tmp = (nssListElement *)PR_NEXT_LINK(link); PR_REMOVE_LINK(link); + nss_ZFreeIf(node); + node = tmp; --list->count; } NSSLIST_UNLOCK_IF(list); - return nssList_Destroy(list); } static PRStatus @@ -271,7 +281,7 @@ nssList_Get(nssList *list, void *data) NSSLIST_LOCK_IF(list); node = nsslist_get_matching_element(list, data); NSSLIST_UNLOCK_IF(list); - return node->data; + return (node) ? node->data : NULL; } NSS_IMPLEMENT PRUint32 @@ -286,14 +296,14 @@ nssList_GetArray(nssList *list, void **rvArray, PRUint32 maxElements) nssListIterator *iter; void *el; PRUint32 i = 0; + PR_ASSERT(maxElements > 0); iter = nssList_CreateIterator(list); for (el = nssListIterator_Start(iter); el != NULL; el = nssListIterator_Next(iter)) { rvArray[i++] = el; - if (maxElements > 0 && i == maxElements) break; + if (i == maxElements) break; } - rvArray[i] = NULL; nssListIterator_Finish(iter); nssListIterator_Destroy(iter); return PR_SUCCESS; |