diff options
Diffstat (limited to 'security/nss/lib/base/hashops.c')
-rw-r--r-- | security/nss/lib/base/hashops.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/security/nss/lib/base/hashops.c b/security/nss/lib/base/hashops.c new file mode 100644 index 000000000..57b30dd1f --- /dev/null +++ b/security/nss/lib/base/hashops.c @@ -0,0 +1,64 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * hashops.c + * + * This file includes a set of PLHashAllocOps that use NSSArenas. + */ + +#ifndef BASE_H +#include "base.h" +#endif /* BASE_H */ + +static void *PR_CALLBACK +nss_arena_hash_alloc_table(void *pool, PRSize size) +{ + NSSArena *arena = (NSSArena *)NULL; + +#ifdef NSSDEBUG + if ((void *)NULL != arena) { + if (PR_SUCCESS != nssArena_verifyPointer(arena)) { + return (void *)NULL; + } + } +#endif /* NSSDEBUG */ + + return nss_ZAlloc(arena, size); +} + +static void PR_CALLBACK +nss_arena_hash_free_table(void *pool, void *item) +{ + (void)nss_ZFreeIf(item); +} + +static PLHashEntry *PR_CALLBACK +nss_arena_hash_alloc_entry(void *pool, const void *key) +{ + NSSArena *arena = NULL; + +#ifdef NSSDEBUG + if ((void *)NULL != arena) { + if (PR_SUCCESS != nssArena_verifyPointer(arena)) { + return (void *)NULL; + } + } +#endif /* NSSDEBUG */ + + return nss_ZNEW(arena, PLHashEntry); +} + +static void PR_CALLBACK +nss_arena_hash_free_entry(void *pool, PLHashEntry *he, PRUintn flag) +{ + if (HT_FREE_ENTRY == flag) { + (void)nss_ZFreeIf(he); + } +} + +NSS_IMPLEMENT_DATA PLHashAllocOps nssArenaHashAllocOps = { + nss_arena_hash_alloc_table, nss_arena_hash_free_table, + nss_arena_hash_alloc_entry, nss_arena_hash_free_entry +}; |