X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/3ff4788e11c87e1e6c9f43fef629f6079415f548..f416a6eaa67f78040bfcf9454e0535fe67354424:/emufs/tipo3.c diff --git a/emufs/tipo3.c b/emufs/tipo3.c index 5ce17d5..a28b635 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -59,13 +59,18 @@ void* emufs_tipo3_leer_registro(EMUFS *emu, CLAVE clave, cant_bloques = 1; /*si existe, lo busco en el archivo de bloques*/ - if (emu->indices != NULL) { + if ((emu->indices != NULL) && (*err != 1)) { /* TODO : Verificar donde esta el indice primario */ dato = emu->indices->existe_entrada(emu->indices, clave); block = dato.bloque; ID = dato.id; + PERR("Use indice"); } else { - /* TODO ID de donde lo puedo sacar :-) , lo cargo en CLAVE ? */ + /* Si no tengo claves, uso el campo entero para pasar un ID + * directamente. + */ + PERR("Use directo"); + ID = clave.i_clave; block = emufs_idx_buscar_registro(emu,ID); /*me devuelve el nro de bloque al que pertenece el registro*/ } if ( block == EMUFS_NOT_FOUND ){ @@ -332,13 +337,14 @@ int emufs_tipo3_grabar_bloque(EMUFS *emu, void *ptr, EMUFS_BLOCK_ID num) } /*borra un registro de un bloque y acomoda los registros que quedan*/ -int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID) +int emufs_tipo3_borrar_registro(EMUFS *emu, CLAVE k) { EMUFS_BLOCK_SIZE num_bloque; EMUFS_BLOCK_SIZE ptr_elim; EMUFS_BLOCK_SIZE ptr_mov; - EMUFS_REG_ID ID_aux; + EMUFS_REG_ID ID_aux, ID; EMUFS_FREE fs; + INDICE_DATO dato; char *bloque; int err = 0, i, cant_bloques; @@ -346,14 +352,21 @@ int emufs_tipo3_borrar_registro(EMUFS *emu, EMUFS_REG_ID ID) 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; - - num_bloque = emufs_idx_buscar_registro(emu, ID); + + PERR("Buscando datos del registro en el indice"); + dato = emu->indices->existe_entrada(emu->indices, k); + num_bloque = dato.bloque; /*emufs_idx_buscar_registro(emu, ID);*/ + ID = dato.id; + if (!(bloque = emufs_tipo3_leer_bloque(emu, num_bloque, &err))) { /* TODO Manejo de errores */ PERR("no se pudo leer el bloque"); return -1; } + PERR("Borrando clave"); + /* TODO Borrar en todos los indices!! */ + emu->indices->borrar_entrada(emu->indices, k); /*apunto al registro que voy a eliminar*/ ptr_elim = 0; while ( ptr_elim < emu->tam_bloque ){ @@ -466,7 +479,7 @@ EMUFS_Estadisticas emufs_tipo3_leer_estadisticas(EMUFS *emu) EMUFS_REG_ID emufs_tipo3_modificar_registro(EMUFS *emu, EMUFS_REG_ID id, void *data, EMUFS_REG_SIZE size, int *error) { - emufs_tipo3_borrar_registro(emu, id); + /*emufs_tipo3_borrar_registro(emu, id);*/ return emufs_tipo3_grabar_registro(emu, data, size, error); } @@ -567,16 +580,7 @@ void emufs_tipo3_leer_bloque_raw(EMUFS *efs, EMUFS_BLOCK_ID id, char **actual, c (*size1) = (*size2) = (*size3) = efs->tam_bloque; } -int emufs_tipo3_insertar_ordenado(EMUFS *emu, void *ptr, CLAVE clave, int *err) +int emufs_tipo3_insertar_ordenado(EMUFS *emu, void *ptr, CLAVE clave, int offset, EMUFS_BLOCK_ID num_bloque, int *err) { - FILE *f; - char f_name[255]; - char *bloque; - - strcpy(f_name, emu->nombre); - strcat(f_name, ".dat"); - - - return 0; }