From 4923dd22a7c5d9984d822310fed466af27a35abb Mon Sep 17 00:00:00 2001
From: Robert James Kaes <rjkaes@users.sourceforge.net>
Date: Sat, 8 Sep 2001 18:55:58 +0000
Subject: Added the debugging_(malloc|calloc|free) functions to help track
 memory usage. There are also now defines for safe(malloc|calloc|free) which
 allow for debugging code to be enabled or not.

---
 src/utils.c | 36 ++++++++++++++++++++++++++++++++----
 src/utils.h | 20 +++++++++++++++++++-
 2 files changed, 51 insertions(+), 5 deletions(-)

diff --git a/src/utils.c b/src/utils.c
index 228b79f..7d9a872 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -1,4 +1,4 @@
-/* $Id: utils.c,v 1.9 2001-09-07 04:21:07 rjkaes Exp $
+/* $Id: utils.c,v 1.10 2001-09-08 18:55:58 rjkaes Exp $
  *
  * Misc. routines which are used by the various functions to handle strings
  * and memory allocation and pretty much anything else we can think of. Also,
@@ -30,6 +30,34 @@
 #include "sock.h"
 #include "utils.h"
 
+/*
+ * These are the debugging calloc, malloc, and free versions
+ */
+#ifndef NDEBUG
+
+void *debugging_calloc(size_t nmemb, size_t size, const char *file, unsigned long line)
+{
+	void *ptr = calloc(nmemb, size);
+	fprintf(stderr, "{calloc: %p:%u x %u} %s:%lu\n", ptr, nmemb, size, file, line);
+	return ptr;
+}
+
+void *debugging_malloc(size_t size, const char *file, unsigned long line)
+{
+	void *ptr = malloc(size);
+	fprintf(stderr, "{malloc: %p:%u} %s:%lu\n", ptr, size, file, line);
+	return ptr;
+}
+
+void debugging_free(void *ptr, const char *file, unsigned long line)
+{
+	fprintf(stderr, "{free: %p} %s:%lu\n", ptr, file, line);
+	free(ptr);
+	return;
+}
+
+#endif
+
 /*
  * Display an error to the client.
  */
@@ -60,13 +88,13 @@ int httperr(struct conn_s *connptr, int err, const char *msg)
 	char timebuf[30];
 	time_t global_time;
 
-	header_buffer = malloc(HEADER_SIZE);
+	header_buffer = safemalloc(HEADER_SIZE);
 	if (!header_buffer) {
 		log_message(LOG_ERR, "Could not allocate memory.");
 		return -1;
 	}
 
-	message_buffer = malloc(MAXBUFFSIZE);
+	message_buffer = safemalloc(MAXBUFFSIZE);
 	if (!message_buffer) {
 		log_message(LOG_ERR, "Could not allocate memory.");
 		safefree(header_buffer);
@@ -80,7 +108,7 @@ int httperr(struct conn_s *connptr, int err, const char *msg)
 	snprintf(header_buffer, HEADER_SIZE - 1, headers, err, msg, PACKAGE, VERSION, timebuf, strlen(message_buffer));
 
 	output_size = strlen(message_buffer) + strlen(header_buffer);
-	connptr->output_message = malloc(output_size + 1);
+	connptr->output_message = safemalloc(output_size + 1);
 	if (!connptr->output_message) {
 		log_message(LOG_ERR, "Could not allocate memory.");
 		safefree(header_buffer);
diff --git a/src/utils.h b/src/utils.h
index 6c22395..24b7758 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -1,4 +1,4 @@
-/* $Id: utils.h,v 1.6 2001-08-30 16:52:56 rjkaes Exp $
+/* $Id: utils.h,v 1.7 2001-09-08 18:55:58 rjkaes Exp $
  *
  * See 'utils.h' for a detailed description.
  *
@@ -34,4 +34,22 @@ extern size_t strlcat(char *dst, const char *src, size_t size);
 extern size_t strlcpy(char *dst, const char *src, size_t size);
 #endif /* HAVE_STRLCPY */
 
+/*
+ * The following is to allow for better memory checking.
+ */
+#ifndef NDEBUG
+
+extern void *debugging_calloc(size_t nmemb, size_t size, const char *file, unsigned long line);
+extern void *debugging_malloc(size_t size, const char *file, unsigned long line);
+extern void debugging_free(void *ptr, const char *file, unsigned long line);
+
+#  define safecalloc(x, y) debugging_calloc(x, y, __FILE__, __LINE__)
+#  define safemalloc(x) debugging_malloc(x, __FILE__, __LINE__)
+#  define safefree(x) debugging_free(x, __FILE__, __LINE__)
+#else
+#  define safecalloc(x, y) calloc(x, y)
+#  define safemalloc(x) malloc(x)
+#  define safefree(x) free(x)
+#endif
+
 #endif
-- 
cgit v1.2.3