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 + -
显示快捷键?