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);
-
/* El free esta al final de la funcion! */
bloque = (char*)malloc(emu->tam_bloque);
for (i=0; i<cant_bloques; i++) {
if (i == 0) {
/* Tengo que agregar el primer bloque en IDX */
- if ( emufs_idx_agregar(emu, ID_aux, num_bloque) != 0 ){
- free(bloque);
- return -1;
+ if ( emufs_idx_existe_id(emu,ID_aux) != 0){
+ emufs_idx_actualizar(emu,ID_aux,num_bloque);
+ } else {
+ if ( emufs_idx_agregar(emu, ID_aux, num_bloque) != 0 ){
+ free(bloque);
+ return -1;
+ }
}
}
/* grabo el nuevo registro en el archivo de espacios libres */
+ if ( emu->tam_bloque > emu->tam_reg ) resto = emu->tam_reg;
if ( emufs_fsc_agregar(emu, num_bloque, emu->tam_bloque - resto - sizeof(EMUFS_REG_ID)) != 0 ) {
fclose(file);
free(bloque);
}
/*grabo el bloque en el archivo*/
+ if ( emu->tam_bloque < emu->tam_reg )
+ memset(bloque, 0, emu->tam_bloque);
if ( emufs_tipo3_grabar_bloque(emu, bloque, num_bloque) == -1 ){
free(bloque);
PERR("No se pudo grabar el bloque");
}
/*actualizo archivo .fsc*/
- fs = emufs_fsc_get_fs(emu, num_bloque);
- if ( emufs_fsc_actualizar(emu, num_bloque, fs + emu->tam_reg + sizeof(EMUFS_REG_ID)) != 0 ) return -1;
-
+ if ( emu->tam_bloque < emu->tam_reg ) {
+ if ( emufs_fsc_actualizar(emu, num_bloque, emu->tam_bloque) != 0 ) return -1;
+ } else {
+ fs = emufs_fsc_get_fs(emu, num_bloque);
+ if ( emufs_fsc_actualizar(emu, num_bloque, fs + emu->tam_reg + sizeof(EMUFS_REG_ID)) != 0 ) return -1;
+ }
/*actualizo archivo .did*/
if ( emufs_did_agregar(emu, ID) != 0 ) return -1;