whatnspr.c

来自「支持SSL v2/v3, TLS, PKCS #5, PKCS #7, PKCS」· C语言 代码 · 共 171 行

C
171
字号
/*  * 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. */#ifdef DEBUGstatic const char CVS_ID[] = "@(#) $RCSfile: whatnspr.c,v $ $Revision: 1.1 $ $Date: 2000/05/17 20:19:24 $ $Name: NSS_3_1_1_RTM $";#endif /* DEBUG */#ifndef BASE_H#include "base.h"#endif /* BASE_H *//* * This file isolates us from differences in NSPR versions. * We have to detect the library with which we're running at * runtime, and switch behaviours there.  This lets us do * stuff like load cryptoki modules in Communicator. * * Hey, it's the PORT layer all over again! */static int whatnspr = 0;static intset_whatnspr(  void){  /*   * The only runtime difference I could find was the   * return value of PR_dtoa.  We can't just look for   * a symbol in NSPR >=2, because it'll always be   * found (because we compile against NSPR >=2).   * Maybe we could look for a symbol merely in NSPR 1?   *   */  char buffer[64];  int decpt = 0, sign = 0;  char *rve = (char *)0;  /* extern int PR_dtoa(double, int, int, int *, int *, char **, char *, int); */  int r = (int)PR_dtoa((double)1.0, 0, 5, &decpt, &sign, &rve,                        buffer, sizeof(buffer));  switch( r ) {  case 0:  case -1:    whatnspr = 2;    /*     * If we needed to, *now* we could look up "libVersionPoint"     * and get more data there.. except all current NSPR's (up     * to NSPR 4.x at time of writing) still say 2 in their     * version structure.     */    break;  default:    whatnspr = 1;    break;  }  return whatnspr;}#define WHATNSPR (whatnspr ? whatnspr : set_whatnspr())NSS_IMPLEMENT PRStatusnss_NewThreadPrivateIndex(  PRUintn *ip){  switch( WHATNSPR ) {  case 1:    {      PRLibrary *l = (PRLibrary *)0;      void *f = PR_FindSymbolAndLibrary("PR_NewThreadPrivateID", &l);      typedef PRInt32 (*ntpt)(void);      ntpt ntp = (ntpt) f;      PR_ASSERT((void *)0 != f);      *ip = ntp();      return PR_SUCCESS;    }  case 2:  default:    return PR_NewThreadPrivateIndex(ip, NULL);  }}NSS_IMPLEMENT void *nss_GetThreadPrivate(  PRUintn i){  switch( WHATNSPR ) {  case 1:    {      PRLibrary *l = (PRLibrary *)0;      void *f = PR_FindSymbolAndLibrary("PR_GetThreadPrivate", &l);      typedef void *(*gtpt)(PRThread *, PRInt32);      gtpt gtp = (gtpt) f;      PR_ASSERT((void *)0 != f);      return gtp(PR_CurrentThread(), i);    }  case 2:  default:    return PR_GetThreadPrivate(i);  }}NSS_IMPLEMENT voidnss_SetThreadPrivate(  PRUintn i,  void *v){  switch( WHATNSPR ) {  case 1:    {      PRLibrary *l = (PRLibrary *)0;      void *f = PR_FindSymbolAndLibrary("PR_SetThreadPrivate", &l);      typedef PRStatus (*stpt)(PRThread *, PRInt32, void *);      stpt stp = (stpt) f;      PR_ASSERT((void *)0 != f);      (void)stp(PR_CurrentThread(), i, v);      return;    }  case 2:  default:    (void)PR_SetThreadPrivate(i, v);    return;  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?