X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/e3732c644048acf96b9cae2b382d93eb45725d96..12827b2ec2ecc61ac9c1a4eb42997bdb39bc811f:/emufs/tipo3.c diff --git a/emufs/tipo3.c b/emufs/tipo3.c index 946186c..5cb9c2b 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -37,8 +37,8 @@ #include "tipo3.h" #include "error.h" +#include "common.h" #include -#include #include #include @@ -380,33 +380,48 @@ int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID) EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *emu) { - FILE *f; + int err = 0,err1 = 0, err2 = 0, err3 = 0; EMUFS_Estadisticas stats; - EMUFS_REG_ID *tmp; - char name_f[255]; - memset(&stats,0,sizeof(EMUFS_Estadisticas)); - strcpy(name_f,emu->nombre); - strcat(name_f,".dat"); - if ( (f = fopen(name_f,"r")) == NULL){ - PERR("No se pudo abrir el archivo"); - return stats; + + { /* obtengo tamaño del archivo en bytes */ + char name_f[255]; + strcpy(name_f, emu->nombre); + strcat(name_f, ".dat"); + stats.tam_archivo = emufs_common_get_file_size(name_f, &err); + if (err) { + PERR("no se pudo obtener el tamaño del archivo"); + return stats; + } } - fseek(f,0,SEEK_END); - stats.tam_archivo_bytes = ftell(f); - stats.cant_bloques = (stats.tam_archivo_bytes-sizeof(EMUFS_Tipo)-sizeof(EMUFS_BLOCK_SIZE)-sizeof(EMUFS_REG_SIZE))/ + /* obtengo la cantidad de bloques en el archivo */ + stats.cant_bloques = (stats.tam_archivo-sizeof(EMUFS_Tipo)-sizeof(EMUFS_BLOCK_SIZE)-sizeof(EMUFS_REG_SIZE))/ emu->tam_bloque; - tmp = emufs_idx_get(emu, &stats.tam_archivo); - if (tmp) free(tmp); - stats.info_control = stats.tam_archivo*sizeof(EMUFS_REG_ID)+sizeof(EMUFS_Tipo)+ + + /* obtengo la cantidad de registros en el archivo */ + { + EMUFS_REG_ID *tmp = emufs_idx_get(emu, &stats.cant_registros); + if (tmp) free(tmp); /* libera memoria innecesaria */ + } + + /* obtengo información de control que guarda el archivo .dat */ + stats.tam_info_control_dat = stats.cant_registros*sizeof(EMUFS_REG_ID)+sizeof(EMUFS_Tipo)+ sizeof(EMUFS_BLOCK_SIZE)+sizeof(EMUFS_REG_SIZE); + /* Obtengo las stats de FSC */ stats.total_fs = emufs_fsc_get_total_fs(emu); stats.media_fs = emufs_fsc_get_media_fs(emu); emufs_fsc_get_max_min_fs(emu,&stats.min_fs,&stats.max_fs); + + /* obtengo informacion de control guardada por los archivos auxiliares */ + stats.tam_archivo_aux = emufs_idx_get_file_size(emu,&err1) + emufs_fsc_get_file_size(emu,&err2) + + emufs_did_get_file_size(emu,&err3); + if (err1 || err2 || err3) { + PERR("Hubo problemas en lectura de filesize archivos auxiliares"); + return stats; + } - fclose(f); return stats; }