From 75973af27108786afc7a63cbb2efa6a33ae386dc Mon Sep 17 00:00:00 2001 From: Alan Kennedy Date: Sun, 11 Apr 2004 18:56:48 +0000 Subject: [PATCH] Borrado de registros ya funciona entero dado que se arreglo el idx_borrar. Rutina interna tipo2 optimizada en fsc.c --- emufs/fsc.c | 14 ++++++++++---- emufs/tipo2.c | 11 +++++------ emufs/tipo2_main.c | 16 ++++++++-------- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/emufs/fsc.c b/emufs/fsc.c index 0b9449b..e71d13d 100644 --- a/emufs/fsc.c +++ b/emufs/fsc.c @@ -148,14 +148,20 @@ int emufs_fsc_agregar_gap(EMUFS *emu, EMUFS_OFFSET n_marker, EMUFS_FREE n_freesp printf("fsc.c >> Pre Gap found is reg number %lu in .fsc file\n",n_gap_before); printf("fsc.c >> Post Gap found is reg number %lu in .fsc file\n",n_gap_after); /* Guardo el nuevo GAP que posee los tres espacios sumados */ - fseek(f_fsc,sizeof(EMUFS_FSC)*n_gap_before,0); + if (n_gap_before < n_gap_after) { + fseek(f_fsc,sizeof(EMUFS_FSC)*n_gap_before,0); + n_destination = sizeof(EMUFS_FSC)*n_gap_after; + } + else { + fseek(f_fsc,sizeof(EMUFS_FSC)*n_gap_after,0); + n_destination = sizeof(EMUFS_FSC)*n_gap_before; + } gap_new.n_marker = gap_before.n_marker; gap_new.n_freespace = gap_before.n_freespace + n_freespace + gap_after.n_freespace; fwrite(&gap_new,sizeof(EMUFS_FSC),1,f_fsc); /* Preparo el escenario para la movida de registros */ - n_destination = sizeof(EMUFS_FSC)*n_gap_after; - n_source = n_destination+sizeof(EMUFS_FSC); /* Salteo el gap_after! */ + n_source = n_destination+sizeof(EMUFS_FSC); /* Salteo el gap que elimino! */ fseek(f_fsc,0,SEEK_END); n_filesize = ftell(f_fsc); n_reg_count = (n_filesize - n_source) / sizeof(EMUFS_FSC); @@ -171,7 +177,7 @@ int emufs_fsc_agregar_gap(EMUFS *emu, EMUFS_OFFSET n_marker, EMUFS_FREE n_freesp ++n_moved; } fclose(f_fsc); - truncate(name_f_fsc, n_filesize - sizeof(EMUFS_FSC)); + truncate(name_f_fsc, n_filesize - sizeof(EMUFS_FSC)); } return 0; diff --git a/emufs/tipo2.c b/emufs/tipo2.c index d195835..d2901d7 100644 --- a/emufs/tipo2.c +++ b/emufs/tipo2.c @@ -63,7 +63,7 @@ EMUFS_REG_ID emufs_tipo2_grabar_registro(EMUFS *efs, void *ptr, EMUFS_REG_SIZE n /* de manera segura (habra espacio suficiente) */ n_FisicSize = sizeof(EMUFS_REG_ID)+sizeof(EMUFS_REG_SIZE)+n_RegSize; n_WrtOffset = emufs_fsc_buscar_lugar(efs,n_FisicSize,&n_FreeSpace); - printf("tipo2.c >> Searching FSC: Offset = %lu FSpace: %lu\n", n_WrtOffset, n_FreeSpace); + printf("tipo2.c >> Recording Reg > Searching FSC: Offset = %lu FSpace: %lu\n", n_WrtOffset, n_FreeSpace); /* Si no encontre un gap, entonces escribo el registro al final */ if (n_WrtOffset == -1) { @@ -126,7 +126,7 @@ int emufs_tipo2_borrar_registro(EMUFS *efs, EMUFS_REG_ID n_IdReg) else return -1; - /* Obtenemos el Size del Registro en cuestion y hacemos un dummfill*/ + /* Obtenemos el Size del Registro en cuestion y hacemos un dummyfill*/ emufs_tipo2_get_regsize(efs,n_RegOffset,&n_RegSize); printf ("tipo2.c >> About to delete Reg %lu of Size: %lu\n",n_IdReg,n_RegSize); emufs_tipo2_dummyfill(efs,n_RegOffset,n_RegSize); @@ -139,7 +139,7 @@ int emufs_tipo2_borrar_registro(EMUFS *efs, EMUFS_REG_ID n_IdReg) emufs_did_agregar(efs,n_IdReg); /* Borramos el registro del indice de posiciones relativas */ - /*emufs_idx_borrar(efs,n_IdReg);*/ + emufs_idx_borrar(efs,n_IdReg); return(0); } @@ -182,8 +182,8 @@ int emufs_tipo2_dummyfill(EMUFS *efs, EMUFS_OFFSET n_RegPos, EMUFS_REG_SIZE n_Am { FILE *f_data; char name_f[255]; - void *dummyfill; - void *ptr_cur; + char *dummyfill; + char *ptr_cur; unsigned long n_FillSize,n_count; /* Armamos el filename del archivo de datos */ @@ -205,4 +205,3 @@ int emufs_tipo2_dummyfill(EMUFS *efs, EMUFS_OFFSET n_RegPos, EMUFS_REG_SIZE n_Am return (0); } - diff --git a/emufs/tipo2_main.c b/emufs/tipo2_main.c index c57e56d..068b030 100644 --- a/emufs/tipo2_main.c +++ b/emufs/tipo2_main.c @@ -72,18 +72,18 @@ int main(int argc, char *argv[]) n7 = fp->grabar_registro(fp, h, 63, &err); /* Borramos un registro del medio */ - /*printf("tipo2_main.c >> Borrando registro: %lu\n",n0); - fp->borrar_registro(fp, n0); printf("tipo2_main.c >> Borrando registro: %lu\n",n5); - fp->borrar_registro(fp, n5); + fp->borrar_registro(fp, n5); printf("tipo2_main.c >> Borrando registro: %lu\n",n1); fp->borrar_registro(fp, n1); - printf("tipo2_main.c >> Borrando registro: %lu\n",n7); - fp->borrar_registro(fp, n7);*/ + printf("tipo2_main.c >> Borrando registro: %lu\n",n0); + fp->borrar_registro(fp, n0); printf("tipo2_main.c >> Borrando registro: %lu\n",n3); - fp->borrar_registro(fp, n3); - printf("tipo2_main.c >> Borrando registro: %lu\n",n6); - fp->borrar_registro(fp, n6); + fp->borrar_registro(fp, n3); + printf("tipo2_main.c >> Borrando registro: %lu\n",n7); + fp->borrar_registro(fp, n7); + printf("tipo2_main.c >> Borrando registro: %lu\n",n4); + fp->borrar_registro(fp, n4); n8 = fp->grabar_registro(fp, d, 8, &err); printf("tipo2_main.c >> Id recuperado: %lu\n",n8); -- 2.43.0