From: Nicolás Dimov Date: Thu, 15 Apr 2004 18:41:17 +0000 (+0000) Subject: por lo pronto parece que anda, hice un par de pruebas y anduvo jamon, pero me queda... X-Git-Tag: svn_import_r684~475 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/3fedb806fdecbcb4508773321011e96ab27903e9?ds=sidebyside 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 --- 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);