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;
}