OSDN Git Service

client 0.6.0 release
[unagi/old-svn-converted.git] / client / tag / 0.6.0 / memory_manage.c
diff --git a/client/tag/0.6.0/memory_manage.c b/client/tag/0.6.0/memory_manage.c
new file mode 100644 (file)
index 0000000..a72000d
--- /dev/null
@@ -0,0 +1,69 @@
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "memory_manage.h"
+enum{
+       MANAGE_NUM = 0x100
+};
+
+struct manage{
+       const char *file, *function;
+       int line;
+       void *addr;
+       int size;
+};
+static const struct manage EMPTY = {
+       .file = NULL, .line = 0, .function = NULL,
+       .addr = NULL, .size = 0
+};
+static struct manage management[MANAGE_NUM];
+void mm_init(void)
+{
+       int i;
+       for(i = 0; i < MANAGE_NUM; i++){
+               management[i] = EMPTY;
+       }
+}
+void *mm_malloc(const char *file, int line, const char *function, int size)
+{
+       int i;
+       struct manage *t = management;
+       for(i = 0; i < MANAGE_NUM; i++){
+               if(t->addr == NULL){
+                       t->addr = malloc(size);
+                       t->size = size;
+                       t->file = file;
+                       t->line = line;
+                       t->function = function;
+                       return t->addr;
+               }
+               t++;
+       }
+       assert(0);
+       return NULL;
+}
+void mm_free(void *addr)
+{
+       int i;
+       struct manage *t = management;
+       for(i = 0; i < MANAGE_NUM; i++){
+               if(t->addr == addr){
+                       free(addr);
+                       *t = EMPTY;
+                       return;
+               }
+               t++;
+       }
+       assert(0);
+}
+void mm_end(void)
+{
+       int i;
+       struct manage *t = management;
+       for(i = 0; i < MANAGE_NUM; i++){
+               if(t->addr != NULL){
+                       printf("**free forgot** %s:%d %s() size %d\n", t->file, t->line, t->function, t->size);
+               }
+               t++;
+       }
+}