]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/indice_b.c
rompo todo porque me la banco... a ver si alguien se da cuenta por que se cuelga...
[z.facultad/75.06/emufs.git] / emufs / indice_b.c
index dc483fe25a07c400c95bdbb0499dc79f26b97dd6..dfd4ff34eeb533839d8ded8b9ed870ad02db2c9f 100644 (file)
@@ -75,6 +75,7 @@ void emufs_indice_b_crear(INDICE *idx)
        memcpy(bloque, &header, sizeof(B_NodoHeader));
 
        fwrite(bloque, idx->tam_bloque, 1, fp);
        memcpy(bloque, &header, sizeof(B_NodoHeader));
 
        fwrite(bloque, idx->tam_bloque, 1, fp);
+       free(bloque);
        fclose(fp);
 }
 
        fclose(fp);
 }
 
@@ -845,6 +846,7 @@ void b_pasar_clave_a_derecha(INDICE *idx, char *der, int der_id, char *padre, in
        b_leer_header(der, &der_h);
        padre_entries = b_leer_claves(padre, &padre_h);
        /* Inserto en el hijo derecho la clave del padre */
        b_leer_header(der, &der_h);
        padre_entries = b_leer_claves(padre, &padre_h);
        /* Inserto en el hijo derecho la clave del padre */
+       PERR("PASAR CLAVE DERECHA");
        b_insertar_en_nodo_con_lugar(idx, padre_entries[padre_pos].clave, padre_entries[padre_pos].dato,
                        der_id, der, der_h.hijo_izquierdo, entry.hijo_derecho);
        /* Reemplazo clave del padre por clave nueva */
        b_insertar_en_nodo_con_lugar(idx, padre_entries[padre_pos].clave, padre_entries[padre_pos].dato,
                        der_id, der, der_h.hijo_izquierdo, entry.hijo_derecho);
        /* Reemplazo clave del padre por clave nueva */
@@ -1125,12 +1127,12 @@ static void b_partir_dos_nodos_en_tres(INDICE* idx, int nodo_izq, int nodo_der,
        /* lleno el lado derecho e izquierdo */
        for(i=0, j=0; i<cant_claves/3; i++, j++)
                c_izq[j] = buffer[i];
        /* lleno el lado derecho e izquierdo */
        for(i=0, j=0; i<cant_claves/3; i++, j++)
                c_izq[j] = buffer[i];
-       prom1 = buffer[i];
+       prom1 = buffer[i++];
        h_izq.cant = j;
        for(j=0; i<2*cant_claves/3; i++, j++)
                c_der[j] = buffer[i];
        h_der.cant = j;
        h_izq.cant = j;
        for(j=0; i<2*cant_claves/3; i++, j++)
                c_der[j] = buffer[i];
        h_der.cant = j;
-       prom2 = buffer[i];
+       prom2 = buffer[i++];
        for(j=0; i<cant_claves; i++,j++)
                c_nuevo[j] = buffer[i];
        h_nuevo.cant = j;
        for(j=0; i<cant_claves; i++,j++)
                c_nuevo[j] = buffer[i];
        h_nuevo.cant = j;
@@ -1281,11 +1283,22 @@ CLAVE emufs_indice_b_obtener_sig_clave(INDICE *idx, CLAVE k)
                                /* Busco al mi padre, perdido en un maremoto hace mucho,muchos
                                 * años
                                 */
                                /* Busco al mi padre, perdido en un maremoto hace mucho,muchos
                                 * años
                                 */
-                               free(nodo);
+                               tmp = nodo;
                                if (header.padre == -1) {
                                if (header.padre == -1) {
-                                       salida.i_clave = -1;
+                                       if (nodo_id == 0) {
+                                               /* Bien, son el nodo raiz y aca tendria que ir hacia mi hijo
+                                                * derecho
+                                                */
+                                               nodo = b_leer_nodo(idx, claves[header.cant-1].hijo_derecho);
+                                               free(tmp);
+                                               b_leer_header(nodo, &header);
+                                               claves = b_leer_claves(nodo, &header);
+
+                                               salida = claves[0].clave;
+                                       }
                                        return salida;
                                }
                                        return salida;
                                }
+                               free(nodo);
                                nodo = b_leer_nodo(idx, header.padre);
                                b_leer_header(nodo, &header);
                                claves = b_leer_claves(nodo, &header);
                                nodo = b_leer_nodo(idx, header.padre);
                                b_leer_header(nodo, &header);
                                claves = b_leer_claves(nodo, &header);
@@ -1389,4 +1402,3 @@ int b_borrar_dup_clave(INDICE *idx, INDICE_DATO k_dato, INDICE_DATO dato)
 }
 
 #include "indice_b_asc.c"
 }
 
 #include "indice_b_asc.c"
-