From 3fedb806fdecbcb4508773321011e96ab27903e9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicol=C3=A1s=20Dimov?= Date: Thu, 15 Apr 2004 18:41:17 +0000 Subject: [PATCH] por lo pronto parece que anda, hice un par de pruebas y anduvo jamon, pero me queda la duda si me esta devovliendo bien un nuevo id despues de haber borrado un registro, pero como en la gui anda no debe estar mal --- emufs/idx.c | 23 +++++++++++++++++++++++ emufs/idx.h | 2 ++ emufs/tipo3.c | 10 +++++++--- emufs/tipo3_main.c | 33 ++++++++++----------------------- 4 files changed, 42 insertions(+), 26 deletions(-) diff --git a/emufs/idx.c b/emufs/idx.c index cb2ff78..dcf57c5 100644 --- a/emufs/idx.c +++ b/emufs/idx.c @@ -251,3 +251,26 @@ int emufs_idx_existe_id(EMUFS *emu, int ID) fclose(f_idx); return -1; } + +int emufs_idx_actualizar(EMUFS *emu, int ID, int bloque) +{ + FILE *f_idx; + char name_f_idx[255]; + EMUFS_IDX reg; + + strcpy(name_f_idx,emu->nombre); + strcat(name_f_idx, EMUFS_IDX_EXT); + + if ( (f_idx = fopen(name_f_idx, "r+")) == NULL){ + PERR("No se pudo abrir el archivo"); + return -1; + } + + fseek(f_idx,ID*sizeof(EMUFS_IDX),SEEK_SET); + fread(®,sizeof(EMUFS_IDX),1,f_idx); + reg.location = bloque; + fseek(f_idx,-sizeof(EMUFS_IDX),SEEK_CUR); + fwrite(®,sizeof(EMUFS_IDX),1,f_idx); + fclose(f_idx); + return 0; +} diff --git a/emufs/idx.h b/emufs/idx.h index c6a9275..1ceccc9 100644 --- a/emufs/idx.h +++ b/emufs/idx.h @@ -73,4 +73,6 @@ EMUFS_REG_ID emufs_idx_get_new_id(EMUFS*, int*); int emufs_idx_existe_id(EMUFS *emu, int ID); +int emufs_idx_actualizar(EMUFS *emu, int ID, int bloque); + #endif /* _EMUFS_IDX_H */ diff --git a/emufs/tipo3.c b/emufs/tipo3.c index fe46251..2c24174 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -187,9 +187,13 @@ 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 ( 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 */ diff --git a/emufs/tipo3_main.c b/emufs/tipo3_main.c index f4fd20f..317c1ae 100644 --- a/emufs/tipo3_main.c +++ b/emufs/tipo3_main.c @@ -58,12 +58,6 @@ int main(int argc, char *argv[]) printf("Modo de uso : %s tam_bloque\n", argv[0]); return 1; } -/* - if (atoi(argv[1]) < 104) { - printf("El tamaƱo de bloque debe ser mayor a 104\n"); - return 1; - } -*/ strcpy(a, "1234567890"); strcpy(c, "REGISTRO NUMERO 2. ESTE REGISTRO ES MUCHO MAS LARGO QUE EL UNO"); strcpy(d, "ABCDEFGHIJKL"); @@ -75,9 +69,7 @@ int main(int argc, char *argv[]) fp = emufs_crear("articulos", T3, atoi(argv[1]), 100); - printf("pase0\n"); n1 = fp->grabar_registro(fp, a, 100, &err); - printf("pase1\n"); n2 = fp->grabar_registro(fp, c, 100, &err); n3 = fp->grabar_registro(fp, d, 100, &err); n4 = fp->grabar_registro(fp, e, 100, &err); @@ -86,27 +78,22 @@ int main(int argc, char *argv[]) n7 = fp->grabar_registro(fp, h, 100, &err); n8 = fp->grabar_registro(fp, i, 100, &err); -/* - fp->borrar_registro(fp, n1); - fp->borrar_registro(fp, n2); - fp->borrar_registro(fp, n3); - fp->borrar_registro(fp, n4); - fp->borrar_registro(fp, n5); -/* if ( fp->borrar_registro(fp, n6) == -1) printf("la cague %d\n",n6); - if ( fp->borrar_registro(fp, n7) == -1) printf("la cague %d\n",n7); - if ( fp->borrar_registro(fp, n8) == -1) printf("la cague %d\n",n8); - */ ver_archivo_FS(fp); fp->borrar_registro(fp, n3); fp->borrar_registro(fp, n4); - printf("pase3\n"); - /*n6 = fp->grabar_registro(fp, g, 100, &err);*/ - printf("pase4\n"); - b_ptr = fp->leer_registro(fp, n7, ®_size, &err); + n6 = fp->grabar_registro(fp, g, 100, &err); + b_ptr = fp->leer_registro(fp, n6, ®_size, &err); printf("Recuperado : %s\n", b_ptr); + + fp->borrar_registro(fp, n5); + fp->borrar_registro(fp, n6); + + n4 = fp->grabar_registro(fp, h, 100, &err); + b_ptr = fp->leer_registro(fp, n2, ®_size, &err); + printf("Recuperado : %s\n", b_ptr); + free(b_ptr); - ver_archivo_FS(fp); /*s = fp->leer_estadisticas(fp); printf("tam_archivo = %d\ntam_archivo_bytes = %d\ninfo_control = %d\n",s.tam_archivo,s.tam_archivo_bytes,s.info_control); -- 2.43.0