diff options
author | Patrick Ohly <patrick.ohly@intel.com> | 2014-09-01 12:29:52 +0200 |
---|---|---|
committer | Patrick Ohly <patrick.ohly@intel.com> | 2014-09-04 17:27:16 +0200 |
commit | 4c64442edc907a3ed760b7ea33a1aeae874cb5e7 (patch) | |
tree | 385f05fdeb9994f609459893eacd79b72fa1b473 | |
parent | 395c06020a004962b1ecc1fefca3f5fd82b71467 (diff) |
SMLTK: call memory functions through pointers
This additional indirection allows users of the library to replace the
default implementation from libc.
The feature is optional. In libsynthesis it can be enabled in
target_options.h. Users of libsynthesis do not have access to
libmem.h, so they need to provide their own declaration of the
function pointers.
-rwxr-xr-x | src/syncml_tk/src/sml/inc/smldef.h | 3 | ||||
-rwxr-xr-x | src/syncml_tk/src/sml/lib/all/libmem.c | 13 | ||||
-rwxr-xr-x | src/syncml_tk/src/sml/lib/inc/libmem.h | 10 |
3 files changed, 24 insertions, 2 deletions
diff --git a/src/syncml_tk/src/sml/inc/smldef.h b/src/syncml_tk/src/sml/inc/smldef.h index 10d5839..557db55 100755 --- a/src/syncml_tk/src/sml/inc/smldef.h +++ b/src/syncml_tk/src/sml/inc/smldef.h @@ -99,13 +99,14 @@ typedef Byte_t Boolean_t; /**< a boolean */ typedef Short_t Ret_t; /**< Return Type of API Commands */ -typedef Long_t Length_t; /**< System dependent string length */ typedef Short_t MemHandle_t; /**< Memory object Handle */ typedef unsigned char *MemPtr_t; /**< Memory object Pointer */ typedef void *VoidPtr_t; /**< Void Pointer */ #ifdef HAVE_STDINT_H +typedef uintptr_t Length_t; /**< System dependent string length */ typedef uintptr_t MemSize_t; /**< System dependent memory object size */ #else +typedef Long_t Length_t; /**< System dependent string length */ typedef Long_t MemSize_t; /**< System dependent memory object size */ #endif typedef unsigned char MemByte_t; /**< Memory element */ diff --git a/src/syncml_tk/src/sml/lib/all/libmem.c b/src/syncml_tk/src/sml/lib/all/libmem.c index fdb720a..8285cfe 100755 --- a/src/syncml_tk/src/sml/lib/all/libmem.c +++ b/src/syncml_tk/src/sml/lib/all/libmem.c @@ -56,6 +56,18 @@ #include "MemoryMgr.h" #endif +#ifdef SML_LIB_MEMORY_FUNCTION_POINTERS + +void *(*smlLibRealloc)(void *pObject, MemSize_t size) = realloc; +void (*smlLibFree)(void *pObject) = free; +void *(*smlLibMemset)(void *pObject, int value, MemSize_t count) = memset; +void *(*smlLibMemcpy)(void *pTarget, const void *pSource, MemSize_t count) = memcpy; +void *(*smlLibMemmove)(void *pTarget, const void *pSource, MemSize_t count) = memmove; +int (*smlLibMemcmp)(const void *pTarget, const void *pSource, MemSize_t count) = memcmp; +void *(*smlLibMalloc)(MemSize_t size) = malloc; + +#else /* SML_LIB_MEMORY_FUNCTION_POINTERS */ + #ifdef MEMORY_PROFILING // %%% luz 2002-10-02 #include "profiling.h" @@ -185,3 +197,4 @@ SML_API void *smlLibMalloc(MemSize_t size) { +#endif /* SML_LIB_MEMORY_FUNCTION_POINTERS */ diff --git a/src/syncml_tk/src/sml/lib/inc/libmem.h b/src/syncml_tk/src/sml/lib/inc/libmem.h index 95be40a..a5cd5c1 100755 --- a/src/syncml_tk/src/sml/lib/inc/libmem.h +++ b/src/syncml_tk/src/sml/lib/inc/libmem.h @@ -73,7 +73,15 @@ *************************************************************************/ -#ifdef __PALM_OS__ /* we use #define to reduce heap usage */ +#ifdef SML_LIB_MEMORY_FUNCTION_POINTERS +extern void *(*smlLibRealloc)(void *pObject, MemSize_t size); +extern void (*smlLibFree)(void *pObject); +extern void *(*smlLibMemset)(void *pObject, int value, MemSize_t count); +extern void *(*smlLibMemcpy)(void *pTarget, const void *pSource, MemSize_t count); +extern void *(*smlLibMemmove)(void *pTarget, const void *pSource, MemSize_t count); +extern int (*smlLibMemcmp)(const void *pTarget, const void *pSource, MemSize_t count); +extern void *(*smlLibMalloc)(MemSize_t size); +#elif defined __PALM_OS__ /* we use #define to reduce heap usage */ void *smlLibRealloc (VoidPtr_t objectP, MemSize_t constSize) LIB_FUNC; void smlLibFree (void* objectP) LIB_FUNC; #define smlLibMemset(pObject,value,count) ((void)MemSet((VoidPtr_t)pObject,(MemSize_t)count,(int)value)) |