#ifndef MY_MALLOC_H
#define MY_MALLOC_H
/*
 * to use sysmalloc or malloc replacements
 */
#if defined(SYSMALLOC) || \
    (defined(SMALLOC) && defined(SBRK_OK)) 
#define MALLOC(x)       malloc(x)
#define FREE(x)         free(x)
#define REALLOC(x,y)    realloc(x,y)
#define CALLOC(x,y)     calloc(x,y)
#endif
/* smalloc - choice between replacement or wrapper */
#if defined(SMALLOC) && !defined(SYSMALLOC)
#  ifdef SBRK_OK
#    define smalloc_malloc        malloc
#    define smalloc_free          free
#    define smalloc_realloc       realloc
#    define smalloc_calloc        calloc
#  else
#    define MALLOC(x)       smalloc_malloc(x)
#    define FREE(x)         smalloc_free(x)
#    define REALLOC(x,y)    smalloc_realloc(x,y)
#    define CALLOC(x,y)     smalloc_calloc(x,y)
#  endif
#endif
/* bsdmalloc - always a replacement */
#if defined(BSDMALLOC) && !defined(SYSMALLOC)
#define MALLOC(x)       bsdmalloc_malloc(x)
#define FREE(x)         bsdmalloc_free(x)
#define REALLOC(x,y)    bsdmalloc_realloc(x,y)
#define CALLOC(x,y)     bsdmalloc_calloc(x,y)
#ifndef _FUNC_SPEC_
#include "bsdmalloc.h"
#endif
#endif
#ifdef MMALLOC 
#define MALLOC(x)       mmalloc(x)
#define FREE(x)         mfree(x)
#define REALLOC(x,y)    mrealloc(x,y)
#define CALLOC(x,y)     mcalloc(x,y)
#ifndef _FUNC_SPEC_
void mfree(void *block);
void *mrealloc(void *block, int size);
void *mcalloc(int num, int size);
void *mmalloc(int size);
#endif
#endif
#ifdef GNUMALLOC
#define MALLOC(x)       gnumalloc(x)
#define FREE(x)         gnufree(x)
#define REALLOC(x,y)    gnurealloc(x,y)
#define CALLOC(x,y)     gnucalloc(x,y)
#endif
#define DXALLOC(x,tag,desc)     xalloc(x)
#define DMALLOC(x,tag,desc)     MALLOC(x)
#define DREALLOC(x,y,tag,desc)  REALLOC(x,y)
#define DCALLOC(x,y,tag,desc)   CALLOC(x,y)
#endif /* MY_MALLOC_H */