]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/tipo3.c
por lo pronto parece que anda, hice un par de pruebas y anduvo jamon, pero me queda...
[z.facultad/75.06/emufs.git] / emufs / tipo3.c
index fd59a683ae197ed1f5cf47885c135a7ed287f4c5..2c24174d40adf6de01400f242d316dce6516f931 100644 (file)
@@ -158,7 +158,6 @@ EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE t
                if ( (file = fopen(name_f,"a+"))==NULL ) return -1; /*ERROR*/
                /*tengo que buscar un ID valido para el nuevo registro*/
                ID_aux = emufs_idx_get_new_id(emu, err);
                if ( (file = fopen(name_f,"a+"))==NULL ) return -1; /*ERROR*/
                /*tengo que buscar un ID valido para el nuevo registro*/
                ID_aux = emufs_idx_get_new_id(emu, err);
-
                /* El free esta al final de la funcion! */
                bloque = (char*)malloc(emu->tam_bloque);
                for (i=0; i<cant_bloques; i++) {
                /* El free esta al final de la funcion! */
                bloque = (char*)malloc(emu->tam_bloque);
                for (i=0; i<cant_bloques; i++) {
@@ -188,12 +187,17 @@ EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE t
 
                        if (i == 0) {
                                /* Tengo que agregar el primer bloque en IDX */
 
                        if (i == 0) {
                                /* Tengo que agregar el primer bloque en IDX */
-                               if ( emufs_idx_agregar(emu, ID_aux, num_bloque) != 0 ){
-                                       free(bloque);
-                                       return -1;
+                               if ( emufs_idx_existe_id(emu,ID_aux) != 0){
+                                       emufs_idx_actualizar(emu,ID_aux,num_bloque);
+                               } else {
+                                       if ( emufs_idx_agregar(emu, ID_aux, num_bloque) != 0 ){
+                                               free(bloque);
+                                               return -1;
+                                       }
                                }
                        }
                        /* grabo el nuevo registro en el archivo de espacios libres */
                                }
                        }
                        /* grabo el nuevo registro en el archivo de espacios libres */
+                       if ( emu->tam_bloque > emu->tam_reg ) resto = emu->tam_reg;
                        if ( emufs_fsc_agregar(emu, num_bloque, emu->tam_bloque - resto - sizeof(EMUFS_REG_ID)) != 0 ) {
                                fclose(file);
                                free(bloque);
                        if ( emufs_fsc_agregar(emu, num_bloque, emu->tam_bloque - resto - sizeof(EMUFS_REG_ID)) != 0 ) {
                                fclose(file);
                                free(bloque);
@@ -294,6 +298,8 @@ int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID)
        }
 
        /*grabo el bloque en el archivo*/       
        }
 
        /*grabo el bloque en el archivo*/       
+       if ( emu->tam_bloque < emu->tam_reg ) 
+               memset(bloque, 0, emu->tam_bloque);
        if ( emufs_tipo3_grabar_bloque(emu, bloque, num_bloque) == -1 ){
                free(bloque);
                PERR("No se pudo grabar el bloque"); 
        if ( emufs_tipo3_grabar_bloque(emu, bloque, num_bloque) == -1 ){
                free(bloque);
                PERR("No se pudo grabar el bloque"); 
@@ -301,9 +307,12 @@ int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID)
        }
 
        /*actualizo archivo .fsc*/
        }
 
        /*actualizo archivo .fsc*/
-       fs = emufs_fsc_get_fs(emu, num_bloque);
-       if ( emufs_fsc_actualizar(emu, num_bloque, fs + emu->tam_reg + sizeof(EMUFS_REG_ID)) != 0 ) return -1;
-       
+       if ( emu->tam_bloque < emu->tam_reg ) {
+               if ( emufs_fsc_actualizar(emu, num_bloque, emu->tam_bloque) != 0 ) return -1;
+       } else { 
+               fs = emufs_fsc_get_fs(emu, num_bloque);
+               if ( emufs_fsc_actualizar(emu, num_bloque, fs + emu->tam_reg + sizeof(EMUFS_REG_ID)) != 0 ) return -1;
+       }
        /*actualizo archivo .did*/
        if ( emufs_did_agregar(emu, ID) != 0 ) return -1;
                
        /*actualizo archivo .did*/
        if ( emufs_did_agregar(emu, ID) != 0 ) return -1;