]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/fsc.c
Se amplia MERGEFILE para poder usarlo de salida tambien (al crear los chunks).
[z.facultad/75.06/emufs.git] / emufs / fsc.c
index 4aaaa177862fc4edf72a4f0a50c8c2345714ad17..84746a80e4e9f698b6e0f6ed91c22870b4e1be36 100644 (file)
@@ -37,8 +37,8 @@
 
 #include "fsc.h"
 #include "error.h"
+#include "common.h"
 #include <unistd.h>
-#include <sys/types.h>
 #include <string.h>
 
 /* Crea un archivo de Gaps o Espacio Libre en Bloque */
@@ -125,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;
@@ -359,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;
@@ -387,9 +387,10 @@ EMUFS_BLOCK_ID emufs_fsc_buscar_n_lugares(EMUFS* efs, size_t n,
                        if (feof(f_fsc)) break;
                        PERR("No se puede leer el archivo");
                        *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;
@@ -398,10 +399,11 @@ EMUFS_BLOCK_ID emufs_fsc_buscar_n_lugares(EMUFS* efs, size_t n,
                                        if (feof(f_fsc)) break;
                                        PERR("No se puede leer el archivo");
                                        *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;
                                }
@@ -453,7 +455,8 @@ EMUFS_FREE emufs_fsc_get_total_fs(EMUFS *emu)
        total = 0;
        while ( !feof(f_fsc) ){
                if ( fread(&reg, sizeof(EMUFS_FSC), 1, f_fsc) != 1) continue;
-               total += reg.freespace;
+               if ( reg.freespace > 0 )
+                       total += reg.freespace;
        }
        fclose(f_fsc);
        return total;
@@ -568,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);
+}