baset.h
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:5k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /* 
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is the Netscape security libraries.
  13.  * 
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are 
  16.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  17.  * Rights Reserved.
  18.  * 
  19.  * Contributor(s):
  20.  * 
  21.  * Alternatively, the contents of this file may be used under the
  22.  * terms of the GNU General Public License Version 2 or later (the
  23.  * "GPL"), in which case the provisions of the GPL are applicable 
  24.  * instead of those above.  If you wish to allow use of your 
  25.  * version of this file only under the terms of the GPL and not to
  26.  * allow others to use your version of this file under the MPL,
  27.  * indicate your decision by deleting the provisions above and
  28.  * replace them with the notice and other provisions required by
  29.  * the GPL.  If you do not delete the provisions above, a recipient
  30.  * may use your version of this file under either the MPL or the
  31.  * GPL.
  32.  */
  33. #ifndef BASET_H
  34. #define BASET_H
  35. #ifdef DEBUG
  36. static const char BASET_CVS_ID[] = "@(#) $RCSfile: baset.h,v $ $Revision: 1.1 $ $Date: 2000/03/31 19:50:09 $ $Name: NSS_3_1_1_RTM $";
  37. #endif /* DEBUG */
  38. /*
  39.  * baset.h
  40.  *
  41.  * This file contains definitions for the basic types used throughout
  42.  * nss but not available publicly.
  43.  */
  44. #ifndef NSSBASET_H
  45. #include "nssbaset.h"
  46. #endif /* NSSBASET_H */
  47. #include "plhash.h"
  48. PR_BEGIN_EXTERN_C
  49. /*
  50.  * nssArenaMark
  51.  *
  52.  * This type is used to mark the current state of an NSSArena.
  53.  */
  54. struct nssArenaMarkStr;
  55. typedef struct nssArenaMarkStr nssArenaMark;
  56. #ifdef DEBUG
  57. /*
  58.  * ARENA_THREADMARK
  59.  * 
  60.  * Optionally, this arena implementation can be compiled with some
  61.  * runtime checking enabled, which will catch the situation where
  62.  * one thread "marks" the arena, another thread allocates memory,
  63.  * and then the mark is released.  Usually this is a surprise to
  64.  * the second thread, and this leads to weird runtime errors.
  65.  * Define ARENA_THREADMARK to catch these cases; we define it for all
  66.  * (internal and external) debug builds.
  67.  */
  68. #define ARENA_THREADMARK
  69. /*
  70.  * ARENA_DESTRUCTOR_LIST
  71.  *
  72.  * Unfortunately, our pointer-tracker facility, used in debug
  73.  * builds to agressively fight invalid pointers, requries that
  74.  * pointers be deregistered when objects are destroyed.  This
  75.  * conflicts with the standard arena usage where "memory-only"
  76.  * objects (that don't hold onto resources outside the arena)
  77.  * can be allocated in an arena, and never destroyed other than
  78.  * when the arena is destroyed.  Therefore we have added a
  79.  * destructor-registratio facility to our arenas.  This was not
  80.  * a simple decision, since we're getting ever-further away from
  81.  * the original arena philosophy.  However, it was felt that
  82.  * adding this in debug builds wouldn't be so bad; as it would
  83.  * discourage them from being used for "serious" purposes.
  84.  * This facility requires ARENA_THREADMARK to be defined.
  85.  */
  86. #ifdef ARENA_THREADMARK
  87. #define ARENA_DESTRUCTOR_LIST
  88. #endif /* ARENA_THREADMARK */
  89. #endif /* DEBUG */
  90. /*
  91.  * nssPointerTracker
  92.  *
  93.  * This type is used in debug builds (both external and internal) to
  94.  * track our object pointers.  Objects of this type must be statically
  95.  * allocated, which means the structure size must be available to the
  96.  * compiler.  Therefore we must expose the contents of this structure.
  97.  * But please don't access elements directly; use the accessors.
  98.  */
  99. #ifdef DEBUG
  100. struct nssPointerTrackerStr {
  101.   PRCallOnceType once;
  102.   PRLock *lock;
  103.   PLHashTable *table;
  104. };
  105. typedef struct nssPointerTrackerStr nssPointerTracker;
  106. #endif /* DEBUG */
  107. /*
  108.  * nssStringType
  109.  *
  110.  * There are several types of strings in the real world.  We try to
  111.  * use only UTF8 and avoid the rest, but that's not always possible.
  112.  * So we have a couple converter routines to go to and from the other
  113.  * string types.  We have to be able to specify those string types,
  114.  * so we have this enumeration.
  115.  */
  116. enum nssStringTypeEnum {
  117.   nssStringType_DirectoryString,
  118.   nssStringType_TeletexString, /* Not "teletext" with trailing 't' */
  119.   nssStringType_PrintableString,
  120.   nssStringType_UniversalString,
  121.   nssStringType_BMPString,
  122.   nssStringType_UTF8String,
  123.   nssStringType_PHGString,
  124.   nssStringType_GeneralString,
  125.   nssStringType_Unknown = -1
  126. };
  127. typedef enum nssStringTypeEnum nssStringType;
  128. PR_END_EXTERN_C
  129. #endif /* BASET_H */