summaryrefslogtreecommitdiff
path: root/libmiav/debug.h
diff options
context:
space:
mode:
Diffstat (limited to 'libmiav/debug.h')
-rw-r--r--libmiav/debug.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/libmiav/debug.h b/libmiav/debug.h
new file mode 100644
index 0000000..48c0830
--- /dev/null
+++ b/libmiav/debug.h
@@ -0,0 +1,103 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * debug.h
+ *
+ * Tue Apr 12 14:34:20 CEST 2005
+ * Copyright 2005 Bent Bisballe
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of MIaV.
+ *
+ * MIaV is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * MIaV is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with MIaV; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#include "config.h"
+#ifndef __MIAV_DEBUG_H__
+#define __MIAV_DEBUG_H__
+
+//#define DEBUG_ALLOC
+
+#ifdef DEBUG_ALLOC
+typedef struct _A_{
+ struct _A_* prev;
+ struct _A_* next;
+ char name[32];
+ void *addr;
+} __debug__;
+
+__debug__ *debug_first = NULL;
+
+inline void debugAlloc(void *p, char* name)
+{
+ __debug__ *d = debug_first;
+
+ fprintf(stderr, "Adding %d - %s\n", p, name);
+
+ debug_first = (__debug__*)malloc(sizeof(__debug__));
+ debug_first->prev = NULL;
+ debug_first->next = d;
+ if(d) d->prev = debug_first;
+ debug_first->addr = p;
+ strcpy(debug_first->name, name);
+}
+
+inline void debugFree(void *p)
+{
+ __debug__ *d = debug_first;
+
+ while(d && d->addr != p) {
+ d = d->next;
+ }
+
+ if(!d) {
+ fprintf(stderr, "ERROR: memory address not found %d - perhaps already freed!\n", p);
+ exit(1);
+ }
+
+ fprintf(stderr, "Removing %d - %s\n", p, d->name);
+ __debug__ *next = d->next;
+ __debug__ *prev = d->prev;
+ if(prev) prev->next = d->next;
+ if(next) next->prev = d->prev;
+ if(debug_first == d) debug_first = next;
+ free(d);
+}
+
+inline void debugPrint()
+{
+ __debug__ *d = debug_first;
+
+ fprintf(stderr, "Alloc List:\n");
+
+ while(d) {
+ fprintf(stderr, "\t[%d] %s\n", d->addr, d->name);
+ d = d->next;
+ }
+}
+
+#define FREE(x) debugFree(x)
+#define ALLOC(x, y) debugAlloc(x, y)
+#define PRINT() debugPrint()
+
+#else/*DEBUG_ALLOC*/
+
+#define FREE(x) {}
+#define ALLOC(x, y) {}
+#define PRINT() {}
+
+#endif/*DEBUG_ALLOC*/
+
+#endif/*__MIAV_DEBUG_H__*/