diff options
Diffstat (limited to 'security/nss/lib/base/baset.h')
-rw-r--r-- | security/nss/lib/base/baset.h | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/security/nss/lib/base/baset.h b/security/nss/lib/base/baset.h new file mode 100644 index 0000000000..3953a755e5 --- /dev/null +++ b/security/nss/lib/base/baset.h @@ -0,0 +1,124 @@ +/* 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/. */ + +#ifndef BASET_H +#define BASET_H + +/* + * baset.h + * + * This file contains definitions for the basic types used throughout + * nss but not available publicly. + */ + +#ifndef NSSBASET_H +#include "nssbaset.h" +#endif /* NSSBASET_H */ + +#include "plhash.h" + +PR_BEGIN_EXTERN_C + +/* + * nssArenaMark + * + * This type is used to mark the current state of an NSSArena. + */ + +struct nssArenaMarkStr; +typedef struct nssArenaMarkStr nssArenaMark; + +#ifdef DEBUG +/* + * ARENA_THREADMARK + * + * Optionally, this arena implementation can be compiled with some + * runtime checking enabled, which will catch the situation where + * one thread "marks" the arena, another thread allocates memory, + * and then the mark is released. Usually this is a surprise to + * the second thread, and this leads to weird runtime errors. + * Define ARENA_THREADMARK to catch these cases; we define it for all + * (internal and external) debug builds. + */ +#define ARENA_THREADMARK + +/* + * ARENA_DESTRUCTOR_LIST + * + * Unfortunately, our pointer-tracker facility, used in debug + * builds to agressively fight invalid pointers, requries that + * pointers be deregistered when objects are destroyed. This + * conflicts with the standard arena usage where "memory-only" + * objects (that don't hold onto resources outside the arena) + * can be allocated in an arena, and never destroyed other than + * when the arena is destroyed. Therefore we have added a + * destructor-registratio facility to our arenas. This was not + * a simple decision, since we're getting ever-further away from + * the original arena philosophy. However, it was felt that + * adding this in debug builds wouldn't be so bad; as it would + * discourage them from being used for "serious" purposes. + * This facility requires ARENA_THREADMARK to be defined. + */ +#ifdef ARENA_THREADMARK +#define ARENA_DESTRUCTOR_LIST +#endif /* ARENA_THREADMARK */ + +#endif /* DEBUG */ + +typedef struct nssListStr nssList; +typedef struct nssListIteratorStr nssListIterator; +typedef PRBool (*nssListCompareFunc)(void *a, void *b); +typedef PRIntn (*nssListSortFunc)(void *a, void *b); +typedef void (*nssListElementDestructorFunc)(void *el); + +typedef struct nssHashStr nssHash; +typedef void(PR_CALLBACK *nssHashIterator)(const void *key, void *value, + void *arg); + +/* + * nssPointerTracker + * + * This type is used in debug builds (both external and internal) to + * track our object pointers. Objects of this type must be statically + * allocated, which means the structure size must be available to the + * compiler. Therefore we must expose the contents of this structure. + * But please don't access elements directly; use the accessors. + */ + +#ifdef DEBUG +struct nssPointerTrackerStr { + PRCallOnceType once; + PZLock *lock; + PLHashTable *table; +}; +typedef struct nssPointerTrackerStr nssPointerTracker; +#endif /* DEBUG */ + +/* + * nssStringType + * + * There are several types of strings in the real world. We try to + * use only UTF8 and avoid the rest, but that's not always possible. + * So we have a couple converter routines to go to and from the other + * string types. We have to be able to specify those string types, + * so we have this enumeration. + */ + +enum nssStringTypeEnum { + nssStringType_DirectoryString, + nssStringType_TeletexString, /* Not "teletext" with trailing 't' */ + nssStringType_PrintableString, + nssStringType_UniversalString, + nssStringType_BMPString, + nssStringType_UTF8String, + nssStringType_PHGString, + nssStringType_GeneralString, + + nssStringType_Unknown = -1 +}; +typedef enum nssStringTypeEnum nssStringType; + +PR_END_EXTERN_C + +#endif /* BASET_H */ |