base.h
来自「支持SSL v2/v3, TLS, PKCS #5, PKCS #7, PKCS」· C头文件 代码 · 共 1,064 行 · 第 1/2 页
H
1,064 行
/* * The contents of this file are subject to the Mozilla Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is the Netscape security libraries. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1994-2000 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the * terms of the GNU General Public License Version 2 or later (the * "GPL"), in which case the provisions of the GPL are applicable * instead of those above. If you wish to allow use of your * version of this file only under the terms of the GPL and not to * allow others to use your version of this file under the MPL, * indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by * the GPL. If you do not delete the provisions above, a recipient * may use your version of this file under either the MPL or the * GPL. */#ifndef BASE_H#define BASE_H#ifdef DEBUGstatic const char BASE_CVS_ID[] = "@(#) $RCSfile: base.h,v $ $Revision: 1.3 $ $Date: 2000/05/17 20:19:23 $ $Name: NSS_3_1_1_RTM $";#endif /* DEBUG *//* * base.h * * This header file contains basic prototypes and preprocessor * definitions used throughout nss but not available publicly. */#ifndef BASET_H#include "baset.h"#endif /* BASET_H */#ifndef NSSBASE_H#include "nssbase.h"#endif /* NSSBASE_H */#include "plhash.h"PR_BEGIN_EXTERN_C/* * NSSArena * * The nonpublic methods relating to this type are: * * nssArena_Create -- constructor * nssArena_Destroy * nssArena_Mark * nssArena_Release * nssArena_Unmark * * nss_ZAlloc * nss_ZFreeIf * nss_ZRealloc * * Additionally, there are some preprocessor macros: * * nss_ZNEW * nss_ZNEWARRAY * * In debug builds, the following calls are available: * * nssArena_verifyPointer * nssArena_registerDestructor * nssArena_deregisterDestructor * * The following preprocessor macro is also always available: * * nssArena_VERIFYPOINTER * * A constant PLHashAllocOps structure is available for users * of the NSPL PLHashTable routines. * * nssArenaHashAllocOps *//* * nssArena_Create * * This routine creates a new memory arena. This routine may return * NULL upon error, in which case it will have set an error on the * error stack. * * The error may be one of the following values: * NSS_ERROR_NO_MEMORY * * Return value: * NULL upon error * A pointer to an NSSArena upon success *//* * XXX fgmr * Arenas can be named upon creation; this is mostly of use when * debugging. Should we expose that here, allowing an optional * "const char *name" argument? Should the public version of this * call (NSSArena_Create) have it too? */NSS_EXTERN NSSArena *nssArena_Create( void);extern const NSSError NSS_ERROR_NO_MEMORY;/* * nssArena_Destroy * * This routine will destroy the specified arena, freeing all memory * allocated from it. This routine returns a PRStatus value; if * successful, it will return PR_SUCCESS. If unsuccessful, it will * set an error on the error stack and return PR_FAILURE. * * The error may be one of the following values: * NSS_ERROR_INVALID_ARENA * * Return value: * PR_SUCCESS * PR_FAILURE */NSS_EXTERN PRStatusnssArena_Destroy( NSSArena *arena);extern const NSSError NSS_ERROR_INVALID_ARENA;/* * nssArena_Mark * * This routine "marks" the current state of an arena. Space * allocated after the arena has been marked can be freed by * releasing the arena back to the mark with nssArena_Release, * or committed by calling nssArena_Unmark. When successful, * this routine returns a valid nssArenaMark pointer. This * routine may return NULL upon error, in which case it will * have set an error on the error stack. * * The error may be one of the following values: * NSS_ERROR_INVALID_ARENA * NSS_ERROR_NO_MEMORY * NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD * * Return value: * NULL upon failure * An nssArenaMark pointer upon success */NSS_EXTERN nssArenaMark *nssArena_Mark( NSSArena *arena);extern const NSSError NSS_ERROR_INVALID_ARENA;extern const NSSError NSS_ERROR_NO_MEMORY;extern const NSSError NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD;/* * nssArena_Release * * This routine invalidates and releases all memory allocated from * the specified arena after the point at which the specified mark * was obtained. This routine returns a PRStatus value; if successful, * it will return PR_SUCCESS. If unsuccessful, it will set an error * on the error stack and return PR_FAILURE. * * The error may be one of the following values: * NSS_ERROR_INVALID_ARENA * NSS_ERROR_INVALID_ARENA_MARK * NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD * * Return value: * PR_SUCCESS * PR_FAILURE */NSS_EXTERN PRStatusnssArena_Release( NSSArena *arena, nssArenaMark *arenaMark);extern const NSSError NSS_ERROR_INVALID_ARENA;extern const NSSError NSS_ERROR_INVALID_ARENA_MARK;/* * nssArena_Unmark * * This routine "commits" the indicated mark and any marks after * it, making them unreleasable. Note that any earlier marks can * still be released, and such a release will invalidate these * later unmarked regions. If an arena is to be safely shared by * more than one thread, all marks must be either released or * unmarked. This routine returns a PRStatus value; if successful, * it will return PR_SUCCESS. If unsuccessful, it will set an error * on the error stack and return PR_FAILURE. * * The error may be one of the following values: * NSS_ERROR_INVALID_ARENA * NSS_ERROR_INVALID_ARENA_MARK * NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD * * Return value: * PR_SUCCESS * PR_FAILURE */NSS_EXTERN PRStatusnssArena_Unmark( NSSArena *arena, nssArenaMark *arenaMark);extern const NSSError NSS_ERROR_INVALID_ARENA;extern const NSSError NSS_ERROR_INVALID_ARENA_MARK;extern const NSSError NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD;#ifdef ARENA_DESTRUCTOR_LIST/* * nssArena_registerDestructor * * This routine stores a pointer to a callback and an arbitrary * pointer-sized argument in the arena, at the current point in * the mark stack. If the arena is destroyed, or an "earlier" * mark is released, then this destructor will be called at that * time. Note that the destructor will be called with the arena * locked, which means the destructor may free memory in that * arena, but it may not allocate or cause to be allocated any * memory. This callback facility was included to support our * debug-version pointer-tracker feature; overuse runs counter to * the the original intent of arenas. This routine returns a * PRStatus value; if successful, it will return PR_SUCCESS. If * unsuccessful, it will set an error on the error stack and * return PR_FAILURE. * * The error may be one of the following values: * NSS_ERROR_INVALID_ARENA * NSS_ERROR_NO_MEMORY * * Return value: * PR_SUCCESS * PR_FAILURE */NSS_EXTERN PRStatusnssArena_registerDestructor( NSSArena *arena, void (*destructor)(void *argument), void *arg);extern const NSSError NSS_ERROR_INVALID_ARENA;extern const NSSError NSS_ERROR_NO_MEMORY;/* * nssArena_deregisterDestructor * * This routine will remove the first destructor in the specified * arena which has the specified destructor and argument values. * The destructor will not be called. This routine returns a * PRStatus value; if successful, it will return PR_SUCCESS. If * unsuccessful, it will set an error on the error stack and * return PR_FAILURE. * * The error may be one of the following values: * NSS_ERROR_INVALID_ARENA * NSS_ERROR_NOT_FOUND * * Return value: * PR_SUCCESS * PR_FAILURE */NSS_EXTERN PRStatusnssArena_deregisterDestructor( NSSArena *arena, void (*destructor)(void *argument), void *arg);extern const NSSError NSS_ERROR_INVALID_ITEM;extern const NSSError NSS_ERROR_INVALID_ARENA;extern const NSSError NSS_ERROR_NOT_FOUND;#endif /* ARENA_DESTRUCTOR_LIST *//* * nss_ZAlloc * * This routine allocates and zeroes a section of memory of the * size, and returns to the caller a pointer to that memory. If * the optional arena argument is non-null, the memory will be * obtained from that arena; otherwise, the memory will be obtained * from the heap. This routine may return NULL upon error, in * which case it will have set an error upon the error stack. The * value specified for size may be zero; in which case a valid * zero-length block of memory will be allocated. This block may * be expanded by calling nss_ZRealloc. * * The error may be one of the following values: * NSS_ERROR_INVALID_ARENA * NSS_ERROR_NO_MEMORY * NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD * * Return value: * NULL upon error * A pointer to the new segment of zeroed memory */NSS_EXTERN void *nss_ZAlloc( NSSArena *arenaOpt, PRUint32 size);extern const NSSError NSS_ERROR_INVALID_ARENA;extern const NSSError NSS_ERROR_NO_MEMORY;extern const NSSError NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD;/* * nss_ZFreeIf * * If the specified pointer is non-null, then the region of memory * to which it points -- which must have been allocated with * nss_ZAlloc -- will be zeroed and released. This routine * returns a PRStatus value; if successful, it will return PR_SUCCESS. * If unsuccessful, it will set an error on the error stack and return * PR_FAILURE. * * The error may be one of the following values: * NSS_ERROR_INVALID_POINTER * * Return value: * PR_SUCCESS * PR_FAILURE */NSS_EXTERN PRStatusnss_ZFreeIf( void *pointer);extern const NSSError NSS_ERROR_INVALID_POINTER;/* * nss_ZRealloc * * This routine reallocates a block of memory obtained by calling * nss_ZAlloc or nss_ZRealloc. The portion of memory * between the new and old sizes -- which is either being newly * obtained or released -- is in either case zeroed. This routine * may return NULL upon failure, in which case it will have placed * an error on the error stack. * * The error may be one of the following values: * NSS_ERROR_INVALID_POINTER * NSS_ERROR_NO_MEMORY * NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD * * Return value: * NULL upon error * A pointer to the replacement segment of memory */NSS_EXTERN void *nss_ZRealloc( void *pointer, PRUint32 newSize);extern const NSSError NSS_ERROR_INVALID_POINTER;extern const NSSError NSS_ERROR_NO_MEMORY;extern const NSSError NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD;/* * nss_ZNEW * * This preprocessor macro will allocate memory for a new object * of the specified type with nss_ZAlloc, and will cast the * return value appropriately. If the optional arena argument is * non-null, the memory will be obtained from that arena; otherwise, * the memory will be obtained from the heap. This routine may * return NULL upon error, in which case it will have set an error * upon the error stack. * * The error may be one of the following values: * NSS_ERROR_INVALID_ARENA * NSS_ERROR_NO_MEMORY * * Return value: * NULL upon error * A pointer to the new segment of zeroed memory *//* The following line exceeds 72 characters, but emacs screws up if I split it. */#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))/* * nss_ZNEWARRAY * * This preprocessor macro will allocate memory for an array of * new objects, and will cast the return value appropriately. * If the optional arena argument is non-null, the memory will * be obtained from that arena; otherwise, the memory will be * obtained from the heap. This routine may return NULL upon * error, in which case it will have set an error upon the error * stack. The array size may be specified as zero. * * The error may be one of the following values: * NSS_ERROR_INVALID_ARENA * NSS_ERROR_NO_MEMORY * * Return value: * NULL upon error * A pointer to the new segment of zeroed memory *//* The following line exceeds 72 characters, but emacs screws up if I split it. */#define nss_ZNEWARRAY(arenaOpt, type, quantity) ((type *)nss_ZAlloc((arenaOpt), sizeof(type) * (quantity)))/* * nssArena_verifyPointer * * This method is only present in debug builds. * * If the specified pointer is a valid pointer to an NSSArena object, * this routine will return PR_SUCCESS. Otherwise, it will put an * error on the error stack and return PR_FAILURE. * * The error may be one of the following values: * NSS_ERROR_INVALID_ARENA * * Return value: * PR_SUCCESS if the pointer is valid * PR_FAILURE if it isn't */#ifdef DEBUGNSS_EXTERN PRStatusnssArena_verifyPointer( const NSSArena *arena);extern const NSSError NSS_ERROR_INVALID_ARENA;#endif /* DEBUG *//* * nssArena_VERIFYPOINTER * * This macro is always available. In debug builds it will call * nssArena_verifyPointer; in non-debug builds, it will merely * check that the pointer is not null. Note that in non-debug * builds it cannot place an error on the error stack. * * Return value: * PR_SUCCESS if the pointer is valid * PR_FAILURE if it isn't */#ifdef DEBUG#define nssArena_VERIFYPOINTER(p) nssArena_verifyPointer(p)#else /* DEBUG *//* The following line exceeds 72 characters, but emacs screws up if I split it. */#define nssArena_VERIFYPOINTER(p) (((NSSArena *)NULL == (p))?PR_FAILURE:PR_SUCCESS)#endif /* DEBUG *//* * nssArenaHashAllocOps * * This constant structure contains allocation callbacks designed for * use with the NSPL routine PL_NewHashTable. For example: * * NSSArena *hashTableArena = nssArena_Create(); * PLHashTable *t = PL_NewHashTable(n, hasher, key_compare, * value_compare, nssArenaHashAllocOps, hashTableArena); */NSS_EXTERN_DATA PLHashAllocOps nssArenaHashAllocOps;/* * The error stack * * The nonpublic methods relating to the error stack are: * * nss_SetError * nss_ClearErrorStack *//* * nss_SetError * * This routine places a new error code on the top of the calling * thread's error stack. Calling this routine wiht an error code * of zero will clear the error stack. */NSS_EXTERN voidnss_SetError(
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?