]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
muevo un par de funciones a otros archivos
authorNicolás Dimov <ndimov@gmail.com>
Thu, 8 Apr 2004 23:39:28 +0000 (23:39 +0000)
committerNicolás Dimov <ndimov@gmail.com>
Thu, 8 Apr 2004 23:39:28 +0000 (23:39 +0000)
emufs/fsc.c
emufs/fsc.h
emufs/tipo3.c
emufs/tipo3_main.c

index b8e0db4b7101042407387f9c97f3ea2334ad8edc..f5d6d06b6af13b09ca62f91d0ce825b1a07cae56 100644 (file)
@@ -11,7 +11,7 @@ int emufs_fsc_agregar(EMUFS *emu, int num_bloque, int fs)
        strcat(name_f_fsc,".fsc");
        
        /*cargo el registro*/
-       reg.block = num_bloque; /*no incremento cant, porque grabe el nuevo bloque antes y no lo conte!!*/
+       reg.block = num_bloque; 
        reg.free_space = fs;
        /*lo guardo en el archivo al final  "a+"*/
        if ( (f_fsc = fopen(name_f_fsc,"a+"))==NULL ) return -1;
@@ -20,6 +20,7 @@ int emufs_fsc_agregar(EMUFS *emu, int num_bloque, int fs)
        return 0;
 }
 
+/* busca el bloque y le resta fs de espacio libre */
 int emufs_fsc_actualizar(EMUFS *emu, int num_bloque, int fs)
 {
        FILE *f_fsc;
@@ -34,7 +35,7 @@ int emufs_fsc_actualizar(EMUFS *emu, int num_bloque, int fs)
        while ( !feof(f_fsc) ){
                if ( fread(&reg,sizeof(BLOCK_FREE_T),1,f_fsc) != 1) continue;
                if ( reg.block == num_bloque ){
-                       reg.free_space -= fs;
+                       reg.free_space = fs;
                        fseek(f_fsc,-sizeof(BLOCK_FREE_T),SEEK_CUR);
                        fwrite(&reg,sizeof(BLOCK_FREE_T),1,f_fsc);
                        break;
@@ -43,3 +44,57 @@ int emufs_fsc_actualizar(EMUFS *emu, int num_bloque, int fs)
        fclose(f_fsc);
        return 0;
 }
+
+/* me devuelve el ID del bloque donde quepa un registro, y guarda en fs el espacio libre que queda en el bloque */
+int emufs_fsc_buscar_lugar(EMUFS *emu, unsigned long tam, int *fs)
+{
+       FILE *f_fsc;
+       BLOCK_FREE_T reg;
+       char name_f_fsc[255];
+       
+       strcpy(name_f_fsc,emu->nombre);
+       strcat(name_f_fsc,".fsc");
+
+       if ( (f_fsc = fopen(name_f_fsc,"r"))==NULL ) return -1;
+
+       /* Inicializo la estructura para evitar que si el archivo esta vacio
+        * el resultado sea correcto
+        */
+       reg.block = -1;
+       *fs = emu->tam_bloque;
+       while( !feof(f_fsc) ){
+               if (fread(&reg,sizeof(BLOCK_FREE_T),1,f_fsc) != 1) continue;
+               if ( reg.free_space >= tam+sizeof(int)) 
+                       break;
+               else {
+                       reg.block = -1;
+                       *fs = emu->tam_bloque;
+               }
+       }
+       
+       fclose(f_fsc);
+       if (reg.block != -1)
+               *fs = reg.free_space;
+       return reg.block;
+}
+
+int emufs_fsc_get_fs(EMUFS *emu, int num_bloque)
+{
+       FILE *f_fsc;
+       BLOCK_FREE_T reg;
+       char name_f_fsc[255];
+       
+       strcpy(name_f_fsc,emu->nombre);
+       strcat(name_f_fsc,".fsc");
+
+       if ( (f_fsc = fopen(name_f_fsc,"r"))==NULL ) return -1;
+
+       while ( !feof(f_fsc) ){
+               if ( fread(&reg,sizeof(BLOCK_FREE_T),1,f_fsc) != 1 ) continue;
+               if ( reg.block == num_bloque )
+                       break;
+       }
+               
+       fclose(f_fsc);
+       return reg.free_space;
+}
index ad3685f31c76e0c8d2b1ea3aa27ba06a84cdc386..354273a69fd32bf4a0bee85672bee83f808973f6 100644 (file)
@@ -8,4 +8,8 @@ int emufs_fsc_agregar(EMUFS *, int, int);
 
 int emufs_fsc_actualizar(EMUFS *, int, int);
 
+int emufs_fsc_buscar_lugar(EMUFS *, unsigned long, int *);
+
+int emufs_fsc_get_fs(EMUFS *, int);
+
 #endif /* _FSC_H */
index 4aa7c6cd8f0a3881ed4b2a9e1bcbacc749d6e776..ac3e7eea20538ac312e6591891538d53e669cfe3 100644 (file)
@@ -115,7 +115,7 @@ int emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, unsigned long tam)
        
        if ( (file = fopen(name_f,"a+"))==NULL ) return -1; /*ERROR*/
        /* me devuelve el ID del bloque donde quepa un registro y el espacio libre en "fs"*/
-       num_bloque = emufs_tipo3_buscar_lugar(emu, tam, &fs);
+       num_bloque = emufs_fsc_buscar_lugar(emu, tam, &fs);
        printf("Lugar = %d   bloque = %d\n", fs, num_bloque);
        /*si no hay bloques con suficiente espacio creo un bloque nuevo */
        if (num_bloque == -1) {
@@ -141,7 +141,7 @@ int emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, unsigned long tam)
                fclose(file);
                num_bloque = cant;
                /* grabo el nuevo registro en el archivo de espacios libres */
-               if ( emufs_fsc_agregar(emu, num_bloque, emu->tam_bloque - tam-sizeof(int)) != 0 ) {
+               if ( emufs_fsc_agregar(emu, num_bloque, emu->tam_bloque - tam - sizeof(int)) != 0 ) {
                        free(bloque);
                        return -1;
                }
@@ -166,7 +166,7 @@ int emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, unsigned long tam)
                        return -1; /* se produjo un error */    
                }
                /*actualizo el archivo de espacios libres*/
