X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/381a5f98d66c8a3847d9918077a351b4813558fd..f00458382f8b687eeef68f9f5fe9e9245a4d5fb5:/emufs/tipo1.c diff --git a/emufs/tipo1.c b/emufs/tipo1.c index f672c19..9d1cd04 100644 --- a/emufs/tipo1.c +++ b/emufs/tipo1.c @@ -475,6 +475,9 @@ int emufs_tipo1_borrar_registro(EMUFS* efs, EMUFS_REG_ID reg_id) return EMUFS_OK; } +/* \bug Si hay registros multibloque, no se calcula bien el + * stats.tam_info_control_dat. + */ EMUFS_Estadisticas emufs_tipo1_leer_estadisticas(EMUFS* efs) { int err = 0; @@ -485,32 +488,41 @@ EMUFS_Estadisticas emufs_tipo1_leer_estadisticas(EMUFS* efs) char name_f[255]; strcpy(name_f, efs->nombre); strcat(name_f, ".dat"); - stats.tam_archivo_bytes = emufs_common_get_file_size(name_f, &err); + 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; } } - /* obtengo cantidad de bloques */ - stats.cant_bloques = (stats.tam_archivo_bytes - emufs_tipo1_header_size()) + /* obtengo cantidad de bloques en el archivo */ + stats.cant_bloques = (stats.tam_archivo - emufs_tipo1_header_size()) / efs->tam_bloque; /* obtengo la cantidad de registros en el archivo */ { - EMUFS_REG_ID *tmp = emufs_idx_get(efs, &stats.tam_archivo); + EMUFS_REG_ID *tmp = emufs_idx_get(efs, &stats.cant_registros); if (tmp) free(tmp); /* libera memoria innecesaria */ } - /* obtengo total de información de control que guarda el archivo */ - stats.info_control = emufs_tipo1_header_size() /* cabecera del archivo */ + /* obtengo información de control que guarda el archivo .dat */ + stats.tam_info_control_dat = emufs_tipo1_header_size() /* cabecera del archivo */ /* mas las cabeceras de todos los registros */ - + stats.tam_archivo * sizeof(EMUFS_TIPO1_REG_HEADER); + + stats.cant_registros * sizeof(EMUFS_TIPO1_REG_HEADER); /* obtengo las estadísticas del archivo de espacio libre por bloque */ stats.total_fs = emufs_fsc_get_total_fs(efs); stats.media_fs = emufs_fsc_get_media_fs(efs); emufs_fsc_get_max_min_fs(efs, &stats.min_fs, &stats.max_fs); + + /* obtengo informacion de control guardada por los archivos auxiliares */ + stats.tam_archivos_aux = emufs_idx_get_file_size(efs, &err) + + emufs_fsc_get_file_size(efs, &err) + + emufs_did_get_file_size(efs, &err); + if (err) { + PERR("error al obtener tamaño de alguno de los archivos auxiliares"); + return stats; + } return stats; } @@ -715,4 +727,3 @@ void emufs_tipo1_leer_bloque_raw(EMUFS *efs, EMUFS_BLOCK_ID id, char **actual, c (*siguiente) = emufs_tipo1_leer_bloque(efs, id+1, &err); (*size1) = (*size2) = (*size3) = efs->tam_bloque; } -