block = dato.bloque;
ID = dato.id;
PERR("Use indice");
+ fprintf(stderr, "Datos leidos : id=%ld, bloque=%ld\n", ID, block);
} else {
/* Si no tengo claves, uso el campo entero para pasar un ID
* directamente.
INDEX_DAT query;
int result, iter, cant_reg;
EMUFS_REG_SIZE tam_reg = emu->tam_reg;
- CLAVE clave_ajena;
+ CLAVE clave_ajena, ancla;
int err = 0;
/*cargo el query para buscar*/
query.clave = clave;
/*mando a buscar el bloque donde esta la clave que quiero eliminar*/
result = emufs_b_plus_get_bloque(emu->indices, &query, 0);
+ printf("bloque = %d\n", query.num_bloque);
if ( result == 1 ){
PERR("SE PRODUJO UN ERROR EN EL ARBOL");
return -1;
PERR("NO SE CARGO EL BLOQUE");
return -1;
}
+ /*me fijo si el que tengo que eliminar es el ancla del bloque*/
+ ancla = emufs_indice_generar_clave(emu->indices, bloque+sizeof(EMUFS_REG_ID));
/*leo la cantidad de registros en el bloque*/
memcpy(&cant_reg, bloque+emu->tam_bloque-sizeof(int), sizeof(int));
/*busco y elimino*/
iter = 0;
aux = bloque;
- /*me fijo si el que tengo que eliminar es el ancla del bloque*/
- clave_ajena = emufs_indice_generar_clave(emu->indices, bloque+sizeof(EMUFS_REG_ID));
- if ( emufs_indice_es_igual(emu->indices, clave, clave_ajena) ){
- /* TENGOQ QUE BORRAR LA CLAVE DEL ARBOL !!!!*/
- /* Y HAY QUE BORRAR EL BLOQUE DEL ARCHIVO*/
- }
while ( iter < emu->tam_bloque ){
clave_ajena = emufs_indice_generar_clave(emu->indices, aux+sizeof(EMUFS_REG_ID));
if ( emufs_indice_es_igual(emu->indices, clave, clave_ajena) ){
free(bloque);
return -1;
}
+ /*me fijo si el que tengo que eliminar es el ancla del bloque*/
+ if ( emufs_indice_es_igual(emu->indices, clave, ancla) ){
+ if ( cant_reg == 0 )
+ emufs_b_plus_eliminar(emu->indices, clave, 0);
+ else {
+ /*obtengo la nueva ancla del bloque*/
+ query.clave = emufs_indice_generar_clave(emu->indices, bloque+sizeof(EMUFS_REG_ID));
+ emufs_b_plus_reemplazar_clave(emu->indices, ancla, query, 0);
+ }
+ }
free(bloque);
return 0;
}