summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Ohly <patrick.ohly@intel.com>2014-09-01 12:29:52 +0200
committerPatrick Ohly <patrick.ohly@intel.com>2014-09-04 17:27:16 +0200
commit4c64442edc907a3ed760b7ea33a1aeae874cb5e7 (patch)
tree385f05fdeb9994f609459893eacd79b72fa1b473
parent395c06020a004962b1ecc1fefca3f5fd82b71467 (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-xsrc/syncml_tk/src/sml/inc/smldef.h3
-rwxr-xr-xsrc/syncml_tk/src/sml/lib/all/libmem.c13
-rwxr-xr-xsrc/syncml_tk/src/sml/lib/inc/libmem.h10
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))