| diff --git a/third_party/lcms/0000-cmserr-changes.patch b/third_party/lcms/0000-cmserr-changes.patch |
| index 13a854a29..e69de29bb 100644 |
| --- a/third_party/lcms/0000-cmserr-changes.patch |
| +++ b/third_party/lcms/0000-cmserr-changes.patch |
| @@ -1,285 +0,0 @@ |
| -diff --git a/third_party/lcms/src/cmserr.c b/third_party/lcms/src/cmserr.c |
| -index 700152ee3..3c3848b2a 100644 |
| ---- a/third_party/lcms/src/cmserr.c |
| -+++ b/third_party/lcms/src/cmserr.c |
| -@@ -25,6 +25,8 @@ |
| - |
| - #include "lcms2_internal.h" |
| - |
| -+#include "core/fxcrt/fx_memory.h" |
| -+#include "core/fxcrt/fx_system.h" |
| - |
| - // This function is here to help applications to prevent mixing lcms versions on header and shared objects. |
| - int CMSEXPORT cmsGetEncodedCMMversion(void) |
| -@@ -67,140 +67,75 @@ long int CMSEXPORT cmsfilelength(FILE* f) |
| - return n; |
| - } |
| - |
| -- |
| --// Memory handling ------------------------------------------------------------------ |
| --// |
| --// This is the interface to low-level memory management routines. By default a simple |
| --// wrapping to malloc/free/realloc is provided, although there is a limit on the max |
| --// amount of memoy that can be reclaimed. This is mostly as a safety feature to prevent |
| --// bogus or evil code to allocate huge blocks that otherwise lcms would never need. |
| -- |
| --#define MAX_MEMORY_FOR_ALLOC ((cmsUInt32Number)(1024U*1024U*512U)) |
| -- |
| --// User may override this behaviour by using a memory plug-in, which basically replaces |
| --// the default memory management functions. In this case, no check is performed and it |
| --// is up to the plug-in writer to keep in the safe side. There are only three functions |
| --// required to be implemented: malloc, realloc and free, although the user may want to |
| --// replace the optional mallocZero, calloc and dup as well. |
| -- |
| --cmsBool _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase* Plugin); |
| -- |
| --// ********************************************************************************* |
| -- |
| --// This is the default memory allocation function. It does a very coarse |
| --// check of amount of memory, just to prevent exploits |
| --static |
| --void* _cmsMallocDefaultFn(cmsContext ContextID, cmsUInt32Number size) |
| -+cmsBool _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase* Plugin) |
| - { |
| -- if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never allow over maximum |
| -- |
| -- return (void*) malloc(size); |
| -+ return TRUE; |
| -+} |
| - |
| -- cmsUNUSED_PARAMETER(ContextID); |
| -+// Generic allocate |
| -+void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size) |
| -+{ |
| -+ return FXMEM_DefaultAlloc(size); |
| - } |
| - |
| - // Generic allocate & zero |
| --static |
| --void* _cmsMallocZeroDefaultFn(cmsContext ContextID, cmsUInt32Number size) |
| -+void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size) |
| - { |
| -- void *pt = _cmsMalloc(ContextID, size); |
| -- if (pt == NULL) return NULL; |
| -- |
| -- memset(pt, 0, size); |
| -- return pt; |
| -+ void* p = FXMEM_DefaultAlloc(size); |
| -+ if (p) memset(p, 0, size); |
| -+ return p; |
| - } |
| - |
| -- |
| --// The default free function. The only check proformed is against NULL pointers |
| --static |
| --void _cmsFreeDefaultFn(cmsContext ContextID, void *Ptr) |
| -+// Generic calloc |
| -+void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size) |
| - { |
| -- // free(NULL) is defined a no-op by C99, therefore it is safe to |
| -- // avoid the check, but it is here just in case... |
| -- |
| -- if (Ptr) free(Ptr); |
| -+ cmsUInt32Number total = num * size; |
| -+ if (total == 0 || total / size != num || total >= 512 * 1024 * 1024) |
| -+ return NULL; |
| - |
| -- cmsUNUSED_PARAMETER(ContextID); |
| -+ return _cmsMallocZero(ContextID, num * size); |
| - } |
| - |
| --// The default realloc function. Again it checks for exploits. If Ptr is NULL, |
| --// realloc behaves the same way as malloc and allocates a new block of size bytes. |
| --static |
| --void* _cmsReallocDefaultFn(cmsContext ContextID, void* Ptr, cmsUInt32Number size) |
| -+// Generic reallocate |
| -+void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number size) |
| - { |
| -- |
| -- if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never realloc over 512Mb |
| -- |
| -- return realloc(Ptr, size); |
| -- |
| -- cmsUNUSED_PARAMETER(ContextID); |
| -+ return FXMEM_DefaultRealloc(Ptr, size); |
| - } |
| - |
| -- |
| --// The default calloc function. Allocates an array of num elements, each one of size bytes |
| --// all memory is initialized to zero. |
| --static |
| --void* _cmsCallocDefaultFn(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size) |
| -+// Generic free memory |
| -+void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr) |
| - { |
| -- cmsUInt32Number Total = num * size; |
| -- |
| -- // Preserve calloc behaviour |
| -- if (Total == 0) return NULL; |
| -- |
| -- // Safe check for overflow. |
| -- if (num >= UINT_MAX / size) return NULL; |
| -- |
| -- // Check for overflow |
| -- if (Total < num || Total < size) { |
| -- return NULL; |
| -- } |
| -- |
| -- if (Total > MAX_MEMORY_FOR_ALLOC) return NULL; // Never alloc over 512Mb |
| -- |
| -- return _cmsMallocZero(ContextID, Total); |
| -+ if (Ptr != NULL) FXMEM_DefaultFree(Ptr); |
| - } |
| - |
| - // Generic block duplication |
| --static |
| --void* _cmsDupDefaultFn(cmsContext ContextID, const void* Org, cmsUInt32Number size) |
| -+void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size) |
| - { |
| -- void* mem; |
| -- |
| -- if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never dup over 512Mb |
| -- |
| -- mem = _cmsMalloc(ContextID, size); |
| -- |
| -- if (mem != NULL && Org != NULL) |
| -- memmove(mem, Org, size); |
| -- |
| -- return mem; |
| -+ void* p = FXMEM_DefaultAlloc(size); |
| -+ memmove(p, Org, size); |
| -+ return p; |
| - } |
| - |
| -- |
| --// Pointers to memory manager functions in Context0 |
| --_cmsMemPluginChunkType _cmsMemPluginChunk = { _cmsMallocDefaultFn, _cmsMallocZeroDefaultFn, _cmsFreeDefaultFn, |
| -- _cmsReallocDefaultFn, _cmsCallocDefaultFn, _cmsDupDefaultFn |
| -+_cmsMemPluginChunkType _cmsMemPluginChunk = {_cmsMalloc, _cmsMallocZero, _cmsFree, |
| -+ _cmsRealloc, _cmsCalloc, _cmsDupMem |
| - }; |
| - |
| -- |
| --// Reset and duplicate memory manager |
| - void _cmsAllocMemPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) |
| - { |
| - _cmsAssert(ctx != NULL); |
| - |
| -- if (src != NULL) { |
| -+ if (src != NULL) { |
| - |
| - // Duplicate |
| -- ctx ->chunks[MemPlugin] = _cmsSubAllocDup(ctx ->MemPool, src ->chunks[MemPlugin], sizeof(_cmsMemPluginChunkType)); |
| -+ ctx ->chunks[MemPlugin] = _cmsSubAllocDup(ctx ->MemPool, src ->chunks[MemPlugin], sizeof(_cmsMemPluginChunkType)); |
| - } |
| - else { |
| - |
| - // To reset it, we use the default allocators, which cannot be overridden |
| - ctx ->chunks[MemPlugin] = &ctx ->DefaultMemoryManager; |
| -- } |
| -+ } |
| - } |
| - |
| --// Auxiliary to fill memory management functions from plugin (or context 0 defaults) |
| - void _cmsInstallAllocFunctions(cmsPluginMemHandler* Plugin, _cmsMemPluginChunkType* ptr) |
| - { |
| - if (Plugin == NULL) { |
| -@@ -214,94 +149,15 @@ void _cmsInstallAllocFunctions(cmsPluginMemHandler* Plugin, _cmsMemPluginChunkTy |
| - ptr ->ReallocPtr = Plugin -> ReallocPtr; |
| - |
| - // Make sure we revert to defaults |
| -- ptr ->MallocZeroPtr= _cmsMallocZeroDefaultFn; |
| -- ptr ->CallocPtr = _cmsCallocDefaultFn; |
| -- ptr ->DupPtr = _cmsDupDefaultFn; |
| -- |
| -+ ptr ->MallocZeroPtr= _cmsMallocZero; |
| -+ ptr ->CallocPtr = _cmsCalloc; |
| -+ ptr ->DupPtr = _cmsDupMem; |
| -+ |
| - if (Plugin ->MallocZeroPtr != NULL) ptr ->MallocZeroPtr = Plugin -> MallocZeroPtr; |
| - if (Plugin ->CallocPtr != NULL) ptr ->CallocPtr = Plugin -> CallocPtr; |
| - if (Plugin ->DupPtr != NULL) ptr ->DupPtr = Plugin -> DupPtr; |
| -- |
| -- } |
| --} |
| -- |
| - |
| --// Plug-in replacement entry |
| --cmsBool _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase *Data) |
| --{ |
| -- cmsPluginMemHandler* Plugin = (cmsPluginMemHandler*) Data; |
| -- _cmsMemPluginChunkType* ptr; |
| -- |
| -- // NULL forces to reset to defaults. In this special case, the defaults are stored in the context structure. |
| -- // Remaining plug-ins does NOT have any copy in the context structure, but this is somehow special as the |
| -- // context internal data should be malloce'd by using those functions. |
| -- if (Data == NULL) { |
| -- |
| -- struct _cmsContext_struct* ctx = ( struct _cmsContext_struct*) ContextID; |
| -- |
| -- // Return to the default allocators |
| -- if (ContextID != NULL) { |
| -- ctx->chunks[MemPlugin] = (void*) &ctx->DefaultMemoryManager; |
| -- } |
| -- return TRUE; |
| - } |
| -- |
| -- // Check for required callbacks |
| -- if (Plugin -> MallocPtr == NULL || |
| -- Plugin -> FreePtr == NULL || |
| -- Plugin -> ReallocPtr == NULL) return FALSE; |
| -- |
| -- // Set replacement functions |
| -- ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| -- if (ptr == NULL) |
| -- return FALSE; |
| -- |
| -- _cmsInstallAllocFunctions(Plugin, ptr); |
| -- return TRUE; |
| --} |
| -- |
| --// Generic allocate |
| --void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size) |
| --{ |
| -- _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| -- return ptr ->MallocPtr(ContextID, size); |
| --} |
| -- |
| --// Generic allocate & zero |
| --void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size) |
| --{ |
| -- _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| -- return ptr->MallocZeroPtr(ContextID, size); |
| --} |
| -- |
| --// Generic calloc |
| --void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size) |
| --{ |
| -- _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| -- return ptr->CallocPtr(ContextID, num, size); |
| --} |
| -- |
| --// Generic reallocate |
| --void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number size) |
| --{ |
| -- _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| -- return ptr->ReallocPtr(ContextID, Ptr, size); |
| --} |
| -- |
| --// Generic free memory |
| --void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr) |
| --{ |
| -- if (Ptr != NULL) { |
| -- _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| -- ptr ->FreePtr(ContextID, Ptr); |
| -- } |
| --} |
| -- |
| --// Generic block duplication |
| --void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size) |
| --{ |
| -- _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| -- return ptr ->DupPtr(ContextID, Org, size); |
| - } |
| - |
| - // ******************************************************************************************** |
| diff --git a/third_party/lcms/src/cmserr.c b/third_party/lcms/src/cmserr.c |
| index ac89811a9..902b7762a 100644 |
| --- a/third_party/lcms/src/cmserr.c |
| +++ b/third_party/lcms/src/cmserr.c |
| @@ -1,7 +1,7 @@ |
| //--------------------------------------------------------------------------------- |
| // |
| // Little Color Management System |
| -// Copyright (c) 1998-2026 Marti Maria Saguer |
| +// Copyright (c) 1998-2023 Marti Maria Saguer |
| // |
| // Permission is hereby granted, free of charge, to any person obtaining |
| // a copy of this software and associated documentation files (the "Software"), |
| @@ -25,6 +25,8 @@ |
| |
| #include "lcms2_internal.h" |
| |
| +#include "core/fxcrt/fx_memory.h" |
| +#include "core/fxcrt/fx_system.h" |
| |
| // This function is here to help applications to prevent mixing lcms versions on header and shared objects. |
| int CMSEXPORT cmsGetEncodedCMMversion(void) |
| @@ -48,203 +50,94 @@ int CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2) |
| return (toupper(*us1) - toupper(*--us2)); |
| } |
| |
| -#ifdef CMS_LARGE_FILE_SUPPORT |
| - |
| -long long int CMSEXPORT cmsfilelength(FILE* f) |
| -{ |
| - long long int p, n; |
| - |
| -#ifdef CMS_IS_WINDOWS_ |
| - p = _ftelli64(f); |
| - if (p == -1LL) |
| - return -1LL; |
| - |
| - if (_fseeki64(f, 0, SEEK_END) != 0) |
| - return -1LL; |
| - |
| - n = _ftelli64(f); |
| - |
| - if (_fseeki64(f, p, SEEK_SET) != 0) |
| - return -1LL; |
| -#else |
| - p = (long long int) ftello(f); |
| - if (p < 0) |
| - return -1LL; |
| - |
| - if (fseeko(f, 0, SEEK_END) != 0) |
| - return -1LL; |
| - |
| - n = (long long int) ftello(f); |
| - |
| - if (fseeko(f, (off_t) p, SEEK_SET) != 0) |
| - return -1LL; |
| -#endif |
| - |
| - return n; |
| -} |
| - |
| -#else |
| - |
| // long int because C99 specifies ftell in such way (7.19.9.2) |
| long int CMSEXPORT cmsfilelength(FILE* f) |
| { |
| - long int p, n; |
| + long int p , n; |
| |
| - p = ftell(f); |
| - if (p == -1L) |
| + p = ftell(f); // register current file position |
| + if (p == -1L) |
| return -1L; |
| |
| - if (fseek(f, 0, SEEK_END) != 0) |
| + if (fseek(f, 0, SEEK_END) != 0) { |
| return -1L; |
| + } |
| |
| n = ftell(f); |
| - |
| - if (fseek(f, p, SEEK_SET) != 0) |
| - return -1L; |
| + fseek(f, p, SEEK_SET); // file position restored |
| |
| return n; |
| } |
| |
| -#endif |
| - |
| -// Memory handling ------------------------------------------------------------------ |
| -// |
| -// This is the interface to low-level memory management routines. By default a simple |
| -// wrapping to malloc/free/realloc is provided, although there is a limit on the max |
| -// amount of memory that can be reclaimed. This is mostly as a safety feature to prevent |
| -// bogus or evil code to allocate huge blocks that otherwise lcms would never need. |
| - |
| -#ifdef CMS_LARGE_FILE_SUPPORT |
| -# define MAX_MEMORY_FOR_ALLOC ((cmsUInt32Number)(1024U*1024U*2048U)) |
| -#else |
| -# define MAX_MEMORY_FOR_ALLOC ((cmsUInt32Number)(1024U*1024U*512U)) |
| -#endif |
| - |
| -// User may override this behaviour by using a memory plug-in, which basically replaces |
| -// the default memory management functions. In this case, no check is performed and it |
| -// is up to the plug-in writer to keep in the safe side. There are only three functions |
| -// required to be implemented: malloc, realloc and free, although the user may want to |
| -// replace the optional mallocZero, calloc and dup as well. |
| - |
| -cmsBool _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase* Plugin); |
| - |
| -// ********************************************************************************* |
| - |
| -// This is the default memory allocation function. It does a very coarse |
| -// check of amount of memory, just to prevent exploits |
| -static |
| -void* _cmsMallocDefaultFn(cmsContext ContextID, cmsUInt32Number size) |
| +cmsBool _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase* Plugin) |
| { |
| - // Never allow 0 or over maximum |
| - if (size == 0 || size > MAX_MEMORY_FOR_ALLOC) return NULL; |
| - |
| - return (void*) malloc(size); |
| + return TRUE; |
| +} |
| |
| - cmsUNUSED_PARAMETER(ContextID); |
| +// Generic allocate |
| +void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size) |
| +{ |
| + return FXMEM_DefaultAlloc(size); |
| } |
| |
| // Generic allocate & zero |
| -static |
| -void* _cmsMallocZeroDefaultFn(cmsContext ContextID, cmsUInt32Number size) |
| +void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size) |
| { |
| - void *pt = _cmsMalloc(ContextID, size); |
| - if (pt == NULL) return NULL; |
| - |
| - memset(pt, 0, size); |
| - return pt; |
| + void* p = FXMEM_DefaultAlloc(size); |
| + if (p) memset(p, 0, size); |
| + return p; |
| } |
| |
| - |
| -// The default free function. The only check proformed is against NULL pointers |
| -static |
| -void _cmsFreeDefaultFn(cmsContext ContextID, void *Ptr) |
| +// Generic calloc |
| +void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size) |
| { |
| - // free(NULL) is defined a no-op by C99, therefore it is safe to |
| - // avoid the check, but it is here just in case... |
| - |
| - if (Ptr) free(Ptr); |
| + cmsUInt32Number total = num * size; |
| + if (total == 0 || total / size != num || total >= 512 * 1024 * 1024) |
| + return NULL; |
| |
| - cmsUNUSED_PARAMETER(ContextID); |
| + return _cmsMallocZero(ContextID, num * size); |
| } |
| |
| -// The default realloc function. Again it checks for exploits. If Ptr is NULL, |
| -// realloc behaves the same way as malloc and allocates a new block of size bytes. |
| -static |
| -void* _cmsReallocDefaultFn(cmsContext ContextID, void* Ptr, cmsUInt32Number size) |
| +// Generic reallocate |
| +void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number size) |
| { |
| - |
| - if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never realloc over 512Mb |
| - |
| - return realloc(Ptr, size); |
| - |
| - cmsUNUSED_PARAMETER(ContextID); |
| + return FXMEM_DefaultRealloc(Ptr, size); |
| } |
| |
| - |
| -// The default calloc function. Allocates an array of num elements, each one of size bytes |
| -// all memory is initialized to zero. |
| -static |
| -void* _cmsCallocDefaultFn(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size) |
| +// Generic free memory |
| +void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr) |
| { |
| - cmsUInt32Number Total = num * size; |
| - |
| - // Preserve calloc behaviour |
| - if (Total == 0) return NULL; |
| - |
| - // Safe check for overflow. |
| - if (num >= UINT_MAX / size) return NULL; |
| - |
| - // Check for overflow |
| - if (Total < num || Total < size) { |
| - return NULL; |
| - } |
| - |
| - if (Total > MAX_MEMORY_FOR_ALLOC) return NULL; // Never alloc over 512Mb |
| - |
| - return _cmsMallocZero(ContextID, Total); |
| + if (Ptr != NULL) FXMEM_DefaultFree(Ptr); |
| } |
| |
| // Generic block duplication |
| -static |
| -void* _cmsDupDefaultFn(cmsContext ContextID, const void* Org, cmsUInt32Number size) |
| +void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size) |
| { |
| - void* mem; |
| - |
| - if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never dup over 512Mb |
| - |
| - mem = _cmsMalloc(ContextID, size); |
| - |
| - if (mem != NULL && Org != NULL) |
| - memmove(mem, Org, size); |
| - |
| - return mem; |
| + void* p = FXMEM_DefaultAlloc(size); |
| + memmove(p, Org, size); |
| + return p; |
| } |
| |
| - |
| -// Pointers to memory manager functions in Context0 |
| -_cmsMemPluginChunkType _cmsMemPluginChunk = { _cmsMallocDefaultFn, _cmsMallocZeroDefaultFn, _cmsFreeDefaultFn, |
| - _cmsReallocDefaultFn, _cmsCallocDefaultFn, _cmsDupDefaultFn |
| +_cmsMemPluginChunkType _cmsMemPluginChunk = {_cmsMalloc, _cmsMallocZero, _cmsFree, |
| + _cmsRealloc, _cmsCalloc, _cmsDupMem |
| }; |
| |
| - |
| -// Reset and duplicate memory manager |
| void _cmsAllocMemPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) |
| { |
| _cmsAssert(ctx != NULL); |
| |
| - if (src != NULL) { |
| + if (src != NULL) { |
| |
| // Duplicate |
| - ctx ->chunks[MemPlugin] = _cmsSubAllocDup(ctx ->MemPool, src ->chunks[MemPlugin], sizeof(_cmsMemPluginChunkType)); |
| + ctx ->chunks[MemPlugin] = _cmsSubAllocDup(ctx ->MemPool, src ->chunks[MemPlugin], sizeof(_cmsMemPluginChunkType)); |
| } |
| else { |
| |
| // To reset it, we use the default allocators, which cannot be overridden |
| ctx ->chunks[MemPlugin] = &ctx ->DefaultMemoryManager; |
| - } |
| + } |
| } |
| |
| -// Auxiliary to fill memory management functions from plugin (or context 0 defaults) |
| void _cmsInstallAllocFunctions(cmsPluginMemHandler* Plugin, _cmsMemPluginChunkType* ptr) |
| { |
| if (Plugin == NULL) { |
| @@ -258,96 +151,17 @@ void _cmsInstallAllocFunctions(cmsPluginMemHandler* Plugin, _cmsMemPluginChunkTy |
| ptr ->ReallocPtr = Plugin -> ReallocPtr; |
| |
| // Make sure we revert to defaults |
| - ptr ->MallocZeroPtr= _cmsMallocZeroDefaultFn; |
| - ptr ->CallocPtr = _cmsCallocDefaultFn; |
| - ptr ->DupPtr = _cmsDupDefaultFn; |
| - |
| + ptr ->MallocZeroPtr= _cmsMallocZero; |
| + ptr ->CallocPtr = _cmsCalloc; |
| + ptr ->DupPtr = _cmsDupMem; |
| + |
| if (Plugin ->MallocZeroPtr != NULL) ptr ->MallocZeroPtr = Plugin -> MallocZeroPtr; |
| if (Plugin ->CallocPtr != NULL) ptr ->CallocPtr = Plugin -> CallocPtr; |
| if (Plugin ->DupPtr != NULL) ptr ->DupPtr = Plugin -> DupPtr; |
| - |
| - } |
| -} |
| - |
| - |
| -// Plug-in replacement entry |
| -cmsBool _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase *Data) |
| -{ |
| - cmsPluginMemHandler* Plugin = (cmsPluginMemHandler*) Data; |
| - _cmsMemPluginChunkType* ptr; |
| - |
| - // NULL forces to reset to defaults. In this special case, the defaults are stored in the context structure. |
| - // Remaining plug-ins does NOT have any copy in the context structure, but this is somehow special as the |
| - // context internal data should be malloc'ed by using those functions. |
| - if (Data == NULL) { |
| - |
| - struct _cmsContext_struct* ctx = ( struct _cmsContext_struct*) ContextID; |
| - |
| - // Return to the default allocators |
| - if (ContextID != NULL) { |
| - ctx->chunks[MemPlugin] = (void*) &ctx->DefaultMemoryManager; |
| - } |
| - return TRUE; |
| - } |
| - |
| - // Check for required callbacks |
| - if (Plugin -> MallocPtr == NULL || |
| - Plugin -> FreePtr == NULL || |
| - Plugin -> ReallocPtr == NULL) return FALSE; |
| - |
| - // Set replacement functions |
| - ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| - if (ptr == NULL) |
| - return FALSE; |
| - |
| - _cmsInstallAllocFunctions(Plugin, ptr); |
| - return TRUE; |
| -} |
| |
| -// Generic allocate |
| -void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size) |
| -{ |
| - _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| - return ptr ->MallocPtr(ContextID, size); |
| -} |
| - |
| -// Generic allocate & zero |
| -void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size) |
| -{ |
| - _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| - return ptr->MallocZeroPtr(ContextID, size); |
| -} |
| - |
| -// Generic calloc |
| -void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size) |
| -{ |
| - _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| - return ptr->CallocPtr(ContextID, num, size); |
| -} |
| - |
| -// Generic reallocate |
| -void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number size) |
| -{ |
| - _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| - return ptr->ReallocPtr(ContextID, Ptr, size); |
| -} |
| - |
| -// Generic free memory |
| -void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr) |
| -{ |
| - if (Ptr != NULL) { |
| - _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| - ptr ->FreePtr(ContextID, Ptr); |
| } |
| } |
| |
| -// Generic block duplication |
| -void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size) |
| -{ |
| - _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); |
| - return ptr ->DupPtr(ContextID, Org, size); |
| -} |
| - |
| // ******************************************************************************************** |
| |
| // Sub allocation takes care of many pointers of small size. The memory allocated in |