]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* Agrego el malloc debugger de taller para controlar
authorRicardo Markiewicz <gazer.arg@gmail.com>
Tue, 30 Mar 2004 05:51:41 +0000 (05:51 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Tue, 30 Mar 2004 05:51:41 +0000 (05:51 +0000)
 la memoria durante esta fase del proyecto GUI

gui/Makefile
gui/form.h
gui/gui.c
gui/malloc_debug.c [new file with mode: 0644]
gui/malloc_debug.h [new file with mode: 0644]

index cab212957819cc4aa569dff1ce8bcbd363241bc6..62d6c2f19ac1b7674baa53caa123dc61fe6d21da 100644 (file)
@@ -1,7 +1,7 @@
-CFLAGS=-Wall
+CFLAGS=-Wall -g
 LDFLAGS=-lncurses
 
 all: gui 
 
-gui: form.c gui.c
+gui: form.c gui.c malloc_debug.c
 
index 9ac2a3c311a5f7b67196334c0fdcd9b582bfae2d..ecec54d596136d09489a109f4358cd336f809a8b 100644 (file)
@@ -7,6 +7,8 @@
 #include <stdlib.h>
 #include <curses.h>
 
+#include "malloc_debug.h"
+
 typedef enum {INPUT, RADIO} t_Campo;
 
 typedef struct _elem_ {
index 898fde9e3343d9b716be14cffa2a4351fbc203d5..f1a8a2103602b6ba7ca226ccc7c0fbd1fd0941ce 100644 (file)
--- a/gui/gui.c
+++ b/gui/gui.c
@@ -69,6 +69,8 @@ int main(int argc, char *argv[])
        
        /* Libero el formulario */
        form_destruir(form);
+       
+       MD_Listar();
        return 0;
 }
 
diff --git a/gui/malloc_debug.c b/gui/malloc_debug.c
new file mode 100644 (file)
index 0000000..cd2a35a
--- /dev/null
@@ -0,0 +1,114 @@
+/***************************************************************************
+ *            malloc_debug.c
+ *
+ *  Sat Aug 30 17:00:48 2003
+ *  Copyright  2003  Ricardo Markiewicz
+ *  rmarkie@fi.uba.ar
+ ****************************************************************************/
+/*
+ *  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.
+ *
+ *  This program 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 Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+/* este debe ser el ultimo include, para evitar errores de compilacion */
+#include "malloc_debug.h"
+
+/* Tengo que sacar los macros dentro de malloc_debug para evitar problemas */
+#undef malloc
+#undef free
+
+typedef struct _t_malloc_ {
+       void *ptr;
+       int size;
+       char file[21];
+       int line;
+       time_t hora;
+       struct _t_malloc_ *next;
+} t_MDAlloc;
+
+static t_MDAlloc *lstMalloc = NULL;
+
+void *MD_malloc(int size, int line, char *file)
+{
+       void *ptr;
+       t_MDAlloc *nodo;
+
+       ptr = malloc(size);
+       if (ptr == NULL) {
+               /* No registro nada porque no hay memoria! */
+               return NULL;
+       }
+
+       nodo = (t_MDAlloc *)malloc(sizeof(t_MDAlloc));
+       if (nodo == NULL) {
+               free(ptr);
+               return NULL;
+       }
+       nodo->ptr = ptr;
+       nodo->size = size;
+       nodo->line = line;
+       nodo->hora = time(NULL);
+       strncpy(nodo->file, file, 20);
+
+       /* Agrego el nodo al principio */
+       nodo->next = lstMalloc;
+       lstMalloc = nodo;
+
+       return ptr;
+}
+
+void MD_free(void *ptr)
+{
+       /* Tengo que buscar el nodo alocado */
+       t_MDAlloc *node, *padre;
+       node = lstMalloc;
+       padre = NULL;
+       while (node != NULL) {
+               if (node->ptr == ptr) {
+                       /* lo encontre! */
+                       if (padre != NULL) {
+                               padre->next = node->next;
+                       } else {
+                               lstMalloc = node->next;
+                       }
+                       free(node);
+                       break;
+               }
+               padre = node;
+               node = node->next;
+       }
+       free(ptr);
+}
+
+void MD_Listar()
+{
+       struct tm *hora;
+       t_MDAlloc *nodo;
+       nodo = lstMalloc;
+       printf("+----------+--------+-%-20s-+---------+-------+----------+\n", "--------------------");
+       printf("|Direccion | TamaƱo | %-20s | Linea   | Fecha |   Hora   |\n", "Archivo");
+       printf("+----------+--------+-%-20s-+---------+-------+----------+\n", "--------------------");
+       while (nodo != NULL) {
+               hora = localtime(&nodo->hora);
+               printf("|%p | % 6d | %-20s | % 7d | %02d/%02d | %02d:%02d:%02d |\n", \
+                       nodo->ptr, nodo->size, nodo->file, nodo->line, hora->tm_mday, hora->tm_mon, \
+                       hora->tm_hour, hora->tm_min, hora->tm_sec);
+               printf("+----------+--------+-%-20s-+---------+-------+----------+\n", "--------------------");
+               free(hora);
+               nodo = nodo->next;
+       }
+}
diff --git a/gui/malloc_debug.h b/gui/malloc_debug.h
new file mode 100644 (file)
index 0000000..00ba43f
--- /dev/null
@@ -0,0 +1,40 @@
+/***************************************************************************
+ *            malloc_debug.h
+ *
+ *  Sat Aug 30 16:55:51 2003
+ *  Copyright  2003  Ricardo Markiewicz
+ *  rmarkie@fi.uba.ar
+ ****************************************************************************/
+/*
+ *  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.
+ *
+ *  This program 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 Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/* Si ya esta definido malloc y/o free, lo dehabilito */
+
+#include <stdio.h>
+
+/* Macro para emular la funcion malloc y free */
+#define malloc(x) MD_malloc(x, __LINE__, __FILE__)
+#define free(x) MD_free(x)
+
+#ifndef _MALLOC_DEBUG_H
+#define _MALLOC_DEBUG_H 1
+
+void *MD_malloc(int size, int line, char *file);
+void MD_free(void *);
+void MD_Listar();
+
+#endif
+