summaryrefslogtreecommitdiff
path: root/security/nss/lib/base
diff options
context:
space:
mode:
authorian.mcgreer%sun.com <devnull@localhost>2001-11-28 16:23:51 +0000
committerian.mcgreer%sun.com <devnull@localhost>2001-11-28 16:23:51 +0000
commit1f76ef2659e4785f0411c1dc7c70c0aa36af7b7c (patch)
treeeca905b0b3bea53d2c8314c807567912b5b31c3a /security/nss/lib/base
parentba8cfdd8b7d0dfa4ab81f470228cf11a0d13ef8d (diff)
downloadnss-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.h20
-rw-r--r--security/nss/lib/base/hash.c2
-rw-r--r--security/nss/lib/base/item.c13
-rw-r--r--security/nss/lib/base/list.c32
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;