#ifndef __PLATFORM_H__
#define __PLATFORM_H__

#include <string.h>

////////////////////////////////////////////////////////////////////////////
//
//#undef MEMORY_DEBUG
//#define MEMORY_DEBUG

#ifdef __QSEE__
extern void * qsee_malloc(size_t);
extern void qsee_free(void*);
#define target_malloc  qsee_malloc
#define target_free    qsee_free

#elif defined(__MC__)
extern void * tlApiMalloc(size_t);
extern void tlApiFree(void*);
#define target_malloc  tlApiMalloc
#define target_free    tlApiFree

#elif defined(__BF__)
#include "tee_internal_api.h"

#define target_malloc(x) TEE_Malloc(x, 0)
#define target_free   TEE_Free

#else
#include <stdlib.h>
#define target_malloc malloc
#define target_free   free
#endif

#ifdef MEMORY_DEBUG
extern void init_memlist(void);
extern size_t stat_mem_info(void);
extern void free_mem_leaked(void);

extern void *_plt_malloc(const char*, int, int);
extern void _plt_free(const char*, int, void*);

#define plt_malloc(x) \
   _plt_malloc(__func__, __LINE__, x)
#define plt_free(p) \
   _plt_free(__func__, __LINE__, p)
#else
#define plt_malloc  target_malloc
#define plt_free    target_free
#endif

#define plt_memcpy   memcpy
#define plt_memset   memset
#define plt_memcmp   memcmp
#define plt_strcpy   strcpy
#define plt_strlen   strlen
#define plt_strcmp   strcmp

#ifdef __ARMCC__
extern char *_plt_strsep(char **stringp, const char *delim);
#define plt_strsep   _plt_strsep
#else
extern char *strsep(char **stringp, const char *delim);
#define plt_strsep   strsep
#endif

extern char *plt_strdup(const char *s);

////////////////////////////////////////////////////////////////////////////

#endif /*__PLATFORM_H__*/
