+ if (cant_gaps > 1)
+ {
+ /* Comienzo leyendo un gap */
+ fseek(fscfile,0,SEEK_SET);
+ fread(®1,sizeof(EMUFS_FSC),1,fscfile);
+ destination = reg1.marker;
+ --cant_gaps;
+
+ while (cant_gaps > 0)
+ {
+ /* El source siempre sera el fin del anteultimo gap leido */
+ source = reg1.marker + reg1.freespace;
+ /* Leemos otro gap para calcular cuanto debemos mover */
+ fread(®2,sizeof(EMUFS_FSC),1,fscfile);
+ mustmove_bytes = reg2.marker - source;
+ /*printf("Para recompactar, must move: %lu bytes\n",mustmove_bytes);
+ printf("Will move from: %lu to %lu\n",source,destination);*/
+ emufs_tipo2_movedata(datfile,&source,&destination,mustmove_bytes);
+ /* Guardo el nuevo destino que es donde termino de mover */
+ destination = ftell(datfile);
+ /* El ultimo gap leido, pasa a ser el de referencia ahora */
+ reg1.marker = reg2.marker;
+ reg1.freespace = reg2.freespace;
+ --cant_gaps;
+ }
+
+ /* Realizo el movimiento del ultimo chunk de datos */
+ source = reg1.marker + reg1.freespace;
+ mustmove_bytes = datsize - source;
+ emufs_tipo2_movedata(datfile,&source,&destination,mustmove_bytes);
+ }
+
+ fclose(datfile);
+ fclose(fscfile);
+
+ /* Trunco el dat para que no quede el espacio vacio al final */
+ totalfsc = emufs_fsc_get_total_fs(efs);
+ truncate(name_fdat,datsize - totalfsc);
+ truncate(name_ffsc,0);
+
+ /* Recreo el Indice con los nuevos offsets */
+ emufs_tipo2_updateidx(efs);
+}