X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/03e6bac48b3be290deae9d8943940bf0067846af..91245c4c700e6740b4d00e1f36b02e05ff96dabd:/emufs/indice_b.c?ds=sidebyside diff --git a/emufs/indice_b.c b/emufs/indice_b.c index 9f3e411..9a5118d 100644 --- a/emufs/indice_b.c +++ b/emufs/indice_b.c @@ -71,8 +71,6 @@ void emufs_indice_b_crear(INDICE *idx) header.hijo_izquierdo = -1; fp = fopen(idx->filename, "w"); - PERR("Creando indice"); - fprintf(stderr, "Archivo = (%s)\n", idx->filename); if (fp == NULL) { PERR("Error al crear el archivo"); return; @@ -120,7 +118,6 @@ int emufs_indice_b_insertar(INDICE *idx, CLAVE clave, INDICE_DATO dato) if (idx->tipo_dato == IDX_STRING) { /* Tengo que sacar el texto repetido del archivo de textos */ - PERR("Eliminando string duplicado"); idx->emu_string->borrar_registro(idx->emu_string, clave); } return 1; @@ -158,9 +155,11 @@ INDICE_DATO emufs_indice_b_buscar(INDICE *idx, CLAVE clave) B_NodoHeader header; B_NodoEntry *claves; char *nodo, *tmp; + int nodo_id; /* Leo la raiz */ nodo = b_leer_nodo(idx, 0); + nodo_id = 0; while (nodo) { b_leer_header(nodo, &header); claves = b_leer_claves(nodo, &header); @@ -168,15 +167,18 @@ INDICE_DATO emufs_indice_b_buscar(INDICE *idx, CLAVE clave) while ((itam_bloque-sizeof(B_NodoHeader)); for(j=0; jtam_bloque-sizeof(B_NodoHeader)); for(j=0; jemu_mult->grabar_registro(idx->emu_mult, - leido, - cant*sizeof(INDICE_DATO)+sizeof(int), - &error - ); + leido, + cant*sizeof(INDICE_DATO)+sizeof(int), + &error + ); + if (k.i_clave == -1) PERR("ALGO NO GRABO BIEN!!"); } else { /* Modifico el que ya existia! */ - PERR("MODIFICANDO REGISTRO EXISTENTE"); error = 0; idx->emu_mult->modificar_registro(idx->emu_mult, - k.i_clave, - leido, - cant*sizeof(INDICE_DATO)+sizeof(int), - &error - ); + k.i_clave, + leido, + cant*sizeof(INDICE_DATO)+sizeof(int), + &error + ); } /* Clean up! */ free(leido); @@ -889,12 +903,16 @@ static void abreviar_claves(INDICE *idx, B_NodoEntry *array, B_NodoHeader *heade primera = (char *)idx->emu_string->leer_registro(idx->emu_string, array[0].clave, &size, &error); for(i=1; icant; i++) { actual = (char *)idx->emu_string->leer_registro(idx->emu_string, array[i].clave, &size, &error); + if (*actual == '*') { + free(actual); + continue; + } resto = abreviar(primera, actual, &iguales); /* Para que tenga sentido abreviar tengo que tener * mas de 2 letras iguales, si no no gano nada y complica las cosas */ if (iguales > 1) { - sprintf(salvar, "%d%s", iguales, resto); + sprintf(salvar, "%d|%s", iguales, resto); free(actual); error = 0; idx->emu_string->modificar_registro(idx->emu_string, array[i].clave.i_clave, salvar, strlen(salvar)+1, &error); @@ -918,11 +936,15 @@ static void desabreviar_claves(INDICE *idx, B_NodoEntry *array, B_NodoHeader *he primera = (char *)idx->emu_string->leer_registro(idx->emu_string, array[0].clave, &size, &error); for(i=1; icant; i++) { actual = (char *)idx->emu_string->leer_registro(idx->emu_string, array[i].clave, &size, &error); + if (*actual == '*') { + free(actual); + continue; + } iguales = strtol(actual, &resto, 10); - if (iguales > 0) { + if ((iguales > 0) && (*resto == '|')) { strncpy(salvar, primera, iguales); salvar[iguales] = '\0'; - strcat(salvar, resto); + strcat(salvar, resto+1); /* +1 para saltar el separador */ idx->emu_string->modificar_registro(idx->emu_string, array[i].clave.i_clave, salvar, strlen(salvar)+1, &error); free(actual); } else {