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

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. #ifdef DEBUG
  34. static const char CVS_ID[] = "@(#) $RCSfile: libc.c,v $ $Revision: 1.1 $ $Date: 2000/03/31 19:50:16 $ $Name: NSS_3_1_1_RTM $";
  35. #endif /* DEBUG */
  36. /*
  37.  * libc.c
  38.  *
  39.  * This file contains our wrappers/reimplementations for "standard" 
  40.  * libc functions.  Things like "memcpy."  We add to this as we need 
  41.  * it.  Oh, and let's keep it in alphabetical order, should it ever 
  42.  * get large.  Most string/character stuff should be in utf8.c, not 
  43.  * here.  This file (and maybe utf8.c) should be the only ones in
  44.  * NSS to include files with angle brackets.
  45.  */
  46. #ifndef BASE_H
  47. #include "base.h"
  48. #endif /* BASE_H */
  49. #include <string.h> /* memcpy, memset */
  50. /*
  51.  * nsslibc_memcpy
  52.  * nsslibc_memset
  53.  * nsslibc_offsetof
  54.  * nsslibc_memequal
  55.  */
  56. /*
  57.  * nsslibc_memcpy
  58.  *
  59.  * Errors:
  60.  *  NSS_ERROR_INVALID_POINTER
  61.  *
  62.  * Return value:
  63.  *  NULL on error
  64.  *  The destination pointer on success
  65.  */
  66. NSS_IMPLEMENT void *
  67. nsslibc_memcpy
  68. (
  69.   void *dest,
  70.   const void *source,
  71.   PRUint32 n
  72. )
  73. {
  74. #ifdef NSSDEBUG
  75.   if( ((void *)NULL == dest) || ((const void *)NULL == source) ) {
  76.     nss_SetError(NSS_ERROR_INVALID_POINTER);
  77.     return (void *)NULL;
  78.   }
  79. #endif /* NSSDEBUG */
  80.   return memcpy(dest, source, (size_t)n);
  81. }
  82. /*
  83.  * nsslibc_memset
  84.  *
  85.  * Errors:
  86.  *  NSS_ERROR_INVALID_POINTER
  87.  *
  88.  * Return value:
  89.  *  NULL on error
  90.  *  The destination pointer on success
  91.  */
  92. NSS_IMPLEMENT void *
  93. nsslibc_memset
  94. (
  95.   void *dest,
  96.   PRUint8 byte,
  97.   PRUint32 n
  98. )
  99. {
  100. #ifdef NSSDEBUG
  101.   if( ((void *)NULL == dest) ) {
  102.     nss_SetError(NSS_ERROR_INVALID_POINTER);
  103.     return (void *)NULL;
  104.   }
  105. #endif /* NSSDEBUG */
  106.   return memset(dest, (int)byte, (size_t)n);
  107. }
  108. /*
  109.  * nsslibc_memequal
  110.  *
  111.  * Errors:
  112.  *  NSS_ERROR_INVALID_POINTER
  113.  *
  114.  * Return value:
  115.  *  PR_TRUE if they match
  116.  *  PR_FALSE if they don't
  117.  *  PR_FALSE upon error
  118.  */
  119. NSS_IMPLEMENT PRBool
  120. nsslibc_memequal
  121. (
  122.   const void *a,
  123.   const void *b,
  124.   PRUint32 len,
  125.   PRStatus *statusOpt
  126. )
  127. {
  128. #ifdef NSSDEBUG
  129.   if( (((void *)NULL == a) || ((void *)NULL == b)) ) {
  130.     nss_SetError(NSS_ERROR_INVALID_POINTER);
  131.     if( (PRStatus *)NULL != statusOpt ) {
  132.       *statusOpt = PR_FAILURE;
  133.     }
  134.     return PR_FALSE;
  135.   }
  136. #endif /* NSSDEBUG */
  137.   if( (PRStatus *)NULL != statusOpt ) {
  138.     *statusOpt = PR_SUCCESS;
  139.   }
  140.   if( 0 == memcmp(a, b, len) ) {
  141.     return PR_TRUE;
  142.   } else {
  143.     return PR_FALSE;
  144.   }
  145. }
  146. /*
  147.  * nsslibc_memcmp
  148.  */
  149. NSS_IMPLEMENT PRInt32
  150. nsslibc_memcmp
  151. (
  152.   const void *a,
  153.   const void *b,
  154.   PRUint32 len,
  155.   PRStatus *statusOpt
  156. )
  157. {
  158.   int v;
  159. #ifdef NSSDEBUG
  160.   if( (((void *)NULL == a) || ((void *)NULL == b)) ) {
  161.     nss_SetError(NSS_ERROR_INVALID_POINTER);
  162.     if( (PRStatus *)NULL != statusOpt ) {
  163.       *statusOpt = PR_FAILURE;
  164.     }
  165.     return -2;
  166.   }
  167. #endif /* NSSDEBUG */
  168.   if( (PRStatus *)NULL != statusOpt ) {
  169.     *statusOpt = PR_SUCCESS;
  170.   }
  171.   v = memcmp(a, b, len);
  172.   return (PRInt32)v;
  173. }
  174. /*
  175.  * offsetof is a preprocessor definition
  176.  */