OLD | NEW |
| (Empty) |
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 * pkix_pl_mem.c | |
6 * | |
7 * Memory Management Functions | |
8 * | |
9 */ | |
10 | |
11 #include "pkix_pl_mem.h" | |
12 | |
13 /* | |
14 * FUNCTION: PKIX_PL_Malloc (see comments in pkix_pl_system.h) | |
15 */ | |
16 PKIX_Error * | |
17 PKIX_PL_Malloc( | |
18 PKIX_UInt32 size, | |
19 void **pMemory, | |
20 void *plContext) | |
21 { | |
22 PKIX_PL_NssContext *nssContext = NULL; | |
23 void *result = NULL; | |
24 | |
25 PKIX_ENTER(MEM, "PKIX_PL_Malloc"); | |
26 PKIX_NULLCHECK_ONE(pMemory); | |
27 | |
28 if (size == 0){ | |
29 *pMemory = NULL; | |
30 } else { | |
31 | |
32 nssContext = (PKIX_PL_NssContext *)plContext; | |
33 | |
34 if (nssContext != NULL && nssContext->arena != NULL) { | |
35 PKIX_MEM_DEBUG("\tCalling PORT_ArenaAlloc.\n"); | |
36 *pMemory = PORT_ArenaAlloc(nssContext->arena, size); | |
37 } else { | |
38 PKIX_MEM_DEBUG("\tCalling PR_Malloc.\n"); | |
39 result = (void *) PR_Malloc(size); | |
40 | |
41 if (result == NULL) { | |
42 PKIX_MEM_DEBUG("Fatal Error Occurred: " | |
43 "PR_Malloc failed.\n"); | |
44 PKIX_ERROR_ALLOC_ERROR(); | |
45 } else { | |
46 *pMemory = result; | |
47 } | |
48 } | |
49 } | |
50 | |
51 cleanup: | |
52 PKIX_RETURN(MEM); | |
53 } | |
54 | |
55 /* | |
56 * FUNCTION: PKIX_PL_Calloc (see comments in pkix_pl_system.h) | |
57 */ | |
58 PKIX_Error * | |
59 PKIX_PL_Calloc( | |
60 PKIX_UInt32 nElem, | |
61 PKIX_UInt32 elSize, | |
62 void **pMemory, | |
63 void *plContext) | |
64 { | |
65 PKIX_PL_NssContext *nssContext = NULL; | |
66 void *result = NULL; | |
67 | |
68 PKIX_ENTER(MEM, "PKIX_PL_Calloc"); | |
69 PKIX_NULLCHECK_ONE(pMemory); | |
70 | |
71 if ((nElem == 0) || (elSize == 0)){ | |
72 *pMemory = NULL; | |
73 } else { | |
74 | |
75 nssContext = (PKIX_PL_NssContext *)plContext; | |
76 | |
77 if (nssContext != NULL && nssContext->arena != NULL) { | |
78 PKIX_MEM_DEBUG("\tCalling PORT_ArenaAlloc.\n"); | |
79 *pMemory = PORT_ArenaAlloc(nssContext->arena, elSize); | |
80 } else { | |
81 PKIX_MEM_DEBUG("\tCalling PR_Calloc.\n"); | |
82 result = (void *) PR_Calloc(nElem, elSize); | |
83 | |
84 if (result == NULL) { | |
85 PKIX_MEM_DEBUG("Fatal Error Occurred: " | |
86 "PR_Calloc failed.\n"); | |
87 PKIX_ERROR_ALLOC_ERROR(); | |
88 } else { | |
89 *pMemory = result; | |
90 } | |
91 } | |
92 } | |
93 | |
94 cleanup: | |
95 | |
96 PKIX_RETURN(MEM); | |
97 } | |
98 | |
99 /* | |
100 * FUNCTION: PKIX_PL_Realloc (see comments in pkix_pl_system.h) | |
101 */ | |
102 PKIX_Error * | |
103 PKIX_PL_Realloc( | |
104 void *ptr, | |
105 PKIX_UInt32 size, | |
106 void **pMemory, | |
107 void *plContext) | |
108 { | |
109 PKIX_PL_NssContext *nssContext = NULL; | |
110 void *result = NULL; | |
111 | |
112 PKIX_ENTER(MEM, "PKIX_PL_Realloc"); | |
113 PKIX_NULLCHECK_ONE(pMemory); | |
114 | |
115 nssContext = (PKIX_PL_NssContext *)plContext; | |
116 | |
117 if (nssContext != NULL && nssContext->arena != NULL) { | |
118 PKIX_MEM_DEBUG("\tCalling PORT_ArenaAlloc.\n"); | |
119 result = PORT_ArenaAlloc(nssContext->arena, size); | |
120 | |
121 if (result){ | |
122 PKIX_MEM_DEBUG("\tCalling PORT_Memcpy.\n"); | |
123 PORT_Memcpy(result, ptr, size); | |
124 } | |
125 *pMemory = result; | |
126 } else { | |
127 PKIX_MEM_DEBUG("\tCalling PR_Realloc.\n"); | |
128 result = (void *) PR_Realloc(ptr, size); | |
129 | |
130 if (result == NULL) { | |
131 if (size == 0){ | |
132 *pMemory = NULL; | |
133 } else { | |
134 PKIX_MEM_DEBUG | |
135 ("Fatal Error Occurred: " | |
136 "PR_Realloc failed.\n"); | |
137 PKIX_ERROR_ALLOC_ERROR(); | |
138 } | |
139 } else { | |
140 *pMemory = result; | |
141 } | |
142 } | |
143 | |
144 cleanup: | |
145 | |
146 PKIX_RETURN(MEM); | |
147 } | |
148 | |
149 /* | |
150 * FUNCTION: PKIX_PL_Free (see comments in pkix_pl_system.h) | |
151 */ | |
152 PKIX_Error * | |
153 PKIX_PL_Free( | |
154 void *ptr, | |
155 /* ARGSUSED */ void *plContext) | |
156 { | |
157 PKIX_PL_NssContext *context = NULL; | |
158 | |
159 PKIX_ENTER(MEM, "PKIX_PL_Free"); | |
160 | |
161 context = (PKIX_PL_NssContext *) plContext; | |
162 if (context == NULL || context->arena == NULL) { | |
163 PKIX_MEM_DEBUG("\tCalling PR_Free.\n"); | |
164 (void) PR_Free(ptr); | |
165 } | |
166 | |
167 PKIX_RETURN(MEM); | |
168 } | |
OLD | NEW |