X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/5fc533bfc8c784106a1d876afb004ded4bb4b068..a680ab304d20541f4bf03709354b7b7c2ffdf993:/emufs/indice_b.c?ds=sidebyside diff --git a/emufs/indice_b.c b/emufs/indice_b.c index 7597661..e6a0e05 100644 --- a/emufs/indice_b.c +++ b/emufs/indice_b.c @@ -75,6 +75,7 @@ void emufs_indice_b_crear(INDICE *idx) memcpy(bloque, &header, sizeof(B_NodoHeader)); fwrite(bloque, idx->tam_bloque, 1, fp); + free(bloque); fclose(fp); } @@ -104,8 +105,9 @@ int emufs_indice_b_insertar(INDICE *idx, CLAVE clave, INDICE_DATO dato) PERR(idx->nombre); return 0; } - - b_insertar_dup_en_pos(idx, claves[i].dato, dato); + + if ((idx->funcion == IND_SELECCION) && (!emufs_indice_es_clave_nula(idx, clave))) + b_insertar_dup_en_pos(idx, claves[i].dato, dato); if (idx->tipo_dato == IDX_STRING) { /* Tengo que sacar el texto repetido del archivo de textos */ @@ -131,6 +133,11 @@ int emufs_indice_b_insertar(INDICE *idx, CLAVE clave, INDICE_DATO dato) /* Agrego el DATO real al archivo de claves repetiras * y me guardo el ID para poner en el indice */ + if ((idx->funcion == IND_SELECCION) && (emufs_indice_es_clave_nula(idx, clave))) + /* UPS!, la clave que se va a insertar por primera vez es nula + * y soy un indice selectivo!, no lo puedo permitir, ciao!! + */ + return 1; dummy.id = -1; dato.id = b_insertar_dup_en_pos(idx, dummy, dato); } @@ -1400,5 +1407,15 @@ int b_borrar_dup_clave(INDICE *idx, INDICE_DATO k_dato, INDICE_DATO dato) return cant; } -#include "indice_b_asc.c" +#ifdef NO_TERMINAOD +EMUFS_Estadisticas emufs_indice_b_obtener_estadisticas(INDICE *idx) +{ + EMUFS_Estadisticas stats, st_string, st_multiples; + + stats.tam_archivo = emufs_common_get_file_size(idx->filename); + stats.cant_bloques = stats.tam_archivo/idx->tam_bloque; +} +#endif + +#include "indice_b_asc.c"