char name_f[255];
EMUFS_OFFSET reg_offset; /* offset donde se encuentra el registro */
EMUFS_REG_ID id_reg;
-
+ INDICE_DATO dato;
+
strcpy(name_f,efs->nombre);
strcat(name_f,".dat");
/* Obtenemos la posicion del registro en el .dat */
- reg_offset = emufs_idx_buscar_registro(efs, id_reg);
+ /*si existe, lo busco en el archivo de bloques*/
+ if (efs->indices != NULL) {
+ /* TODO : Verificar donde esta el indice primario */
+ dato = efs->indices->existe_entrada(efs->indices, clave);
+ reg_offset = dato.bloque;
+ id_reg = dato.id;
+ } else {
+ /* TODO ID de donde lo puedo sacar :-) , lo cargo en CLAVE ? */
+ reg_offset = emufs_idx_buscar_registro(efs, id_reg);
+ }
if (reg_offset == EMUFS_NOT_FOUND) {
PERR("Registro no encontrado");
*err = EMUFS_NOT_FOUND;
/* Grabar un registro en un archivo del Tipo 2. */
EMUFS_REG_ID emufs_tipo2_grabar_registro(EMUFS *efs, void *ptr, EMUFS_REG_SIZE reg_size, int* err)
{
+ INDICE_DATO idx_data;
EMUFS_REG_ID id_reg;
EMUFS_FREE freespace;
EMUFS_OFFSET wrt_offset,reg_offset;
/* Finalmente, actualizamos el indice de registros (offsets) */
emufs_idx_agregar(efs,id_reg,reg_offset);
+ idx_data.id = id_reg;
+ idx_data.bloque = reg_offset;
+ emufs_indice_agregar(efs->indices, (char *)ptr, idx_data);
return id_reg;
}