From: Ricardo Markiewicz Date: Mon, 5 Apr 2004 15:52:28 +0000 (+0000) Subject: * BUGFIX : Arreglo el bug que hacia que palme en el free de leer_registro. Al parece... X-Git-Tag: svn_import_r684~644 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/983bf3a83136ef1556b70bd2d1860a7d24753337?ds=inline * BUGFIX : Arreglo el bug que hacia que palme en el free de leer_registro. Al parecer el tener los FILE * globales causaba algo en la memoria que jodia. Puse los FILE* dentro de cada funcion como corresponde y ahora anda bien. * Saco el malloc_debug --- diff --git a/tipo3/Makefile b/tipo3/Makefile index f04eaee..6d93bd5 100644 --- a/tipo3/Makefile +++ b/tipo3/Makefile @@ -3,5 +3,5 @@ LDFLAGS= all: main -main: main.c param_cte.c emufs.c malloc_debug.c +main: main.c param_cte.c emufs.c diff --git a/tipo3/emufs.h b/tipo3/emufs.h index cf16da9..aeae572 100644 --- a/tipo3/emufs.h +++ b/tipo3/emufs.h @@ -3,7 +3,6 @@ #include #include -#include "malloc_debug.h" typedef enum {T1, T2, T3} EMUFS_TYPE; diff --git a/tipo3/main.c b/tipo3/main.c index 09fb9d5..ec5a04a 100644 --- a/tipo3/main.c +++ b/tipo3/main.c @@ -22,6 +22,5 @@ int main() emufs_destruir(fp); - MD_Listar(); return 0; } diff --git a/tipo3/malloc_debug.c b/tipo3/malloc_debug.c deleted file mode 100644 index cd2a35a..0000000 --- a/tipo3/malloc_debug.c +++ /dev/null @@ -1,114 +0,0 @@ -/*************************************************************************** - * 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 -#include -#include -/* 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/tipo3/malloc_debug.h b/tipo3/malloc_debug.h deleted file mode 100644 index 00ba43f..0000000 --- a/tipo3/malloc_debug.h +++ /dev/null @@ -1,40 +0,0 @@ -/*************************************************************************** - * 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 - -/* 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 - diff --git a/tipo3/param_cte.c b/tipo3/param_cte.c index dd9ab11..0683fc9 100644 --- a/tipo3/param_cte.c +++ b/tipo3/param_cte.c @@ -1,13 +1,13 @@ /* archivo con bloques parametrizados y registro constante */ #include "param_cte.h" -FILE* f_block_reg; -FILE* f_block_free; -FILE* f_reg_exist; /** Leo un registro del archivo, devuelve cero si no lo encuentra.**/ int leer_registro(EMUFS *emu, int ID, void *ptr, unsigned long tam_reg) { + FILE* f_block_reg; + //FILE* f_block_free; + //FILE* f_reg_exist; char* bloque; char name_f_block_reg[255]; int block, ID_aux; @@ -43,7 +43,6 @@ int leer_registro(EMUFS *emu, int ID, void *ptr, unsigned long tam_reg) } fclose(f_block_reg); - /* TODO :Ver por que causa un SEGFAULT ACA!! */ free(bloque); return 0; } @@ -52,6 +51,7 @@ int leer_registro(EMUFS *emu, int ID, void *ptr, unsigned long tam_reg) /*busco el ID en el archivo xxxxx.ids, para ver si puedo usar ese ID.*/ int existe_registro(EMUFS *emu, int ID) { + FILE* f_reg_exist; int reg; char name_f_reg_exist[255]; strcpy(name_f_reg_exist,emu->nombre); @@ -73,6 +73,7 @@ int existe_registro(EMUFS *emu, int ID) /*busca el registro ID en el archivo "block_reg.dat" y devuelve el nro de bloque en el que se encuentra*/ int buscar_registro(EMUFS *emu, int ID) { + FILE* f_block_reg; BLOCK_REG_T reg; char name_f_block_reg[255]; strcpy(name_f_block_reg,emu->nombre); @@ -225,6 +226,7 @@ int grabar_bloque(EMUFS *emu, void *ptr, int num) /* me devuelve el ID del bloque donde quepa un registro, y guarda en fs el espacio libre que queda en el bloque */ int buscar_lugar(EMUFS *emu, unsigned long tam, int *fs) { + FILE *f_block_free; BLOCK_FREE_T reg; char name_f_block_reg[255]; @@ -255,6 +257,7 @@ int buscar_lugar(EMUFS *emu, unsigned long tam, int *fs) /*Busco en el archivo de Id`s un Id valido para un nuevo registro*/ int get_id(EMUFS *emu) { + FILE *f_reg_exist, *f_block_reg; BLOCK_REG_T reg; int id, max = -1; char name_f_reg_exist[255]; diff --git a/tipo3/param_cte.h b/tipo3/param_cte.h index 22715c1..bb17c06 100644 --- a/tipo3/param_cte.h +++ b/tipo3/param_cte.h @@ -4,7 +4,6 @@ #include #include #include "emufs.h" -#include "malloc_debug.h" typedef struct block_free_t{ int block;