new_bloque = (char*)malloc(emu->tam_bloque);
move_size=0;
aux = bloque;
- for(i=0; i<cant_reg/2; i++){ /*copio mitad aca y mitad en el nuevo*/
+ for(i=0; i<cant_reg/2; i++){ /*copio mitad-1 aca y mitad en el nuevo*/
/*avanzo*/
memcpy(&tam_reg, aux+sizeof(EMUFS_REG_ID), sizeof(EMUFS_REG_SIZE));
aux += sizeof(EMUFS_TIPO1_REG_HEADER)+tam_reg;
move_size += sizeof(EMUFS_TIPO1_REG_HEADER)+tam_reg;
- }
- PERR("ME MOVI LA MITAD DE LOS REGISTROS");
+ }/*apunto al reg mitad_mas_uno para copiar todo a otro bloque*/
/*copio el resto del bloque al nuevo bloque*/ /*footer ¿?*/
- memcpy(new_bloque, aux, emu->tam_bloque-move_size/*-sizeof(int)*/);
+ memcpy(new_bloque, aux, emu->tam_bloque-move_size-sizeof(int));
/*borro lo que sobra en el bloque original, guardando el footer*/
memset(aux, 0, emu->tam_bloque - move_size - sizeof(int));
- /*actualizo la cant de registros del bloque original (footer)*/
- i++; /* 0 a n hay n+1 */
- memcpy(bloque+emu->tam_bloque-sizeof(int), &i, sizeof(int));
- /*actualizo el footer del nuevo bloque*/
- dif = cant_reg - i; /*por las dudas*/
- memcpy(new_bloque+emu->tam_bloque-sizeof(int), &dif, sizeof(int));
menor_clave_bloque_nuevo = emufs_indice_generar_clave(emu->indices, new_bloque+sizeof(EMUFS_TIPO1_REG_HEADER));
/* TENGO QUE VER EN CUAL DE LOS DOS BLOQUES METO EL REGISTRO NUEVO */
+ printf("I = %d\n", i ) ;
if ( emufs_indice_es_menor(emu->indices, menor_clave_bloque_nuevo, clave) ){
+ /* GRABO EN EL BLOQUE NUEVO */
+ /*actualizo la cant de registros del bloque original (footer)*/
+ memcpy(bloque+emu->tam_bloque-sizeof(int), &i, sizeof(int));
+ /*actualizo el footer del nuevo bloque*/
+ dif = cant_reg - i; /*por las dudas*/
+ printf("DIF = %d\n", dif);
+ memcpy(new_bloque+emu->tam_bloque-sizeof(int), &dif, sizeof(int));
/*genero un nuevo espacio para un bloque en el archivo y lo cargo en queryla clave ya estaba en query desde antes*/
+ num_bloque = query.num_bloque;
query.num_bloque = emufs_create_new_block(emu);
- printf("numero de bloque nuevo: %d\n", query.num_bloque);
/*inserto el nuevo registro en el nuevo bloque y obtengo la clave del menor*/
clave = grabar_ordenado_en_bloque(emu,ptr,size,new_bloque,query.num_bloque, emu->tam_bloque-move_size,err);
/*actualizo el arbol con la nueva clave*/
query.clave = clave;
emufs_b_plus_insertar(emu->indices, &query);
/*grabo el bloque original*/
- printf("numero de bloque viejo: %d\n", num_bloque);
emufs_tipo1_grabar_bloque_fsc(emu, bloque, num_bloque, EMUFS_NOT_FOUND, err);
} else {
- /*grabo el bloque nuevo*/
+ PERR("GRABO EN BLOQUE VIEJO");
+ /* GRABO EN EL BLOQUE VIEJO */
+ /*actualizo la cant de registros del bloque original (footer)*/
+ memcpy(bloque+emu->tam_bloque-sizeof(int), &i, sizeof(int));
+ /*actualizo el footer del nuevo bloque*/
+ dif = cant_reg - i; /*por las dudas*/
+ /*meto el footer en el reg */
+ memcpy(new_bloque+emu->tam_bloque-sizeof(int), &dif, sizeof(int));
+ /*guardo el num de bloque original */
+ num_bloque = query.num_bloque;
+ /* pido un bloque nuevo para guardar */
query.num_bloque = emufs_create_new_block(emu);
- printf("numero de bloque nuevo: %d\n", query.num_bloque);
- emufs_tipo1_grabar_bloque_fsc(emu, new_bloque, emufs_create_new_block(emu), EMUFS_NOT_FOUND, err);
- printf("numero de bloque viejo %d\n", num_bloque);
- grabar_ordenado_en_bloque(emu,ptr,size,bloque,query.num_bloque, fs-move_size,err);
-
+ /*grabo el bloque nuevo*/
+ emufs_tipo1_grabar_bloque_fsc(emu, new_bloque, query.num_bloque, EMUFS_NOT_FOUND, err);
+ /*grabo el registro en el bloque original*/
+ printf("espacio libre = %d\n", fs+move_size);
+ grabar_ordenado_en_bloque(emu,ptr,size,bloque,num_bloque, fs+move_size,err);
}
if(*err != 0){
PERR("NO SE PUDO GRABAR ORDENADO");