summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2019-07-15 14:44:44 +0200
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2019-07-15 14:47:03 +0200
commit14a925f6da442ecade7df75eb46a6edb9a1499af (patch)
treed63d56ec17e1d8bcbf310273f199f4891718a6b5 /include
parent1b35319762cd83982dacbe96eccf07fd00d7858a (diff)
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 <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'include')
-rw-r--r--include/data_writer.h27
1 files changed, 24 insertions, 3 deletions
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 */