xref: /aosp_15_r20/external/pdfium/third_party/lcms/0000-cmserr-changes.patch (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Workerdiff --git a/third_party/lcms/src/cmserr.c b/third_party/lcms/src/cmserr.c
2*3ac0a46fSAndroid Build Coastguard Workerindex 700152ee3..3c3848b2a 100644
3*3ac0a46fSAndroid Build Coastguard Worker--- a/third_party/lcms/src/cmserr.c
4*3ac0a46fSAndroid Build Coastguard Worker+++ b/third_party/lcms/src/cmserr.c
5*3ac0a46fSAndroid Build Coastguard Worker@@ -25,6 +25,8 @@
6*3ac0a46fSAndroid Build Coastguard Worker
7*3ac0a46fSAndroid Build Coastguard Worker #include "lcms2_internal.h"
8*3ac0a46fSAndroid Build Coastguard Worker
9*3ac0a46fSAndroid Build Coastguard Worker+#include "core/fxcrt/fx_memory.h"
10*3ac0a46fSAndroid Build Coastguard Worker+#include "core/fxcrt/fx_system.h"
11*3ac0a46fSAndroid Build Coastguard Worker
12*3ac0a46fSAndroid Build Coastguard Worker // This function is here to help applications to prevent mixing lcms versions on header and shared objects.
13*3ac0a46fSAndroid Build Coastguard Worker int CMSEXPORT cmsGetEncodedCMMversion(void)
14*3ac0a46fSAndroid Build Coastguard Worker@@ -67,140 +67,75 @@ long int CMSEXPORT cmsfilelength(FILE* f)
15*3ac0a46fSAndroid Build Coastguard Worker     return n;
16*3ac0a46fSAndroid Build Coastguard Worker }
17*3ac0a46fSAndroid Build Coastguard Worker
18*3ac0a46fSAndroid Build Coastguard Worker-
19*3ac0a46fSAndroid Build Coastguard Worker-// Memory handling ------------------------------------------------------------------
20*3ac0a46fSAndroid Build Coastguard Worker-//
21*3ac0a46fSAndroid Build Coastguard Worker-// This is the interface to low-level memory management routines. By default a simple
22*3ac0a46fSAndroid Build Coastguard Worker-// wrapping to malloc/free/realloc is provided, although there is a limit on the max
23*3ac0a46fSAndroid Build Coastguard Worker-// amount of memoy that can be reclaimed. This is mostly as a safety feature to prevent
24*3ac0a46fSAndroid Build Coastguard Worker-// bogus or evil code to allocate huge blocks that otherwise lcms would never need.
25*3ac0a46fSAndroid Build Coastguard Worker-
26*3ac0a46fSAndroid Build Coastguard Worker-#define MAX_MEMORY_FOR_ALLOC  ((cmsUInt32Number)(1024U*1024U*512U))
27*3ac0a46fSAndroid Build Coastguard Worker-
28*3ac0a46fSAndroid Build Coastguard Worker-// User may override this behaviour by using a memory plug-in, which basically replaces
29*3ac0a46fSAndroid Build Coastguard Worker-// the default memory management functions. In this case, no check is performed and it
30*3ac0a46fSAndroid Build Coastguard Worker-// is up to the plug-in writer to keep in the safe side. There are only three functions
31*3ac0a46fSAndroid Build Coastguard Worker-// required to be implemented: malloc, realloc and free, although the user may want to
32*3ac0a46fSAndroid Build Coastguard Worker-// replace the optional mallocZero, calloc and dup as well.
33*3ac0a46fSAndroid Build Coastguard Worker-
34*3ac0a46fSAndroid Build Coastguard Worker-cmsBool   _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase* Plugin);
35*3ac0a46fSAndroid Build Coastguard Worker-
36*3ac0a46fSAndroid Build Coastguard Worker-// *********************************************************************************
37*3ac0a46fSAndroid Build Coastguard Worker-
38*3ac0a46fSAndroid Build Coastguard Worker-// This is the default memory allocation function. It does a very coarse
39*3ac0a46fSAndroid Build Coastguard Worker-// check of amount of memory, just to prevent exploits
40*3ac0a46fSAndroid Build Coastguard Worker-static
41*3ac0a46fSAndroid Build Coastguard Worker-void* _cmsMallocDefaultFn(cmsContext ContextID, cmsUInt32Number size)
42*3ac0a46fSAndroid Build Coastguard Worker+cmsBool  _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase* Plugin)
43*3ac0a46fSAndroid Build Coastguard Worker {
44*3ac0a46fSAndroid Build Coastguard Worker-    if (size > MAX_MEMORY_FOR_ALLOC) return NULL;  // Never allow over maximum
45*3ac0a46fSAndroid Build Coastguard Worker-
46*3ac0a46fSAndroid Build Coastguard Worker-    return (void*) malloc(size);
47*3ac0a46fSAndroid Build Coastguard Worker+    return TRUE;
48*3ac0a46fSAndroid Build Coastguard Worker+}
49*3ac0a46fSAndroid Build Coastguard Worker
50*3ac0a46fSAndroid Build Coastguard Worker-    cmsUNUSED_PARAMETER(ContextID);
51*3ac0a46fSAndroid Build Coastguard Worker+// Generic allocate
52*3ac0a46fSAndroid Build Coastguard Worker+void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size)
53*3ac0a46fSAndroid Build Coastguard Worker+{
54*3ac0a46fSAndroid Build Coastguard Worker+    return FXMEM_DefaultAlloc(size);
55*3ac0a46fSAndroid Build Coastguard Worker }
56*3ac0a46fSAndroid Build Coastguard Worker
57*3ac0a46fSAndroid Build Coastguard Worker // Generic allocate & zero
58*3ac0a46fSAndroid Build Coastguard Worker-static
59*3ac0a46fSAndroid Build Coastguard Worker-void* _cmsMallocZeroDefaultFn(cmsContext ContextID, cmsUInt32Number size)
60*3ac0a46fSAndroid Build Coastguard Worker+void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size)
61*3ac0a46fSAndroid Build Coastguard Worker {
62*3ac0a46fSAndroid Build Coastguard Worker-    void *pt = _cmsMalloc(ContextID, size);
63*3ac0a46fSAndroid Build Coastguard Worker-    if (pt == NULL) return NULL;
64*3ac0a46fSAndroid Build Coastguard Worker-
65*3ac0a46fSAndroid Build Coastguard Worker-    memset(pt, 0, size);
66*3ac0a46fSAndroid Build Coastguard Worker-    return pt;
67*3ac0a46fSAndroid Build Coastguard Worker+    void* p = FXMEM_DefaultAlloc(size);
68*3ac0a46fSAndroid Build Coastguard Worker+    if (p) memset(p, 0, size);
69*3ac0a46fSAndroid Build Coastguard Worker+    return p;
70*3ac0a46fSAndroid Build Coastguard Worker }
71*3ac0a46fSAndroid Build Coastguard Worker
72*3ac0a46fSAndroid Build Coastguard Worker-
73*3ac0a46fSAndroid Build Coastguard Worker-// The default free function. The only check proformed is against NULL pointers
74*3ac0a46fSAndroid Build Coastguard Worker-static
75*3ac0a46fSAndroid Build Coastguard Worker-void _cmsFreeDefaultFn(cmsContext ContextID, void *Ptr)
76*3ac0a46fSAndroid Build Coastguard Worker+// Generic calloc
77*3ac0a46fSAndroid Build Coastguard Worker+void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size)
78*3ac0a46fSAndroid Build Coastguard Worker {
79*3ac0a46fSAndroid Build Coastguard Worker-    // free(NULL) is defined a no-op by C99, therefore it is safe to
80*3ac0a46fSAndroid Build Coastguard Worker-    // avoid the check, but it is here just in case...
81*3ac0a46fSAndroid Build Coastguard Worker-
82*3ac0a46fSAndroid Build Coastguard Worker-    if (Ptr) free(Ptr);
83*3ac0a46fSAndroid Build Coastguard Worker+    cmsUInt32Number total = num * size;
84*3ac0a46fSAndroid Build Coastguard Worker+    if (total == 0 || total / size != num || total >= 512 * 1024 * 1024)
85*3ac0a46fSAndroid Build Coastguard Worker+        return NULL;
86*3ac0a46fSAndroid Build Coastguard Worker
87*3ac0a46fSAndroid Build Coastguard Worker-    cmsUNUSED_PARAMETER(ContextID);
88*3ac0a46fSAndroid Build Coastguard Worker+    return _cmsMallocZero(ContextID, num * size);
89*3ac0a46fSAndroid Build Coastguard Worker }
90*3ac0a46fSAndroid Build Coastguard Worker
91*3ac0a46fSAndroid Build Coastguard Worker-// The default realloc function. Again it checks for exploits. If Ptr is NULL,
92*3ac0a46fSAndroid Build Coastguard Worker-// realloc behaves the same way as malloc and allocates a new block of size bytes.
93*3ac0a46fSAndroid Build Coastguard Worker-static
94*3ac0a46fSAndroid Build Coastguard Worker-void* _cmsReallocDefaultFn(cmsContext ContextID, void* Ptr, cmsUInt32Number size)
95*3ac0a46fSAndroid Build Coastguard Worker+// Generic reallocate
96*3ac0a46fSAndroid Build Coastguard Worker+void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number size)
97*3ac0a46fSAndroid Build Coastguard Worker {
98*3ac0a46fSAndroid Build Coastguard Worker-
99*3ac0a46fSAndroid Build Coastguard Worker-    if (size > MAX_MEMORY_FOR_ALLOC) return NULL;  // Never realloc over 512Mb
100*3ac0a46fSAndroid Build Coastguard Worker-
101*3ac0a46fSAndroid Build Coastguard Worker-    return realloc(Ptr, size);
102*3ac0a46fSAndroid Build Coastguard Worker-
103*3ac0a46fSAndroid Build Coastguard Worker-    cmsUNUSED_PARAMETER(ContextID);
104*3ac0a46fSAndroid Build Coastguard Worker+    return FXMEM_DefaultRealloc(Ptr, size);
105*3ac0a46fSAndroid Build Coastguard Worker }
106*3ac0a46fSAndroid Build Coastguard Worker
107*3ac0a46fSAndroid Build Coastguard Worker-
108*3ac0a46fSAndroid Build Coastguard Worker-// The default calloc function. Allocates an array of num elements, each one of size bytes
109*3ac0a46fSAndroid Build Coastguard Worker-// all memory is initialized to zero.
110*3ac0a46fSAndroid Build Coastguard Worker-static
111*3ac0a46fSAndroid Build Coastguard Worker-void* _cmsCallocDefaultFn(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size)
112*3ac0a46fSAndroid Build Coastguard Worker+// Generic free memory
113*3ac0a46fSAndroid Build Coastguard Worker+void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr)
114*3ac0a46fSAndroid Build Coastguard Worker {
115*3ac0a46fSAndroid Build Coastguard Worker-    cmsUInt32Number Total = num * size;
116*3ac0a46fSAndroid Build Coastguard Worker-
117*3ac0a46fSAndroid Build Coastguard Worker-    // Preserve calloc behaviour
118*3ac0a46fSAndroid Build Coastguard Worker-    if (Total == 0) return NULL;
119*3ac0a46fSAndroid Build Coastguard Worker-
120*3ac0a46fSAndroid Build Coastguard Worker-    // Safe check for overflow.
121*3ac0a46fSAndroid Build Coastguard Worker-    if (num >= UINT_MAX / size) return NULL;
122*3ac0a46fSAndroid Build Coastguard Worker-
123*3ac0a46fSAndroid Build Coastguard Worker-    // Check for overflow
124*3ac0a46fSAndroid Build Coastguard Worker-    if (Total < num || Total < size) {
125*3ac0a46fSAndroid Build Coastguard Worker-        return NULL;
126*3ac0a46fSAndroid Build Coastguard Worker-    }
127*3ac0a46fSAndroid Build Coastguard Worker-
128*3ac0a46fSAndroid Build Coastguard Worker-    if (Total > MAX_MEMORY_FOR_ALLOC) return NULL;  // Never alloc over 512Mb
129*3ac0a46fSAndroid Build Coastguard Worker-
130*3ac0a46fSAndroid Build Coastguard Worker-    return _cmsMallocZero(ContextID, Total);
131*3ac0a46fSAndroid Build Coastguard Worker+    if (Ptr != NULL) FXMEM_DefaultFree(Ptr);
132*3ac0a46fSAndroid Build Coastguard Worker }
133*3ac0a46fSAndroid Build Coastguard Worker
134*3ac0a46fSAndroid Build Coastguard Worker // Generic block duplication
135*3ac0a46fSAndroid Build Coastguard Worker-static
136*3ac0a46fSAndroid Build Coastguard Worker-void* _cmsDupDefaultFn(cmsContext ContextID, const void* Org, cmsUInt32Number size)
137*3ac0a46fSAndroid Build Coastguard Worker+void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size)
138*3ac0a46fSAndroid Build Coastguard Worker {
139*3ac0a46fSAndroid Build Coastguard Worker-    void* mem;
140*3ac0a46fSAndroid Build Coastguard Worker-
141*3ac0a46fSAndroid Build Coastguard Worker-    if (size > MAX_MEMORY_FOR_ALLOC) return NULL;  // Never dup over 512Mb
142*3ac0a46fSAndroid Build Coastguard Worker-
143*3ac0a46fSAndroid Build Coastguard Worker-    mem = _cmsMalloc(ContextID, size);
144*3ac0a46fSAndroid Build Coastguard Worker-
145*3ac0a46fSAndroid Build Coastguard Worker-    if (mem != NULL && Org != NULL)
146*3ac0a46fSAndroid Build Coastguard Worker-        memmove(mem, Org, size);
147*3ac0a46fSAndroid Build Coastguard Worker-
148*3ac0a46fSAndroid Build Coastguard Worker-    return mem;
149*3ac0a46fSAndroid Build Coastguard Worker+    void* p = FXMEM_DefaultAlloc(size);
150*3ac0a46fSAndroid Build Coastguard Worker+    memmove(p, Org, size);
151*3ac0a46fSAndroid Build Coastguard Worker+    return p;
152*3ac0a46fSAndroid Build Coastguard Worker }
153*3ac0a46fSAndroid Build Coastguard Worker
154*3ac0a46fSAndroid Build Coastguard Worker-
155*3ac0a46fSAndroid Build Coastguard Worker-// Pointers to memory manager functions in Context0
156*3ac0a46fSAndroid Build Coastguard Worker-_cmsMemPluginChunkType _cmsMemPluginChunk = { _cmsMallocDefaultFn, _cmsMallocZeroDefaultFn, _cmsFreeDefaultFn,
157*3ac0a46fSAndroid Build Coastguard Worker-                                              _cmsReallocDefaultFn, _cmsCallocDefaultFn,    _cmsDupDefaultFn
158*3ac0a46fSAndroid Build Coastguard Worker+_cmsMemPluginChunkType _cmsMemPluginChunk = {_cmsMalloc, _cmsMallocZero, _cmsFree,
159*3ac0a46fSAndroid Build Coastguard Worker+                                             _cmsRealloc, _cmsCalloc,    _cmsDupMem
160*3ac0a46fSAndroid Build Coastguard Worker                                             };
161*3ac0a46fSAndroid Build Coastguard Worker
162*3ac0a46fSAndroid Build Coastguard Worker-
163*3ac0a46fSAndroid Build Coastguard Worker-// Reset and duplicate memory manager
164*3ac0a46fSAndroid Build Coastguard Worker void _cmsAllocMemPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src)
165*3ac0a46fSAndroid Build Coastguard Worker {
166*3ac0a46fSAndroid Build Coastguard Worker     _cmsAssert(ctx != NULL);
167*3ac0a46fSAndroid Build Coastguard Worker
168*3ac0a46fSAndroid Build Coastguard Worker-    if (src != NULL) {
169*3ac0a46fSAndroid Build Coastguard Worker+    if (src != NULL) {
170*3ac0a46fSAndroid Build Coastguard Worker
171*3ac0a46fSAndroid Build Coastguard Worker         // Duplicate
172*3ac0a46fSAndroid Build Coastguard Worker-        ctx ->chunks[MemPlugin] = _cmsSubAllocDup(ctx ->MemPool, src ->chunks[MemPlugin], sizeof(_cmsMemPluginChunkType));
173*3ac0a46fSAndroid Build Coastguard Worker+        ctx ->chunks[MemPlugin] = _cmsSubAllocDup(ctx ->MemPool, src ->chunks[MemPlugin], sizeof(_cmsMemPluginChunkType));
174*3ac0a46fSAndroid Build Coastguard Worker     }
175*3ac0a46fSAndroid Build Coastguard Worker     else {
176*3ac0a46fSAndroid Build Coastguard Worker
177*3ac0a46fSAndroid Build Coastguard Worker         // To reset it, we use the default allocators, which cannot be overridden
178*3ac0a46fSAndroid Build Coastguard Worker         ctx ->chunks[MemPlugin] = &ctx ->DefaultMemoryManager;
179*3ac0a46fSAndroid Build Coastguard Worker-    }
180*3ac0a46fSAndroid Build Coastguard Worker+    }
181*3ac0a46fSAndroid Build Coastguard Worker }
182*3ac0a46fSAndroid Build Coastguard Worker
183*3ac0a46fSAndroid Build Coastguard Worker-// Auxiliary to fill memory management functions from plugin (or context 0 defaults)
184*3ac0a46fSAndroid Build Coastguard Worker void _cmsInstallAllocFunctions(cmsPluginMemHandler* Plugin, _cmsMemPluginChunkType* ptr)
185*3ac0a46fSAndroid Build Coastguard Worker {
186*3ac0a46fSAndroid Build Coastguard Worker     if (Plugin == NULL) {
187*3ac0a46fSAndroid Build Coastguard Worker@@ -214,94 +149,15 @@ void _cmsInstallAllocFunctions(cmsPluginMemHandler* Plugin, _cmsMemPluginChunkTy
188*3ac0a46fSAndroid Build Coastguard Worker         ptr ->ReallocPtr = Plugin -> ReallocPtr;
189*3ac0a46fSAndroid Build Coastguard Worker
190*3ac0a46fSAndroid Build Coastguard Worker         // Make sure we revert to defaults
191*3ac0a46fSAndroid Build Coastguard Worker-        ptr ->MallocZeroPtr= _cmsMallocZeroDefaultFn;
192*3ac0a46fSAndroid Build Coastguard Worker-        ptr ->CallocPtr    = _cmsCallocDefaultFn;
193*3ac0a46fSAndroid Build Coastguard Worker-        ptr ->DupPtr       = _cmsDupDefaultFn;
194*3ac0a46fSAndroid Build Coastguard Worker-
195*3ac0a46fSAndroid Build Coastguard Worker+        ptr ->MallocZeroPtr= _cmsMallocZero;
196*3ac0a46fSAndroid Build Coastguard Worker+        ptr ->CallocPtr    = _cmsCalloc;
197*3ac0a46fSAndroid Build Coastguard Worker+        ptr ->DupPtr       = _cmsDupMem;
198*3ac0a46fSAndroid Build Coastguard Worker+
199*3ac0a46fSAndroid Build Coastguard Worker         if (Plugin ->MallocZeroPtr != NULL) ptr ->MallocZeroPtr = Plugin -> MallocZeroPtr;
200*3ac0a46fSAndroid Build Coastguard Worker         if (Plugin ->CallocPtr != NULL)     ptr ->CallocPtr     = Plugin -> CallocPtr;
201*3ac0a46fSAndroid Build Coastguard Worker         if (Plugin ->DupPtr != NULL)        ptr ->DupPtr        = Plugin -> DupPtr;
202*3ac0a46fSAndroid Build Coastguard Worker-
203*3ac0a46fSAndroid Build Coastguard Worker-    }
204*3ac0a46fSAndroid Build Coastguard Worker-}
205*3ac0a46fSAndroid Build Coastguard Worker-
206*3ac0a46fSAndroid Build Coastguard Worker
207*3ac0a46fSAndroid Build Coastguard Worker-// Plug-in replacement entry
208*3ac0a46fSAndroid Build Coastguard Worker-cmsBool  _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase *Data)
209*3ac0a46fSAndroid Build Coastguard Worker-{
210*3ac0a46fSAndroid Build Coastguard Worker-    cmsPluginMemHandler* Plugin = (cmsPluginMemHandler*) Data;
211*3ac0a46fSAndroid Build Coastguard Worker-    _cmsMemPluginChunkType* ptr;
212*3ac0a46fSAndroid Build Coastguard Worker-
213*3ac0a46fSAndroid Build Coastguard Worker-    // NULL forces to reset to defaults. In this special case, the defaults are stored in the context structure.
214*3ac0a46fSAndroid Build Coastguard Worker-    // Remaining plug-ins does NOT have any copy in the context structure, but this is somehow special as the
215*3ac0a46fSAndroid Build Coastguard Worker-    // context internal data should be malloce'd by using those functions.
216*3ac0a46fSAndroid Build Coastguard Worker-    if (Data == NULL) {
217*3ac0a46fSAndroid Build Coastguard Worker-
218*3ac0a46fSAndroid Build Coastguard Worker-       struct _cmsContext_struct* ctx = ( struct _cmsContext_struct*) ContextID;
219*3ac0a46fSAndroid Build Coastguard Worker-
220*3ac0a46fSAndroid Build Coastguard Worker-       // Return to the default allocators
221*3ac0a46fSAndroid Build Coastguard Worker-        if (ContextID != NULL) {
222*3ac0a46fSAndroid Build Coastguard Worker-            ctx->chunks[MemPlugin] = (void*) &ctx->DefaultMemoryManager;
223*3ac0a46fSAndroid Build Coastguard Worker-        }
224*3ac0a46fSAndroid Build Coastguard Worker-        return TRUE;
225*3ac0a46fSAndroid Build Coastguard Worker     }
226*3ac0a46fSAndroid Build Coastguard Worker-
227*3ac0a46fSAndroid Build Coastguard Worker-    // Check for required callbacks
228*3ac0a46fSAndroid Build Coastguard Worker-    if (Plugin -> MallocPtr == NULL ||
229*3ac0a46fSAndroid Build Coastguard Worker-        Plugin -> FreePtr == NULL ||
230*3ac0a46fSAndroid Build Coastguard Worker-        Plugin -> ReallocPtr == NULL) return FALSE;
231*3ac0a46fSAndroid Build Coastguard Worker-
232*3ac0a46fSAndroid Build Coastguard Worker-    // Set replacement functions
233*3ac0a46fSAndroid Build Coastguard Worker-    ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin);
234*3ac0a46fSAndroid Build Coastguard Worker-    if (ptr == NULL)
235*3ac0a46fSAndroid Build Coastguard Worker-        return FALSE;
236*3ac0a46fSAndroid Build Coastguard Worker-
237*3ac0a46fSAndroid Build Coastguard Worker-    _cmsInstallAllocFunctions(Plugin, ptr);
238*3ac0a46fSAndroid Build Coastguard Worker-    return TRUE;
239*3ac0a46fSAndroid Build Coastguard Worker-}
240*3ac0a46fSAndroid Build Coastguard Worker-
241*3ac0a46fSAndroid Build Coastguard Worker-// Generic allocate
242*3ac0a46fSAndroid Build Coastguard Worker-void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size)
243*3ac0a46fSAndroid Build Coastguard Worker-{
244*3ac0a46fSAndroid Build Coastguard Worker-    _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin);
245*3ac0a46fSAndroid Build Coastguard Worker-    return ptr ->MallocPtr(ContextID, size);
246*3ac0a46fSAndroid Build Coastguard Worker-}
247*3ac0a46fSAndroid Build Coastguard Worker-
248*3ac0a46fSAndroid Build Coastguard Worker-// Generic allocate & zero
249*3ac0a46fSAndroid Build Coastguard Worker-void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size)
250*3ac0a46fSAndroid Build Coastguard Worker-{
251*3ac0a46fSAndroid Build Coastguard Worker-    _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin);
252*3ac0a46fSAndroid Build Coastguard Worker-    return ptr->MallocZeroPtr(ContextID, size);
253*3ac0a46fSAndroid Build Coastguard Worker-}
254*3ac0a46fSAndroid Build Coastguard Worker-
255*3ac0a46fSAndroid Build Coastguard Worker-// Generic calloc
256*3ac0a46fSAndroid Build Coastguard Worker-void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size)
257*3ac0a46fSAndroid Build Coastguard Worker-{
258*3ac0a46fSAndroid Build Coastguard Worker-    _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin);
259*3ac0a46fSAndroid Build Coastguard Worker-    return ptr->CallocPtr(ContextID, num, size);
260*3ac0a46fSAndroid Build Coastguard Worker-}
261*3ac0a46fSAndroid Build Coastguard Worker-
262*3ac0a46fSAndroid Build Coastguard Worker-// Generic reallocate
263*3ac0a46fSAndroid Build Coastguard Worker-void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number size)
264*3ac0a46fSAndroid Build Coastguard Worker-{
265*3ac0a46fSAndroid Build Coastguard Worker-    _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin);
266*3ac0a46fSAndroid Build Coastguard Worker-    return ptr->ReallocPtr(ContextID, Ptr, size);
267*3ac0a46fSAndroid Build Coastguard Worker-}
268*3ac0a46fSAndroid Build Coastguard Worker-
269*3ac0a46fSAndroid Build Coastguard Worker-// Generic free memory
270*3ac0a46fSAndroid Build Coastguard Worker-void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr)
271*3ac0a46fSAndroid Build Coastguard Worker-{
272*3ac0a46fSAndroid Build Coastguard Worker-    if (Ptr != NULL) {
273*3ac0a46fSAndroid Build Coastguard Worker-        _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin);
274*3ac0a46fSAndroid Build Coastguard Worker-        ptr ->FreePtr(ContextID, Ptr);
275*3ac0a46fSAndroid Build Coastguard Worker-    }
276*3ac0a46fSAndroid Build Coastguard Worker-}
277*3ac0a46fSAndroid Build Coastguard Worker-
278*3ac0a46fSAndroid Build Coastguard Worker-// Generic block duplication
279*3ac0a46fSAndroid Build Coastguard Worker-void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size)
280*3ac0a46fSAndroid Build Coastguard Worker-{
281*3ac0a46fSAndroid Build Coastguard Worker-    _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin);
282*3ac0a46fSAndroid Build Coastguard Worker-    return ptr ->DupPtr(ContextID, Org, size);
283*3ac0a46fSAndroid Build Coastguard Worker }
284*3ac0a46fSAndroid Build Coastguard Worker
285*3ac0a46fSAndroid Build Coastguard Worker // ********************************************************************************************
286