X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/a4236f038178839da58930dbecd0f3b45637e448..936a14b3dc26ede204ce5b022472cd245b8019ac:/emufs/tipo3.c diff --git a/emufs/tipo3.c b/emufs/tipo3.c index 1e35948..a1d0f19 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -164,14 +164,20 @@ EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE t cant_bloques = (emu->tam_reg / (emu->tam_bloque-sizeof(EMUFS_REG_ID))) + 1; if ( emu->tam_reg+sizeof(EMUFS_REG_ID) == emu->tam_bloque ) cant_bloques = 1; + resto = emu->tam_bloque - sizeof(EMUFS_REG_ID); - lugar = emu->tam_reg + sizeof(EMUFS_REG_ID); - if ( emu->tam_bloque-sizeof(EMUFS_REG_ID) < emu->tam_reg ) - lugar = emu->tam_bloque; - /* me devuelve el ID del bloque donde quepa un registro y el espacio libre en "fs"*/ - num_bloque = emufs_fsc_buscar_lugar(emu, lugar, &fs); + + + + if ( cant_bloques == 1 ) + /* me devuelve el ID del bloque donde quepa un registro y el espacio libre en "fs"*/ + num_bloque = emufs_fsc_buscar_lugar(emu, emu->tam_reg+sizeof(EMUFS_REG_ID), &fs); + else + /* me devuelve el ID del bloque donde quepan n registros y el espacio libre en "fs"*/ + num_bloque = emufs_fsc_buscar_n_lugares(emu, cant_bloques, emu->tam_bloque, &fs, err); + /*si no hay bloques con suficiente espacio creo un bloque nuevo */ - if (num_bloque == -1) { + if (num_bloque == EMUFS_NOT_FOUND) { 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); @@ -208,7 +214,7 @@ EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE t return -1; } } - + /* grabo el nuevo registro en el archivo de espacios libres */ if ( emu->tam_bloque-sizeof(EMUFS_REG_ID) < emu->tam_reg ) new_fs = emu->tam_bloque - sizeof(EMUFS_REG_ID) - resto ; @@ -224,6 +230,7 @@ EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE t /*tengo que buscar un ID valido para el nuevo registro*/ ID_aux = emufs_idx_get_new_id(emu, err); for (i=0; itam_bloque-sizeof(EMUFS_REG_ID); /*cargo el bloque en "bloque"*/ if (!(bloque = emufs_tipo3_leer_bloque(emu, num_bloque+i, err))) { /* TODO Manejo de errores */ @@ -259,9 +266,10 @@ EMUFS_REG_ID emufs_tipo3_grabar_registro(EMUFS *emu, void *ptr, EMUFS_REG_SIZE t if ( emu->tam_bloque-sizeof(EMUFS_REG_ID) < emu->tam_reg ){ /*Si el registro ocupa mas de un bloque (original) resto = emu->tam_bloque-sizeof(EMUFS_REG_ID)*/ resto += sizeof(EMUFS_REG_ID); + /*resto = emu->tam_reg - i*(emu->tam_bloque - sizeof(EMUFS_REG_ID)) + sizeof(EMUFS_REG_ID);*/ if ( cant_bloques-1 == i ) resto = emu->tam_reg - i*(emu->tam_bloque - sizeof(EMUFS_REG_ID))+sizeof(EMUFS_REG_ID); - printf("fs-resto = %d\n", emu->tam_bloque-resto); + /*printf("fs-resto = %d\n", fs-resto);*/ if ( emufs_fsc_agregar(emu, num_bloque+i, fs-resto) !=0 ){ fclose(file); if (bloque) free(bloque);