]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/indice_b.c
* BUGFIX : Modifico abreviaturas para soportar claves string que empiecen con
[z.facultad/75.06/emufs.git] / emufs / indice_b.c
index 9f3e4114e3c15160d88c663d09e99eda626f18cb..df096183359c6a03096021cf6c8d48fca81e319c 100644 (file)
@@ -145,6 +145,10 @@ int emufs_indice_b_insertar(INDICE *idx, CLAVE clave, INDICE_DATO dato)
                 */
                dummy.id = -1;
                dato.id = b_insertar_dup_en_pos(idx, dummy, dato);
+               if (dato.id != -1)
+                       PERR("NODO INSERTADO EN POS GENERADA NUEVA");
+       PERR("Ahora inserto");
+       fprintf(stderr, "Nombre del coso = %s\n", idx->nombre);
        }
 
        b_insertar_en_nodo(idx, clave, dato, nodo_id, nodo, -1, -1);
@@ -169,7 +173,6 @@ INDICE_DATO emufs_indice_b_buscar(INDICE *idx, CLAVE clave)
                if ((i<header.cant) && (emufs_indice_es_igual(idx, claves[i].clave, clave))) {
                                ret = claves[i].dato;
                                free(nodo);
-                               PERR("CLAVE ENCONTRADA");
                                return ret;
                } else {
                        tmp = nodo;
@@ -377,7 +380,8 @@ static void b_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, int n
                        tmp_claves[i].clave = clave;
                        tmp_claves[i].dato = dato;
                        tmp_claves[i].hijo_derecho = hijo1;
-                       tmp_claves[i+1].hijo_derecho = hijo2;
+                       if (i<nodo_header.cant)
+                               tmp_claves[i+1].hijo_derecho = hijo2;
                        while (i < nodo_header.cant) {
                                tmp_claves[i+1] = claves[i];
                                i++;
@@ -554,7 +558,6 @@ INDICE_DATO *emufs_indice_b_buscar_muchos(INDICE *idx, CLAVE clave, int *cant)
        }
 
        /* Busco la clave en el arbol */
-       PERR("Buscando clave");
        dato = emufs_indice_b_buscar(idx, clave);
 
        if (dato.id == -1) {
@@ -841,20 +844,21 @@ static EMUFS_REG_ID b_insertar_dup_en_pos(INDICE *idx, INDICE_DATO pos, INDICE_D
                error = 0;
                PERR("GRABADO REGISTRO NUEVO");
                k.i_clave = idx->emu_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);
@@ -894,7 +898,7 @@ static void abreviar_claves(INDICE *idx, B_NodoEntry *array, B_NodoHeader *heade
                 * 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);
@@ -919,10 +923,11 @@ static void desabreviar_claves(INDICE *idx, B_NodoEntry *array, B_NodoHeader *he
        for(i=1; i<header->cant; i++) {
                actual = (char *)idx->emu_string->leer_registro(idx->emu_string, array[i].clave, &size, &error);
                iguales = strtol(actual, &resto, 10);
-               if (iguales > 0) {
+               if ((iguales > 0) && (*resto == '|')) {
+                       fprintf(stderr, "%s %s %d\n", primera, actual, iguales); 
                        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 {