From 9be3cef1df309cc384c37af980d379d465ab25e9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicol=C3=A1s=20Dimov?= Date: Mon, 19 Apr 2004 07:34:30 +0000 Subject: [PATCH] no anda perfecto pero ahora actualiza mucho mejor el fsc --- emufs/tipo3.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) 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); -- 2.43.0