pennmush/game/data/
pennmush/game/log/
pennmush/game/save/
pennmush/game/txt/evt/
pennmush/game/txt/nws/
pennmush/os2/
pennmush/po/
pennmush/win32/msvc.net/
pennmush/win32/msvc6/
/*  Author: Mark Moraes <moraes@csri.toronto.edu> */

/* Modified by Alan Schwartz for PennMUSH.
 * Should be included after config.h
 */

#ifndef __CSRIMALLOC_H
#define __CSRIMALLOC_H

#include "config.h"
#define univptr_t               Malloc_t
#define memsize_t               size_t
#include "confmagic.h"

/*
 *  defined so users of new features of this malloc can #ifdef
 *  invocations of those features.
 */
#define CSRIMALLOC

#ifdef CSRI_TRACE
/* Tracing malloc definitions - helps find leaks */

extern univptr_t trace__malloc
_((size_t nbytes, const char *fname, int linenum));
extern univptr_t trace__calloc
_((size_t nelem, size_t elsize, const char *fname, int linenum));
extern univptr_t trace__realloc
_((univptr_t cp, size_t nbytes, const char *fname, int linenum));
extern univptr_t trace__valloc _((size_t size, const char *fname, int linenum));
extern univptr_t trace__memalign
_((size_t alignment, size_t size, const char *fname, int linenum));
extern univptr_t trace__emalloc
_((size_t nbytes, const char *fname, int linenum));
extern univptr_t trace__ecalloc
_((size_t nelem, size_t sz, const char *fname, int linenum));
extern univptr_t trace__erealloc
_((univptr_t ptr, size_t nbytes, const char *fname, int linenum));
extern char *trace__strdup _((const char *s, const char *fname, int linenum));
extern char *trace__strsave _((const char *s, const char *fname, int linenum));
extern void trace__free _((univptr_t cp, const char *fname, int linenum));
extern void trace__cfree _((univptr_t cp, const char *fname, int linenum));

#define malloc(x)               trace__malloc((x), __FILE__, __LINE__)
#define calloc(x, n)            trace__calloc((x), (n), __FILE__, __LINE__)
#define realloc(p, x)           trace__realloc((p), (x), __FILE__, __LINE__)
#define memalign(x, n)          trace__memalign((x), (n), __FILE__, __LINE__)
#define valloc(x)               trace__valloc((x), __FILE__, __LINE__)
#define emalloc(x)              trace__emalloc((x), __FILE__, __LINE__)
#define ecalloc(x, n)           trace__ecalloc((x), (n), __FILE__, __LINE__)
#define erealloc(p, x)          trace__erealloc((p), (x), __FILE__, __LINE__)
#define strdup(p)               trace__strdup((p), __FILE__, __LINE__)
#define strsave(p)              trace__strsave((p), __FILE__, __LINE__)
/* cfree and free are identical */
#define cfree(p)                trace__free((p), __FILE__, __LINE__)
#define free(p)                 trace__free((p), __FILE__, __LINE__)

#else				/* CSRI_TRACE */

extern univptr_t malloc _((size_t nbytes));
extern univptr_t calloc _((size_t nelem, size_t elsize));
extern univptr_t realloc _((univptr_t cp, size_t nbytes));
extern univptr_t valloc _((size_t size));
extern univptr_t memalign _((size_t alignment, size_t size));
extern univptr_t emalloc _((size_t nbytes));
extern univptr_t ecalloc _((size_t nelem, size_t sz));
extern univptr_t erealloc _((univptr_t ptr, size_t nbytes));
extern char *strdup _((const char *s));
extern char *strsave _((const char *s));
extern Free_t free _((univptr_t cp));
extern Free_t cfree _((univptr_t cp));

#endif				/* CSRI_TRACE */

extern void mal_debug _((int level));
extern void mal_dumpleaktrace _((FILE * fp));
extern void mal_heapdump _((FILE * fp));
extern void mal_leaktrace _((int value));
extern void mal_sbrkset _((int n));
extern void mal_slopset _((int n));
extern void mal_statsdump _((FILE * fp));
extern void mal_setstatsfile _((FILE * fp));
extern void mal_trace _((int value));
extern int mal_verify _((int fullcheck));
extern void mal_mmap _((char *fname));


/*
 *  You may or may not want this - In gcc version 1.30, on Sun3s running
 *  SunOS3.5, this works fine.
 */
#ifdef __GNUC__
#ifndef alloca
#define alloca(n) __builtin_alloca(n)
#endif
#endif				/* __GNUC__ */
#ifdef sparc
#define alloca(n) __builtin_alloca(n)
#endif				/* sparc */


#endif	/* __CSRIMALLOC_H__ */			/* Do not add anything after this line */