-               if ( emufs_fsc_actualizar(emu, num_bloque, tam+sizeof(int)) != 0 ){
+               if ( emufs_fsc_actualizar(emu, num_bloque, fs - tam - sizeof(int)) != 0 ){
                        free(bloque);
                        return -1;
                }
@@ -210,45 +210,10 @@ int emufs_tipo3_grabar_bloque(EMUFS *emu, void *ptr, int num)
        return 0;
 }
 
-
-
-/* me devuelve el ID del bloque donde quepa un registro, y guarda en fs el espacio libre que queda en el bloque */
-int emufs_tipo3_buscar_lugar(EMUFS *emu, unsigned long tam, int *fs)
-{
-       FILE *f_block_free;
-       BLOCK_FREE_T reg;
-       char name_f_block_free[255];
-       
-       strcpy(name_f_block_free,emu->nombre);
-       strcat(name_f_block_free,".fsc");
-
-       if ( (f_block_free = fopen(name_f_block_free,"r"))==NULL ) return -1;
-
-       /* Inicializo la estructura para evitar que si el archivo esta vacio
-        * el resultado sea correcto
-        */
-       reg.block = -1;
-       *fs = emu->tam_bloque;
-       while( !feof(f_block_free) ){
-               if (fread(&reg,sizeof(BLOCK_FREE_T),1,f_block_free) != 1) continue;
-               if ( reg.free_space >= tam ) 
-                       break;
-               else {
-                       reg.block = -1;
-                       *fs = emu->tam_bloque;
-               }
-       }
-       
-       fclose(f_block_free);
-       if (reg.block != -1)
-               *fs = reg.free_space;
-       return reg.block;
-}
-
 /*borra un registro de un bloque y acomoda los registros que quedan*/
 int emufs_tipo3_borrar_registro(EMUFS *emu, int ID, int tam_reg)
 {
-       int num_bloque, ptr_elim, ptr_mov, ID_aux, cant, i;
+       int num_bloque, ptr_elim, ptr_mov, ID_aux, cant, i, fs;
        long size;
        char *bloque;
        FILE *f_block_reg;
@@ -291,7 +256,8 @@ int emufs_tipo3_borrar_registro(EMUFS *emu, int ID, int tam_reg)
        }
        
        /*actualizo archivo .fsc*/
-       if ( emufs_fsc_actualizar(emu, num_bloque, -(tam_reg + sizeof(int)) ) != 0 ) return -1;
+       fs = emufs_fsc_get_fs(emu, num_bloque);
+       if ( emufs_fsc_actualizar(emu, num_bloque, fs + tam_reg + sizeof(int)) != 0 ) return -1;
        
        /*actualizo archivo .did*/
        if ( emufs_did_agregar(emu, ID) != 0 ) return -1;
index 5ec945daf2ea3153a44dfcdb910e1828113f4d51..cdd7139822ee6813f74a412ab379832cf94f9db6 100644 (file)
@@ -22,7 +22,7 @@
  * Autores: Nicolás Dimov <sagardua@uolsinectis.com.ar>
  *----------------------------------------------------------------------------
  *
- * $Id: command.cpp 220 2003-11-19 23:10:40Z luca $
+ * $Id$
  *
  */
 
@@ -89,6 +89,8 @@ int main(int argc, char *argv[])
 
 
        fp->borrar_registro(fp, n4, 100);
+       fp->borrar_registro(fp, n2, 100);
+       fp->borrar_registro(fp, n6, 100);
        n8 = fp->grabar_registro(fp, i, 100);
        fp->leer_registro(fp, n8, b, 100);