]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs/tipo1.c
* Se agregan compactar facturas y notas (notas no estoy seguro de tener
[z.facultad/75.06/emufs.git] / emufs / tipo1.c
index b10e9097e6c2603570f7338829c1086d5288353d..0c3f32dd2b55b1ca075b671e8ff0b4500efb428a 100644 (file)
@@ -467,7 +467,28 @@ void emufs_tipo1_compactar(EMUFS* efs)
                        free(reg);
                }
        }
-       /* TODO truncar */
+       free(reg_ids); /* libero lista de ids */
+
+       /* truncamos el archivo si hay bloques libres al final */
+       {
+               EMUFS_FREE fs; /* espacio libre en el bloque */
+               /* busco si hay algún bloque completo libre */
+               EMUFS_BLOCK_ID block_id = emufs_fsc_buscar_lugar(efs, efs->tam_bloque
+                               - sizeof(EMUFS_TIPO1_REG_HEADER), &fs);
+               /* si hay, el resto del archivo tiene que estar vacío */
+               if (block_id != EMUFS_NOT_FOUND) {
+                       long size = emufs_tipo1_header_size() /* cabecera del archivo */
+                               + block_id * efs->tam_bloque; /* mas los bloques compactos */
+                       char filename[255];
+
+                       /* trunca archivo de datos */
+                       strcpy(filename, efs->nombre);
+                       strcat(filename, ".dat");
+                       truncate(filename, size);
+                       /* trunca archivo de de espacio libre */
+                       emufs_fsc_truncate(efs, block_id);
+               }
+       }
 }
 
 EMUFS_BLOCK_ID emufs_tipo1_grabar_bloque(EMUFS *efs, void *block,