From 2ef63227431ca5dc261ef1b3186d0a30d5742f25 Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Mon, 5 Apr 2004 03:33:11 +0000 Subject: [PATCH 1/1] * BUGFIX : Arreglo en get_id un par de cosas para que ande. Entre ellas que feof no me dice si estoy al final apenas abri el archivo, por mas que el archivo este vacio. Tambien habia un fseek(SEEK_END) donde el offset no era negativo --- tipo3/emufs.c | 6 ++++++ tipo3/param_cte.c | 10 +++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/tipo3/emufs.c b/tipo3/emufs.c index a06ad13..9883f70 100644 --- a/tipo3/emufs.c +++ b/tipo3/emufs.c @@ -7,6 +7,7 @@ #define EXT_TIPO3_DATA ".dat" #define EXT_TIPO3_DISP ".fsc" #define EXT_TIPO3_IDS ".idc" +#define EXT_TIPO3_EXTRA ".ids" char *str_dup(const char *s) { @@ -66,6 +67,11 @@ EMUFS *emufs_crear(const char *filename, char tipo, unsigned int tam_bloque, uns strcat(name, EXT_TIPO3_IDS); fp = fopen(name, "w"); fclose(fp); + + strcpy(name, filename); + strcat(name, EXT_TIPO3_EXTRA); + fp = fopen(name, "w"); + fclose(fp); break; default: free(tmp); diff --git a/tipo3/param_cte.c b/tipo3/param_cte.c index e0786fe..3189a97 100644 --- a/tipo3/param_cte.c +++ b/tipo3/param_cte.c @@ -263,9 +263,11 @@ int get_id(EMUFS *emu) strcat(name_f_reg_exist,".ids"); if ( (f_reg_exist = fopen(name_f_reg_exist,"r")) == NULL) return -1; /*ERROR*/ - if ( !feof(f_reg_exist) ){ + fseek(f_reg_exist, 0, SEEK_END); + + if (ftell(f_reg_exist) > 0){ /* si el archivo no esta vacio es porque hay un nro disponible*/ - fseek(f_reg_exist,sizeof(id),SEEK_END); + fseek(f_reg_exist, -sizeof(id),SEEK_END); fread(&id,sizeof(id),1,f_reg_exist); /* FIXME: tengo que truncar el archivo*/ /* FIXME: tengo que truncar el archivo*/ @@ -275,9 +277,11 @@ int get_id(EMUFS *emu) /* FIXME: tengo que truncar el archivo*/ }else{ /*si no, hay que buscar el mayor de los numeros*/ + id = -1; if ( (f_block_reg = fopen(name_f_block_reg,"r")) == NULL) return -1; /*ERROR*/ while ( !feof(f_block_reg) ){ - fread(®,sizeof(reg),1,f_block_reg); + /* Me aseguro de leer la cantidad de bytes correcta */ + if (fread(®,sizeof(reg),1,f_block_reg) != sizeof(reg)) continue; if ( reg.id_reg >= max ) max = reg.id_reg; } -- 2.43.0