EMUFS_BLOCK_ID, EMUFS_FREE, int*);
-CLAVE insertar_odenado_en_bloque(EMUFS *emu, void *ptr, void *bloque, int num_bloque);
+CLAVE insertar_odenado_en_bloque(EMUFS *emu, void *ptr, EMUFS_REG_SIZE size, void *bloque, int num_bloque, int *err);
/*------------------ Funciones públicas ----------------------*/
} /*aca deberia estar apuntando al final de los registros. espacio libre*/
fs -= sizeof(int); /*footer*/
if ( fs >= size ){ /* puedo meter el registro en este bloque*/
- insertar_odenado_en_bloque(emu, ptr, bloque, query->num_bloque);
+ insertar_odenado_en_bloque(emu, ptr, size, bloque, query->num_bloque, err);
/*en teoria el nuevo registro no debe cambiar el ancla, por lo cual no actualizo el arbol*/
return 0;
/*aca va lo que saque*/
}
/*inserta un registro ordenado en un bloque y devuelve la menor de las claves*/
-CLAVE insertar_odenado_en_bloque(EMUFS *emu, void *ptr, void *bloque, int num_bloque)
+CLAVE insertar_odenado_en_bloque(EMUFS *emu, void *ptr, EMUFS_REG_SIZE size, void *bloque, int num_bloque, int *err)
{
- #ifdef CAMBIAR
+ /*#ifdef CAMBIAR*/
char *aux, *new_bloque;
int cant_reg, tam_reg, i, j;
EMUFS_TIPO1_REG_HEADER header;
+ EMUFS_FREE fs;
CLAVE clave, clave_ajena;
- header.id = emufs_idx_get_new_id(efs, err);
+ memcpy(&cant_reg, bloque+emu->tam_bloque-sizeof(int), sizeof(int));
+ clave = emufs_indice_generar_clave(emu->indices, ptr);
+ header.id = emufs_idx_get_new_id(emu, err);
header.size = size;
cant_reg++;
new_bloque = (char*)malloc(emu->tam_bloque);
if ( emu->tam_bloque-fs < sizeof(EMUFS_TIPO1_REG_HEADER)+emu->indices->offset ){
PERR("ESTOY LEYENDO FUERA DEL BLOQUE!!!");
free(new_bloque);
+ *err = -1;
return clave;
}
clave_ajena = emufs_indice_generar_clave(emu->indices, bloque); /*leo la clave*/
bloque -= sizeof(EMUFS_TIPO1_REG_HEADER); /*vuelvo al principio*/
- if ( i<cant_reg && emufs_indice_es_menor(clave_ajena, clave) ){
+ if ( i<cant_reg && emufs_indice_es_menor(emu->indices, clave_ajena, clave) ){
memcpy(&tam_reg, bloque+sizeof(EMUFS_REG_ID), sizeof(EMUFS_REG_SIZE));
/*copio el reg al bloque nuevo*/
memcpy(new_bloque, bloque, sizeof(EMUFS_TIPO1_REG_HEADER)+tam_reg);
free(bloque);/*no lo uso mas*/
/*grabo el bloque en el archivo*/
new_bloque = aux; /*apunto al principio del bloque*/
- emufs_tipo1_grabar_bloque_fsc(emu, new_bloque, query->num_bloque, EMUFS_NOT_FOUND, err);
+ emufs_tipo1_grabar_bloque_fsc(emu, new_bloque, num_bloque, EMUFS_NOT_FOUND, err);
clave = emufs_indice_generar_clave(emu->indices, new_bloque+sizeof(EMUFS_TIPO1_REG_HEADER));
free(new_bloque);
return clave;
- #endif CAMBIAR
+ /*#endif CAMBIAR*/
}