]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/indice_b_asc.c
Piloteado de mini bug que pudiera existir en insertar ordenado, siempre se devuelve...
[z.facultad/75.06/emufs.git] / emufs / indice_b_asc.c
index dc2fdfcf7311f33c5473fe477bece985a1f67214..42903c4b12abb7cd5f83bdb8e26a33fc580f0431 100644 (file)
@@ -146,12 +146,15 @@ static void b_asc_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, i
 
                                        /* la paso a la derecha */
                                        b_pasar_clave_a_derecha(idx, der, der_id, padre, nodo_header.padre, pos_padre, a_pasar);
-                                       /* XXX TODO Liberar memoria y GUARDAR*/
+                                       /* Dejo en nodo las claves que corresponden */
+                                       memcpy(claves, buffer, nodo_header.cant*sizeof(B_NodoEntry));
                                        b_grabar_nodo(idx, der_id, der);
                                        b_grabar_nodo(idx, nodo_header.padre, padre);
                                        b_grabar_nodo(idx, nodo_id, nodo);
                                        free(buffer);
-                               
+                                       free(nodo);
+                                       free(der);
+                                       free(padre);
                                        return;
                                } 
                        
@@ -166,11 +169,15 @@ static void b_asc_insertar_en_nodo(INDICE *idx, CLAVE clave, INDICE_DATO dato, i
                                        b_grabar_nodo(idx, nodo_header.padre, padre);
                                        b_grabar_nodo(idx, nodo_id, nodo);
                                        free(buffer);
+                                       free(nodo);
+                                       free(izq);
+                                       free(padre);
                                        return;
                                }
                        
                                /* Tengo que partir, tengo que sacar una clave del padre y mandarla al partir */
                                clave_que_sale = padre_claves[pos_padre];
+                               clave_que_sale.hijo_derecho = -1;
                                for(i=pos_padre; i<padre_header.cant-1; i++)
                                        padre_claves[i] = padre_claves[i+1];
                                padre_header.cant--;