diff --git a/src/block_alloc.h b/src/block_alloc.h
index a50a01e8aa8fb027fbccf7a1ac48ef4b9eac8df9..855475abb49ea49c4d874aef9f552de8b5556afe 100644
--- a/src/block_alloc.h
+++ b/src/block_alloc.h
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: block_alloc.h,v 1.68 2003/06/30 17:06:08 mast Exp $
+|| $Id: block_alloc.h,v 1.69 2004/04/03 15:22:12 mast Exp $
 */
 
 #undef PRE_INIT_BLOCK
@@ -271,7 +271,6 @@ void PIKE_CONCAT(really_free_,DATA)(struct DATA *d)			\
 									\
     DO_IF_DMALLOC({							\
 	size_t i;							\
-	extern void dmalloc_check_block_free(void *p, char *loc);	\
 	for (i = 0; i < (BSIZE); i++) {					\
 	  dmalloc_check_block_free(blk->x + i, DMALLOC_LOCATION());	\
 	  dmalloc_unregister(blk->x + i, 1);				\
@@ -295,7 +294,6 @@ static void PIKE_CONCAT3(free_all_,DATA,_blocks_unlocked)(void)		\
    for(tmp=PIKE_CONCAT(DATA,_blocks);tmp;tmp=tmp->next)                 \
    {                                                                    \
      size_t tmp2;							\
-     extern void dmalloc_check_block_free(void *p, char *loc);          \
      for(tmp2=0;tmp2<(BSIZE);tmp2++)					\
      {                                                                  \
        dmalloc_check_block_free(tmp->x+tmp2, DMALLOC_LOCATION());       \
diff --git a/src/dmalloc.h b/src/dmalloc.h
index 0a6e1e1b338435280e8c68f5610d83a4fa4d80c5..6381540894634eedee39b7dc93e0190b933f04b9 100644
--- a/src/dmalloc.h
+++ b/src/dmalloc.h
@@ -2,9 +2,12 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: dmalloc.h,v 1.46 2004/03/16 18:35:13 mast Exp $
+|| $Id: dmalloc.h,v 1.47 2004/04/03 15:22:12 mast Exp $
 */
 
+#ifndef DMALLOC_H
+#define DMALLOC_H
+
 PMOD_EXPORT extern void *debug_xalloc(size_t);
 PMOD_EXPORT extern void debug_xfree(void *);
 PMOD_EXPORT extern void *debug_xmalloc(size_t);
@@ -16,6 +19,10 @@ PMOD_EXPORT extern void *debug_xrealloc(void *,size_t);
 
 #define DMALLOC_LOCATION() DMALLOC_NAMED_LOCATION("")
 
+typedef char *LOCATION;
+#define LOCATION_NAME(X) ((X)+1)
+#define LOCATION_IS_DYNAMIC(X) ((X)[0]=='D')
+
 #ifdef DMALLOC_TRACE
 #define DMALLOC_TRACELOGSIZE 131072
 
@@ -42,22 +49,23 @@ void add_marks_to_memhdr(struct memhdr *to,void *ptr);
 
 extern int verbose_debug_malloc;
 extern void dmalloc_trace(void *);
-extern void dmalloc_register(void *, int, char *);
+extern void dmalloc_register(void *, int, LOCATION);
 extern int dmalloc_unregister(void *, int);
-extern void *debug_malloc(size_t,  char *);
-extern void *debug_calloc(size_t, size_t,  char *);
-extern void *debug_realloc(void *, size_t,  char *);
-extern void debug_free(void *,  char *,int);
-extern char *debug_strdup(const char *, char *);
+extern void *debug_malloc(size_t, LOCATION);
+extern void *debug_calloc(size_t, size_t, LOCATION);
+extern void *debug_realloc(void *, size_t, LOCATION);
+extern void debug_free(void *, LOCATION, int);
+extern char *debug_strdup(const char *, LOCATION);
 extern void reset_debug_malloc(void);
+void dmalloc_check_block_free(void *, LOCATION);
 extern void dmalloc_free(void *p);
-extern int debug_malloc_touch_fd(int,  char *);
-extern int debug_malloc_register_fd(int,  char *);
-extern int debug_malloc_close_fd(int,  char *);
+extern int debug_malloc_touch_fd(int, LOCATION);
+extern int debug_malloc_register_fd(int, LOCATION);
+extern int debug_malloc_close_fd(int, LOCATION);
 extern int dmalloc_mark_as_free(void*,int);
 
-void *debug_malloc_update_location(void *, char *);
-void *debug_malloc_update_location_ptr(void *, ptrdiff_t, char *);
+void *debug_malloc_update_location(void *, LOCATION);
+void *debug_malloc_update_location_ptr(void *, ptrdiff_t, LOCATION);
 void search_all_memheaders_for_references(void);
 void cleanup_memhdrs(void);
 void cleanup_debug_malloc(void);
@@ -170,3 +178,5 @@ int dmalloc_is_invalid_memory_block(void *block);
 #endif /* !MALLOC_TRACE */
 
 #endif /* !DEBUG_MALLOC */
+
+#endif	/* !DMALLOC_H */
diff --git a/src/pike_memory.c b/src/pike_memory.c
index 28f826f0a2646f7487bfb1feff8a194031615e0a..32cbe545e932a4888ed3f782214079ccf2401862 100644
--- a/src/pike_memory.c
+++ b/src/pike_memory.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: pike_memory.c,v 1.149 2004/03/24 20:05:34 grubba Exp $
+|| $Id: pike_memory.c,v 1.150 2004/04/03 15:23:05 mast Exp $
 */
 
 #include "global.h"
@@ -11,7 +11,7 @@
 #include "pike_macros.h"
 #include "gc.h"
 
-RCSID("$Id: pike_memory.c,v 1.149 2004/03/24 20:05:34 grubba Exp $");
+RCSID("$Id: pike_memory.c,v 1.150 2004/04/03 15:23:05 mast Exp $");
 
 /* strdup() is used by several modules, so let's provide it */
 #ifndef HAVE_STRDUP
@@ -691,10 +691,6 @@ void *fake_calloc(size_t x, size_t y)
 #define strdup __real_strdup
 #endif
 
-#define LOCATION char *
-#define LOCATION_NAME(X) ((X)+1)
-#define LOCATION_IS_DYNAMIC(X) ((X)[0]=='D')
-
 
 static struct memhdr *my_find_memhdr(void *, int);