OLD | NEW |
1 /* This Source Code Form is subject to the terms of the Mozilla Public | 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 | 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/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
4 | 4 |
5 /* | 5 /* |
6 * item.c | 6 * item.c |
7 * | 7 * |
8 * This contains some item-manipulation code. | 8 * This contains some item-manipulation code. |
9 */ | 9 */ |
10 | 10 |
11 #ifndef BASE_H | 11 #ifndef BASE_H |
12 #include "base.h" | 12 #include "base.h" |
13 #endif /* BASE_H */ | 13 #endif /* BASE_H */ |
14 | 14 |
15 /* | 15 /* |
16 * nssItem_Create | 16 * nssItem_Create |
17 * | 17 * |
18 * -- fgmr comments -- | 18 * -- fgmr comments -- |
19 * | 19 * |
20 * The error may be one of the following values: | 20 * The error may be one of the following values: |
21 * NSS_ERROR_INVALID_ARENA | 21 * NSS_ERROR_INVALID_ARENA |
22 * NSS_ERROR_NO_MEMORY | 22 * NSS_ERROR_NO_MEMORY |
23 * NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD | 23 * NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD |
24 * NSS_ERROR_INVALID_POINTER | 24 * NSS_ERROR_INVALID_POINTER |
25 * | 25 * |
26 * Return value: | 26 * Return value: |
27 * A pointer to an NSSItem upon success | 27 * A pointer to an NSSItem upon success |
28 * NULL upon failure | 28 * NULL upon failure |
29 */ | 29 */ |
30 | 30 |
31 NSS_IMPLEMENT NSSItem * | 31 NSS_IMPLEMENT NSSItem * |
32 nssItem_Create | 32 nssItem_Create(NSSArena *arenaOpt, NSSItem *rvOpt, PRUint32 length, |
33 ( | 33 const void *data) |
34 NSSArena *arenaOpt, | |
35 NSSItem *rvOpt, | |
36 PRUint32 length, | |
37 const void *data | |
38 ) | |
39 { | 34 { |
40 NSSItem *rv = (NSSItem *)NULL; | 35 NSSItem *rv = (NSSItem *)NULL; |
41 | 36 |
42 #ifdef DEBUG | 37 #ifdef DEBUG |
43 if( (NSSArena *)NULL != arenaOpt ) { | 38 if ((NSSArena *)NULL != arenaOpt) { |
44 if( PR_SUCCESS != nssArena_verifyPointer(arenaOpt) ) { | 39 if (PR_SUCCESS != nssArena_verifyPointer(arenaOpt)) { |
45 return (NSSItem *)NULL; | 40 return (NSSItem *)NULL; |
| 41 } |
46 } | 42 } |
47 } | |
48 | 43 |
49 if( (const void *)NULL == data ) { | 44 if ((const void *)NULL == data) { |
50 if( length > 0 ) { | 45 if (length > 0) { |
51 nss_SetError(NSS_ERROR_INVALID_POINTER); | 46 nss_SetError(NSS_ERROR_INVALID_POINTER); |
52 return (NSSItem *)NULL; | 47 return (NSSItem *)NULL; |
| 48 } |
53 } | 49 } |
54 } | |
55 #endif /* DEBUG */ | 50 #endif /* DEBUG */ |
56 | 51 |
57 if( (NSSItem *)NULL == rvOpt ) { | 52 if ((NSSItem *)NULL == rvOpt) { |
58 rv = (NSSItem *)nss_ZNEW(arenaOpt, NSSItem); | 53 rv = (NSSItem *)nss_ZNEW(arenaOpt, NSSItem); |
59 if( (NSSItem *)NULL == rv ) { | 54 if ((NSSItem *)NULL == rv) { |
60 goto loser; | 55 goto loser; |
| 56 } |
| 57 } else { |
| 58 rv = rvOpt; |
61 } | 59 } |
62 } else { | |
63 rv = rvOpt; | |
64 } | |
65 | 60 |
66 rv->size = length; | 61 rv->size = length; |
67 rv->data = nss_ZAlloc(arenaOpt, length); | 62 rv->data = nss_ZAlloc(arenaOpt, length); |
68 if( (void *)NULL == rv->data ) { | 63 if ((void *)NULL == rv->data) { |
69 goto loser; | 64 goto loser; |
70 } | 65 } |
71 | 66 |
72 if( length > 0 ) { | 67 if (length > 0) { |
73 (void)nsslibc_memcpy(rv->data, data, length); | 68 (void)nsslibc_memcpy(rv->data, data, length); |
74 } | 69 } |
75 | 70 |
76 return rv; | 71 return rv; |
77 | 72 |
78 loser: | 73 loser: |
79 if( rv != rvOpt ) { | 74 if (rv != rvOpt) { |
80 nss_ZFreeIf(rv); | 75 nss_ZFreeIf(rv); |
81 } | 76 } |
82 | 77 |
83 return (NSSItem *)NULL; | 78 return (NSSItem *)NULL; |
84 } | 79 } |
85 | 80 |
86 NSS_IMPLEMENT void | 81 NSS_IMPLEMENT void |
87 nssItem_Destroy | 82 nssItem_Destroy(NSSItem *item) |
88 ( | |
89 NSSItem *item | |
90 ) | |
91 { | 83 { |
92 nss_ClearErrorStack(); | 84 nss_ClearErrorStack(); |
93 | 85 |
94 nss_ZFreeIf(item->data); | 86 nss_ZFreeIf(item->data); |
95 nss_ZFreeIf(item); | 87 nss_ZFreeIf(item); |
96 | |
97 } | 88 } |
98 | 89 |
99 /* | 90 /* |
100 * nssItem_Duplicate | 91 * nssItem_Duplicate |
101 * | 92 * |
102 * -- fgmr comments -- | 93 * -- fgmr comments -- |
103 * | 94 * |
104 * The error may be one of the following values: | 95 * The error may be one of the following values: |
105 * NSS_ERROR_INVALID_ARENA | 96 * NSS_ERROR_INVALID_ARENA |
106 * NSS_ERROR_NO_MEMORY | 97 * NSS_ERROR_NO_MEMORY |
107 * NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD | 98 * NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD |
108 * NSS_ERROR_INVALID_ITEM | 99 * NSS_ERROR_INVALID_ITEM |
109 * | 100 * |
110 * Return value: | 101 * Return value: |
111 * A pointer to an NSSItem upon success | 102 * A pointer to an NSSItem upon success |
112 * NULL upon failure | 103 * NULL upon failure |
113 */ | 104 */ |
114 | 105 |
115 NSS_IMPLEMENT NSSItem * | 106 NSS_IMPLEMENT NSSItem * |
116 nssItem_Duplicate | 107 nssItem_Duplicate(NSSItem *obj, NSSArena *arenaOpt, NSSItem *rvOpt) |
117 ( | |
118 NSSItem *obj, | |
119 NSSArena *arenaOpt, | |
120 NSSItem *rvOpt | |
121 ) | |
122 { | 108 { |
123 #ifdef DEBUG | 109 #ifdef DEBUG |
124 if( (NSSArena *)NULL != arenaOpt ) { | 110 if ((NSSArena *)NULL != arenaOpt) { |
125 if( PR_SUCCESS != nssArena_verifyPointer(arenaOpt) ) { | 111 if (PR_SUCCESS != nssArena_verifyPointer(arenaOpt)) { |
126 return (NSSItem *)NULL; | 112 return (NSSItem *)NULL; |
| 113 } |
127 } | 114 } |
128 } | |
129 | 115 |
130 if( (NSSItem *)NULL == obj ) { | 116 if ((NSSItem *)NULL == obj) { |
131 nss_SetError(NSS_ERROR_INVALID_ITEM); | 117 nss_SetError(NSS_ERROR_INVALID_ITEM); |
132 return (NSSItem *)NULL; | 118 return (NSSItem *)NULL; |
133 } | 119 } |
134 #endif /* DEBUG */ | 120 #endif /* DEBUG */ |
135 | 121 |
136 return nssItem_Create(arenaOpt, rvOpt, obj->size, obj->data); | 122 return nssItem_Create(arenaOpt, rvOpt, obj->size, obj->data); |
137 } | 123 } |
138 | 124 |
139 #ifdef DEBUG | 125 #ifdef DEBUG |
140 /* | 126 /* |
141 * nssItem_verifyPointer | 127 * nssItem_verifyPointer |
142 * | 128 * |
143 * -- fgmr comments -- | 129 * -- fgmr comments -- |
144 * | 130 * |
145 * The error may be one of the following values: | 131 * The error may be one of the following values: |
146 * NSS_ERROR_INVALID_ITEM | 132 * NSS_ERROR_INVALID_ITEM |
147 * | 133 * |
148 * Return value: | 134 * Return value: |
149 * PR_SUCCESS upon success | 135 * PR_SUCCESS upon success |
150 * PR_FAILURE upon failure | 136 * PR_FAILURE upon failure |
151 */ | 137 */ |
152 | 138 |
153 NSS_IMPLEMENT PRStatus | 139 NSS_IMPLEMENT PRStatus |
154 nssItem_verifyPointer | 140 nssItem_verifyPointer(const NSSItem *item) |
155 ( | |
156 const NSSItem *item | |
157 ) | |
158 { | 141 { |
159 if( ((const NSSItem *)NULL == item) || | 142 if (((const NSSItem *)NULL == item) || |
160 (((void *)NULL == item->data) && (item->size > 0)) ) { | 143 (((void *)NULL == item->data) && (item->size > 0))) { |
161 nss_SetError(NSS_ERROR_INVALID_ITEM); | 144 nss_SetError(NSS_ERROR_INVALID_ITEM); |
162 return PR_FAILURE; | 145 return PR_FAILURE; |
163 } | 146 } |
164 | 147 |
165 return PR_SUCCESS; | 148 return PR_SUCCESS; |
166 } | 149 } |
167 #endif /* DEBUG */ | 150 #endif /* DEBUG */ |
168 | 151 |
169 /* | 152 /* |
170 * nssItem_Equal | 153 * nssItem_Equal |
171 * | 154 * |
172 * -- fgmr comments -- | 155 * -- fgmr comments -- |
173 * | 156 * |
174 * The error may be one of the following values: | 157 * The error may be one of the following values: |
175 * NSS_ERROR_INVALID_ITEM | 158 * NSS_ERROR_INVALID_ITEM |
176 * | 159 * |
177 * Return value: | 160 * Return value: |
178 * PR_TRUE if the items are identical | 161 * PR_TRUE if the items are identical |
179 * PR_FALSE if they aren't | 162 * PR_FALSE if they aren't |
180 * PR_FALSE upon error | 163 * PR_FALSE upon error |
181 */ | 164 */ |
182 | 165 |
183 NSS_IMPLEMENT PRBool | 166 NSS_IMPLEMENT PRBool |
184 nssItem_Equal | 167 nssItem_Equal(const NSSItem *one, const NSSItem *two, PRStatus *statusOpt) |
185 ( | |
186 const NSSItem *one, | |
187 const NSSItem *two, | |
188 PRStatus *statusOpt | |
189 ) | |
190 { | 168 { |
191 if( (PRStatus *)NULL != statusOpt ) { | 169 if ((PRStatus *)NULL != statusOpt) { |
192 *statusOpt = PR_SUCCESS; | 170 *statusOpt = PR_SUCCESS; |
193 } | 171 } |
194 | 172 |
195 if( ((const NSSItem *)NULL == one) && ((const NSSItem *)NULL == two) ) { | 173 if (((const NSSItem *)NULL == one) && ((const NSSItem *)NULL == two)) { |
196 return PR_TRUE; | 174 return PR_TRUE; |
197 } | 175 } |
198 | 176 |
199 if( ((const NSSItem *)NULL == one) || ((const NSSItem *)NULL == two) ) { | 177 if (((const NSSItem *)NULL == one) || ((const NSSItem *)NULL == two)) { |
200 return PR_FALSE; | 178 return PR_FALSE; |
201 } | 179 } |
202 | 180 |
203 if( one->size != two->size ) { | 181 if (one->size != two->size) { |
204 return PR_FALSE; | 182 return PR_FALSE; |
205 } | 183 } |
206 | 184 |
207 return nsslibc_memequal(one->data, two->data, one->size, statusOpt); | 185 return nsslibc_memequal(one->data, two->data, one->size, statusOpt); |
208 } | 186 } |
OLD | NEW |