cant_bloques = (emu->tam_reg / (emu->tam_bloque-sizeof(EMUFS_REG_ID))) + 1;
if ( emu->tam_reg+sizeof(EMUFS_REG_ID) == emu->tam_bloque )
cant_bloques = 1;
+
resto = emu->tam_bloque - sizeof(EMUFS_REG_ID);
- lugar = emu->tam_reg + sizeof(EMUFS_REG_ID);
- if ( emu->tam_bloque-sizeof(EMUFS_REG_ID) < emu->tam_reg )
- lugar = emu->tam_bloque;
- /* me devuelve el ID del bloque donde quepa un registro y el espacio libre en "fs"*/
- num_bloque = emufs_fsc_buscar_lugar(emu, lugar, &fs);
+
+
+
+ if ( cant_bloques == 1 )
+ /* me devuelve el ID del bloque donde quepa un registro y el espacio libre en "fs"*/
+ num_bloque = emufs_fsc_buscar_lugar(emu, emu->tam_reg+sizeof(EMUFS_REG_ID), &fs);
+ else
+ /* me devuelve el ID del bloque donde quepan n registros y el espacio libre en "fs"*/
+ num_bloque = emufs_fsc_buscar_n_lugares(emu, cant_bloques, emu->tam_bloque, &fs, err);
+
/*si no hay bloques con suficiente espacio creo un bloque nuevo */
- if (num_bloque == -1) {
+ if (num_bloque == EMUFS_NOT_FOUND) {
if ( (file = fopen(name_f,"a+"))==NULL ) return -1; /*ERROR*/
/*tengo que buscar un ID valido para el nuevo registro*/
ID_aux = emufs_idx_get_new_id(emu, err);
return -1;
}
}
-
+
/* grabo el nuevo registro en el archivo de espacios libres */
if ( emu->tam_bloque-sizeof(EMUFS_REG_ID) < emu->tam_reg )
new_fs = emu->tam_bloque - sizeof(EMUFS_REG_ID) - resto ;
/*tengo que buscar un ID valido para el nuevo registro*/
ID_aux = emufs_idx_get_new_id(emu, err);
for (i=0; i<cant_bloques; i++){
+ resto = emu->tam_bloque-sizeof(EMUFS_REG_ID);
/*cargo el bloque en "bloque"*/
if (!(bloque = emufs_tipo3_leer_bloque(emu, num_bloque+i, err))) {
/* TODO Manejo de errores */
if ( emu->tam_bloque-sizeof(EMUFS_REG_ID) < emu->tam_reg ){
/*Si el registro ocupa mas de un bloque (original) resto = emu->tam_bloque-sizeof(EMUFS_REG_ID)*/
resto += sizeof(EMUFS_REG_ID);
+ /*resto = emu->tam_reg - i*(emu->tam_bloque - sizeof(EMUFS_REG_ID)) + sizeof(EMUFS_REG_ID);*/
if ( cant_bloques-1 == i )
resto = emu->tam_reg - i*(emu->tam_bloque - sizeof(EMUFS_REG_ID))+sizeof(EMUFS_REG_ID);
- printf("fs-resto = %d\n", emu->tam_bloque-resto);
+ /*printf("fs-resto = %d\n", fs-resto);*/
if ( emufs_fsc_agregar(emu, num_bloque+i, fs-resto) !=0 ){
fclose(file);
if (bloque) free(bloque);