X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/af41f59f8447bed15fda171a18a84a5c1327bc8f..e71b2f6ba15c4035c6fb10526b4ffd29d44b0ba2:/emufs/fsc.c diff --git a/emufs/fsc.c b/emufs/fsc.c index 7e556bd..84746a8 100644 --- a/emufs/fsc.c +++ b/emufs/fsc.c @@ -36,8 +36,9 @@ */ #include "fsc.h" +#include "error.h" +#include "common.h" #include -#include #include /* Crea un archivo de Gaps o Espacio Libre en Bloque */ @@ -124,7 +125,7 @@ int emufs_fsc_agregar_gap(EMUFS *emu, EMUFS_OFFSET marker, EMUFS_FREE freespace) /* Busco el gap que sucede a este */ fseek(f_fsc,0,SEEK_SET); while (!feof(f_fsc)) { - fread(&gap_aux,sizeof(EMUFS_FSC),1,f_fsc); + if (fread(&gap_aux,sizeof(EMUFS_FSC),1,f_fsc) != 1) continue; if (gap_aux.marker > gap_new.marker) { found = 1; break; @@ -358,7 +359,7 @@ EMUFS_BLOCK_ID emufs_fsc_buscar_lugar(EMUFS *emu, EMUFS_FREE reg_size, EMUFS_FRE /** Busca n lugares consecutivos devolviendo el id del primer bloque. */ EMUFS_BLOCK_ID emufs_fsc_buscar_n_lugares(EMUFS* efs, size_t n, - EMUFS_FREE reg_size, EMUFS_FREE *freespace, int* err) + EMUFS_FREE size, EMUFS_FREE *freespace, int* err) { FILE *f_fsc; EMUFS_FSC reg; @@ -367,7 +368,7 @@ EMUFS_BLOCK_ID emufs_fsc_buscar_n_lugares(EMUFS* efs, size_t n, /* chequeo que al menos se busque un lugar */ if (!n) { PERR("Se debe buscar al menos un lugar"); - *err = 13; /* EMUFS_ERROR_WRONG_ARGUMENT */ + *err = EMUFS_ERROR_WRONG_ARGUMENT; return EMUFS_NOT_FOUND; } @@ -376,7 +377,7 @@ EMUFS_BLOCK_ID emufs_fsc_buscar_n_lugares(EMUFS* efs, size_t n, strcat(name_f_fsc, EMUFS_FSC_EXT); if (!(f_fsc = fopen(name_f_fsc, "rb"))) { PERR("No se puede abrir archivo"); - *err = 4; /* EMUFS_ERROR_CANT_OPEN_FILE */ + *err = EMUFS_ERROR_CANT_OPEN_FILE; return EMUFS_NOT_FOUND; } @@ -385,10 +386,11 @@ EMUFS_BLOCK_ID emufs_fsc_buscar_n_lugares(EMUFS* efs, size_t n, if ((fread(®, sizeof(EMUFS_FSC), 1, f_fsc) != 1)) { if (feof(f_fsc)) break; PERR("No se puede leer el archivo"); - *err = 3; /* EMUFS_ERROR_FILE_READ */ + *err = EMUFS_ERROR_FILE_READ; + fclose(f_fsc); return EMUFS_NOT_FOUND; } - if (reg.freespace >= reg_size) { + if (reg.freespace >= size) { int found = 1; EMUFS_BLOCK_ID first_id = reg.marker; *freespace = reg.freespace; @@ -396,11 +398,12 @@ EMUFS_BLOCK_ID emufs_fsc_buscar_n_lugares(EMUFS* efs, size_t n, if (fread(®, sizeof(EMUFS_FSC), 1, f_fsc) != 1) { if (feof(f_fsc)) break; PERR("No se puede leer el archivo"); - *err = 3; /* EMUFS_ERROR_FILE_READ */ + *err = EMUFS_ERROR_FILE_READ; + fclose(f_fsc); return EMUFS_NOT_FOUND; } /* no hay otro lugar consecutivo */ - if (reg.freespace < reg_size) { + if (reg.freespace < size) { found = 0; break; } @@ -452,7 +455,8 @@ EMUFS_FREE emufs_fsc_get_total_fs(EMUFS *emu) total = 0; while ( !feof(f_fsc) ){ if ( fread(®, sizeof(EMUFS_FSC), 1, f_fsc) != 1) continue; - total += reg.freespace; + if ( reg.freespace > 0 ) + total += reg.freespace; } fclose(f_fsc); return total; @@ -567,3 +571,10 @@ EMUFS_BLOCK_ID emufs_fsc_get_num_blocks(EMUFS* efs) return cant; } +long emufs_fsc_get_file_size(EMUFS* efs, int* err) +{ + char name[255]; + strcpy(name, efs->nombre); + strcat(name, EMUFS_FSC_EXT); + return emufs_common_get_file_size(name, err); +}