From d3112f9c7895a9f419c365eabe7db963e148454a Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Mon, 5 Apr 2004 17:32:07 +0000 Subject: [PATCH 1/1] * BUGFIX : en buscar_lugar faltaba inicializar el valor *fs a devolver en caso de no encontrar el bloque. --- tipo3/emufs.c | 38 ++++++++++++++++++++++++++++++++++++++ tipo3/emufs.h | 1 + tipo3/param_cte.c | 9 +++++++-- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/tipo3/emufs.c b/tipo3/emufs.c index 9883f70..a769741 100644 --- a/tipo3/emufs.c +++ b/tipo3/emufs.c @@ -81,6 +81,44 @@ EMUFS *emufs_crear(const char *filename, char tipo, unsigned int tam_bloque, uns return tmp; } +EMUFS *emufs_abrir(const char *filename) +{ + EMUFS *tmp; + char name[255]; + char tipo; + FILE *fp; + + strcpy(name, filename); + strcat(name, EXT_TIPO3_DATA); + fp = fopen(name, "r"); + if (fp == NULL) return NULL; + fread(&tipo, sizeof(char), 1, fp); + if ((tipo < 0) || (tipo > 2)) { + fclose(fp); + return NULL; + } + + tmp = (EMUFS *)malloc(sizeof(EMUFS)); + if (tmp == NULL) return NULL; + + switch (tipo) { + case T1: + break; + case T2: + break; + case T3: + tmp->tipo = tipo; + fread(&tmp->tam_bloque, sizeof(int), 1, fp); + tmp->leer_bloque = leer_bloque; + tmp->leer_registro = leer_registro; + tmp->grabar_registro = grabar_registro; + tmp->borrar_registro = NULL; + tmp->nombre = str_dup(filename); + } + + fclose(fp); + return tmp; +} int emufs_destruir(EMUFS *e) { diff --git a/tipo3/emufs.h b/tipo3/emufs.h index aeae572..2cbc027 100644 --- a/tipo3/emufs.h +++ b/tipo3/emufs.h @@ -17,6 +17,7 @@ typedef struct _emu_fs_t { } EMUFS; EMUFS *emufs_crear(const char *filename, char tipo, unsigned int tam_bloque, unsigned int tam_reg); +EMUFS *emufs_abrir(const char *filename); int emufs_destruir(EMUFS *e); #endif diff --git a/tipo3/param_cte.c b/tipo3/param_cte.c index 0683fc9..d7d0d24 100644 --- a/tipo3/param_cte.c +++ b/tipo3/param_cte.c @@ -142,6 +142,7 @@ int grabar_registro(EMUFS *emu, void *ptr, unsigned long tam) if ( (file = fopen(name_f,"a+"))==NULL ) return -1; /*ERROR*/ /* me devuelve el ID del bloque donde quepa un registro y el espacio libre en "fs"*/ num_bloque = buscar_lugar(emu, tam, &fs); + printf("Lugar %d\n", fs); /*si no hay bloques con suficiente espacio creo un bloque nuevo */ if (num_bloque == -1) { /*crear un nuevo bloque en memoria */ @@ -187,7 +188,9 @@ int grabar_registro(EMUFS *emu, void *ptr, unsigned long tam) fclose(file); /*cargo el registro*/ reg.block = cant; /*no incremento cant, porque grabe el nuevo bloque antes y no lo conte!!*/ - reg.free_space = fs - tam; + /* GAZER */ + printf("FS = %d\n", fs); + reg.free_space = fs-tam; /*lo guardo en el archivo al final "a+"*/ if ( (f_block_free = fopen(name_f_free,"a+"))==NULL ) return -1; /*ERROR*/ fwrite(®,sizeof(reg),1,f_block_free); @@ -239,6 +242,7 @@ int buscar_lugar(EMUFS *emu, unsigned long tam, int *fs) * el resultado sea correcto */ reg.block = -1; + *fs = emu->tam_bloque; while( !feof(f_block_free) ){ fread(®,sizeof(reg),1,f_block_free); if ( reg.free_space >= tam ) @@ -250,7 +254,8 @@ int buscar_lugar(EMUFS *emu, unsigned long tam, int *fs) } fclose(f_block_free); - *fs = reg.free_space; + if (reg.block != -1) + *fs = reg.free_space; return reg.block; } -- 2.43.0