#define ptrdiff_t int
#define __ONEFILE
-#include <stdlib.h>
+/* We can't declare malloc and realloc here because we don't know
+ if they are char * or void *, and the compiler will give an error
+ if we get it wrong and they happen to be defined in some header
+ file e.g. <stdio.h>. We can't include <stdlib.h> here because
+ it has some incompatability with our own includes, e.g. size_t or
+ whatever. So we just punt. This causes malloc and realloc to
+ default to returning "int", which works for most cases we care
+ about. FIXME-somehow. */
+/* #include <stdlib.h> */
#include "gmalloc.h"
extern char *getenv();
PTR hdr;
__malloc_hook = old_malloc_hook;
- hdr = malloc(size);
+ hdr = (PTR) malloc(size);
__malloc_hook = tr_mallochook;
/* We could be printing a NULL here; that's OK */
__free_hook = old_free_hook;
__malloc_hook = old_malloc_hook;
__realloc_hook = old_realloc_hook;
- hdr = realloc(ptr, size);
+ hdr = (PTR) realloc(ptr, size);
__free_hook = tr_freehook;
__malloc_hook = tr_mallochook;
__realloc_hook = tr_reallochook;
return hdr;
}
+/* We enable tracing if either the environment variable MALLOC_TRACE
+ is set, or if the variable mallwatch has been patched to an address
+ that the debugging user wants us to stop on. When patching mallwatch,
+ don't forget to set a breakpoint on tr_break! */
+
void
mtrace()
{
char *mallfile;
mallfile = getenv (mallenv);
- if (mallfile) {
- mallstream = fopen (mallfile, "w");
+ if (mallfile || mallwatch) {
+ mallstream = fopen (mallfile? mallfile: "/dev/null", "w");
if (mallstream) {
/* Be sure it doesn't malloc its buffer! */
setbuf (mallstream, mallbuf);