From 14a925f6da442ecade7df75eb46a6edb9a1499af Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Mon, 15 Jul 2019 14:44:44 +0200 Subject: Add flags to data writer to micro manage behaviour The added flags allow controlling the following on a per file level: - forcing a file to be written uncompressed - forcing a file to not have a fragment, i.e. the last truncated block actually being written as a block - padding a file to be alligned to device block size The flags are not yet exposed to anything user controllable (such as command line flags). Signed-off-by: David Oberhollenzer --- include/data_writer.h | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'include') diff --git a/include/data_writer.h b/include/data_writer.h index 2ace899..a52b37f 100644 --- a/include/data_writer.h +++ b/include/data_writer.h @@ -9,6 +9,22 @@ typedef struct data_writer_t data_writer_t; +enum { + /* Don't generate fragments, always write the last block to disk as a + block, even if it is incomplete. */ + DW_DONT_FRAGMENT = 0x01, + + /* Intentionally write all blocks uncompressed. This implies + DW_DONT_FRAGMENT since sharing a fragment block with other files + would otherwise require the entire fragment block to be + uncompressed. */ + DW_DONT_COMPRESS = 0x03, + + /* Make sure the first block of a file is alligned to + device block size */ + DW_ALLIGN_DEVBLK = 0x04, +}; + /* Create a data writer. The pointer to the super block is kept internally and used to automatically update various counters when writing data. @@ -16,7 +32,7 @@ typedef struct data_writer_t data_writer_t; Returns NULL on failure and prints errors to stderr. */ data_writer_t *data_writer_create(sqfs_super_t *super, compressor_t *cmp, - int outfd); + int outfd, size_t devblksize); void data_writer_destroy(data_writer_t *data); @@ -46,18 +62,23 @@ int data_writer_flush_fragments(data_writer_t *data); Blocks or fragments that are all zero bytes automatically detected, not written out and the sparse file accounting updated accordingly. + The flags argument is a combination of DW_* flags. + Returns 0 on success, prints errors to stderr. */ -int write_data_from_fd(data_writer_t *data, file_info_t *fi, int infd); +int write_data_from_fd(data_writer_t *data, file_info_t *fi, int infd, + int flags); /* Does the same as write_data_from_fd but the input file is the condensed representation of a sparse file. The layout must be in order and non-overlapping. + The flags argument is a combination of DW_* flags. + Returns 0 on success, prints errors to stderr. */ int write_data_from_fd_condensed(data_writer_t *data, file_info_t *fi, - int infd, sparse_map_t *map); + int infd, sparse_map_t *map, int flags); #endif /* DATA_WRITER_H */ -- cgit v1.2.3