X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/94aef7aeac41c6c2bc364f9ce062cb4851a1ac7a..5c39a8b8061f2ae5c22a12e40d1b9f4ffea42c68:/emufs/tipo1.c diff --git a/emufs/tipo1.c b/emufs/tipo1.c index b10e909..0c3f32d 100644 --- a/emufs/tipo1.c +++ b/emufs/tipo1.c @@ -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,