| 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 |