summaryrefslogtreecommitdiff
path: root/noncore/settings/aqpkg/mem.cpp
authorandyq <andyq>2002-09-28 23:22:41 (UTC)
committer andyq <andyq>2002-09-28 23:22:41 (UTC)
commit8ebc71609e5263d096f7331a5e0fa95b41eb1d77 (patch) (side-by-side diff)
treeb51cc78a419a8735d4bc447229b4561b5c6edbe5 /noncore/settings/aqpkg/mem.cpp
parente78460a23cb8bea25f45cdd01f74e8c1d07da1a8 (diff)
downloadopie-8ebc71609e5263d096f7331a5e0fa95b41eb1d77.zip
opie-8ebc71609e5263d096f7331a5e0fa95b41eb1d77.tar.gz
opie-8ebc71609e5263d096f7331a5e0fa95b41eb1d77.tar.bz2
*** empty log message ***
Diffstat (limited to 'noncore/settings/aqpkg/mem.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/aqpkg/mem.cpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/noncore/settings/aqpkg/mem.cpp b/noncore/settings/aqpkg/mem.cpp
new file mode 100644
index 0000000..76ce35c
--- a/dev/null
+++ b/noncore/settings/aqpkg/mem.cpp
@@ -0,0 +1,105 @@
+/***************************************************************************
+ mem.h - description
+ -------------------
+ begin : Mon Aug 26 2002
+ copyright : (C) 2002 by Andy Qua
+ email : andy.qua@blueyonder.co.uk
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program 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. *
+ * *
+ ***************************************************************************/
+#include <stdio.h>
+#include <fstream>
+#include <list>
+using namespace std;
+
+#define __MEMFILE_C
+#include "global.h"
+
+#ifdef _DEBUG
+
+void __cdecl *operator new( unsigned int size, const char *file, int line )
+{
+ void *ptr = (void *)malloc(size);
+ AddTrack((long)ptr, size, file, line);
+ return(ptr);
+}
+
+void operator delete(void *p)
+{
+ RemoveTrack((long)p);
+ free(p);
+}
+
+#endif
+
+
+typedef struct {
+ long address;
+ long size;
+ char file[64];
+ long line;
+} ALLOC_INFO;
+
+typedef list<ALLOC_INFO*> AllocList;
+
+AllocList allocList;
+
+
+
+void AddTrack(long addr, long asize, const char *fname, long lnum)
+{
+ ALLOC_INFO *info;
+
+
+ info = (ALLOC_INFO *)malloc(sizeof( ALLOC_INFO ));
+ info->address = addr;
+ strncpy(info->file, fname, 63);
+ info->line = lnum;
+ info->size = asize;
+ allocList.insert(allocList.begin(), info);
+};
+
+void RemoveTrack(long addr)
+{
+ AllocList::iterator i;
+
+ bool found = false;
+ for(i = allocList.begin(); i != allocList.end(); i++)
+ {
+ if((*i)->address == addr)
+ {
+ allocList.remove((*i));
+ found = true;
+ break;
+ }
+ }
+}
+
+void DumpUnfreed()
+{
+ AllocList::iterator i;
+ long totalSize = 0;
+ char buf[1024];
+
+
+// if(!allocList)
+// return;
+
+ for(i = allocList.begin(); i != allocList.end(); i++) {
+ sprintf(buf, "%-15s: LINE %ld, ADDRESS %ld %ld unfreed",
+ (*i)->file, (*i)->line, (*i)->address, (*i)->size);
+ cout <<buf << endl;
+ totalSize += (*i)->size;
+ }
+ sprintf(buf, "-----------------------------------------------------------\n");
+ cout <<buf << endl;
+ sprintf(buf, "Total Unfreed: %ld bytes\n", totalSize);
+ cout <<buf << endl;
+};