Line | Count | Source (jump to first uncovered line) |
1 | | /* This Source Code Form is subject to the terms of the Mozilla Public |
2 | | * License, v. 2.0. If a copy of the MPL was not distributed with this |
3 | | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
4 | | |
5 | | /* |
6 | | * libc.c |
7 | | * |
8 | | * This file contains our wrappers/reimplementations for "standard" |
9 | | * libc functions. Things like "memcpy." We add to this as we need |
10 | | * it. Oh, and let's keep it in alphabetical order, should it ever |
11 | | * get large. Most string/character stuff should be in utf8.c, not |
12 | | * here. This file (and maybe utf8.c) should be the only ones in |
13 | | * NSS to include files with angle brackets. |
14 | | */ |
15 | | |
16 | | #ifndef BASE_H |
17 | | #include "base.h" |
18 | | #endif /* BASE_H */ |
19 | | |
20 | | #include <string.h> /* memcpy, memset */ |
21 | | |
22 | | /* |
23 | | * nsslibc_memcpy |
24 | | * nsslibc_memset |
25 | | * nsslibc_offsetof |
26 | | * nsslibc_memequal |
27 | | */ |
28 | | |
29 | | /* |
30 | | * nsslibc_memcpy |
31 | | * |
32 | | * Errors: |
33 | | * NSS_ERROR_INVALID_POINTER |
34 | | * |
35 | | * Return value: |
36 | | * NULL on error |
37 | | * The destination pointer on success |
38 | | */ |
39 | | |
40 | | NSS_IMPLEMENT void * |
41 | | nsslibc_memcpy(void *dest, const void *source, PRUint32 n) |
42 | 347k | { |
43 | | #ifdef NSSDEBUG |
44 | | if (((void *)NULL == dest) || ((const void *)NULL == source)) { |
45 | | nss_SetError(NSS_ERROR_INVALID_POINTER); |
46 | | return (void *)NULL; |
47 | | } |
48 | | #endif /* NSSDEBUG */ |
49 | | |
50 | 347k | return memcpy(dest, source, (size_t)n); |
51 | 347k | } |
52 | | |
53 | | /* |
54 | | * nsslibc_memset |
55 | | * |
56 | | * Errors: |
57 | | * NSS_ERROR_INVALID_POINTER |
58 | | * |
59 | | * Return value: |
60 | | * NULL on error |
61 | | * The destination pointer on success |
62 | | */ |
63 | | |
64 | | NSS_IMPLEMENT void * |
65 | | nsslibc_memset(void *dest, PRUint8 byte, PRUint32 n) |
66 | 1.95M | { |
67 | | #ifdef NSSDEBUG |
68 | | if (((void *)NULL == dest)) { |
69 | | nss_SetError(NSS_ERROR_INVALID_POINTER); |
70 | | return (void *)NULL; |
71 | | } |
72 | | #endif /* NSSDEBUG */ |
73 | | |
74 | 1.95M | return memset(dest, (int)byte, (size_t)n); |
75 | 1.95M | } |
76 | | |
77 | | /* |
78 | | * nsslibc_memequal |
79 | | * |
80 | | * Errors: |
81 | | * NSS_ERROR_INVALID_POINTER |
82 | | * |
83 | | * Return value: |
84 | | * PR_TRUE if they match |
85 | | * PR_FALSE if they don't |
86 | | * PR_FALSE upon error |
87 | | */ |
88 | | |
89 | | NSS_IMPLEMENT PRBool |
90 | | nsslibc_memequal(const void *a, const void *b, PRUint32 len, |
91 | | PRStatus *statusOpt) |
92 | 691k | { |
93 | | #ifdef NSSDEBUG |
94 | | if ((((void *)NULL == a) || ((void *)NULL == b))) { |
95 | | nss_SetError(NSS_ERROR_INVALID_POINTER); |
96 | | if ((PRStatus *)NULL != statusOpt) { |
97 | | *statusOpt = PR_FAILURE; |
98 | | } |
99 | | return PR_FALSE; |
100 | | } |
101 | | #endif /* NSSDEBUG */ |
102 | | |
103 | 691k | if ((PRStatus *)NULL != statusOpt) { |
104 | 691k | *statusOpt = PR_SUCCESS; |
105 | 691k | } |
106 | | |
107 | 691k | if (0 == memcmp(a, b, len)) { |
108 | 691k | return PR_TRUE; |
109 | 691k | } else { |
110 | 322 | return PR_FALSE; |
111 | 322 | } |
112 | 691k | } |
113 | | |
114 | | /* |
115 | | * nsslibc_memcmp |
116 | | */ |
117 | | |
118 | | NSS_IMPLEMENT PRInt32 |
119 | | nsslibc_memcmp(const void *a, const void *b, PRUint32 len, PRStatus *statusOpt) |
120 | 0 | { |
121 | 0 | int v; |
122 | |
|
123 | | #ifdef NSSDEBUG |
124 | | if ((((void *)NULL == a) || ((void *)NULL == b))) { |
125 | | nss_SetError(NSS_ERROR_INVALID_POINTER); |
126 | | if ((PRStatus *)NULL != statusOpt) { |
127 | | *statusOpt = PR_FAILURE; |
128 | | } |
129 | | return -2; |
130 | | } |
131 | | #endif /* NSSDEBUG */ |
132 | |
|
133 | 0 | if ((PRStatus *)NULL != statusOpt) { |
134 | 0 | *statusOpt = PR_SUCCESS; |
135 | 0 | } |
136 | |
|
137 | 0 | v = memcmp(a, b, len); |
138 | 0 | return (PRInt32)v; |
139 | 0 | } |
140 | | |
141 | | /* |
142 | | * offsetof is a preprocessor definition |
143 | | */ |