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