+
+void emufs_tipo3_compactar(EMUFS *emu)
+{
+ EMUFS_REG_ID *tmp, max_id;
+ EMUFS_BLOCK_ID block_id;
+ EMUFS_REG_SIZE size;
+ EMUFS_Estadisticas s;
+ char name[255];
+ char *reg;
+ int err=0, ID_aux, i,fs;
+
+ strcpy(name, emu->nombre);
+ strcat(name, ".dat");
+
+ /* si el bloque es mas chico que el registro no hace falta compactar */
+ /*if( emu->tam_reg-sizeof(EMUFS_REG_ID) > emu->tam_bloque ) return; */
+
+ tmp = emufs_idx_get(emu, &max_id);
+ if (tmp) free(tmp);
+ for( i=0; i<=max_id; i++){
+ /* si el id no existe paso al siguiente*/
+ if ( emufs_idx_existe_id(emu, i) != 0 ) continue;
+ reg = emufs_tipo3_leer_registro(emu, i, &size, &err);
+ if (err){
+ PERR("No se pudo leer el registro");
+ return;
+ }
+ emufs_tipo3_borrar_registro(emu, i);
+ ID_aux = emufs_tipo3_grabar_registro(emu, reg, emu->tam_reg, &err);
+ i++;
+ }
+ /*tengo que truncar el archivo*/
+ /*bloques_vacios = emufs_fsc_get_cant_bloques_vacios(emu)-1;
+ */
+ block_id = emufs_fsc_buscar_lugar(emu, emu->tam_bloque, &fs);
+ size = sizeof(EMUFS_Tipo)+sizeof(EMUFS_REG_SIZE)+sizeof(EMUFS_BLOCK_SIZE)+block_id*emu->tam_bloque;
+ if (truncate(name, size)!=0)
+ PERR("NO TRUNQUE NADA");
+ /*hay que truncar el fsc!!!*/
+ if(emu->tam_bloque<emu->tam_reg-sizeof(EMUFS_REG_ID)) block_id = block_id/2;
+ if (emufs_fsc_truncate(emu, block_id)!= 0)
+ PERR("NO TURNQUE EL FSC");
+ free(reg);
+}