diff options
-rw-r--r-- | include/sqfs/meta_writer.h | 26 | ||||
-rw-r--r-- | lib/sqfs/meta_writer.c | 14 | ||||
-rw-r--r-- | lib/sqfs/write_table.c | 2 | ||||
-rw-r--r-- | lib/sqfshelper/serialize_fstree.c | 5 | ||||
-rw-r--r-- | lib/sqfshelper/write_xattr.c | 2 |
5 files changed, 35 insertions, 14 deletions
diff --git a/include/sqfs/meta_writer.h b/include/sqfs/meta_writer.h index c1b2383..4351f70 100644 --- a/include/sqfs/meta_writer.h +++ b/include/sqfs/meta_writer.h @@ -46,6 +46,23 @@ * compressing the blocks and pre-pending a header. */ +/** + * @enum E_SQFS_META_WRITER_FLAGS + * + * @brief Possible flags for @ref sqfs_meta_writer_create. + */ +typedef enum { + /** + * @brief If set, keep finished blocks in memory. + * + * To write them to disk, explicitly call + * @ref sqfs_meta_write_write_to_file. + */ + SQFS_META_WRITER_KEEP_IN_MEMORY = 0x01, + + SQFS_META_WRITER_ALL_FLAGS = 0x01, +} E_SQFS_META_WRITER_FLAGS; + #ifdef __cplusplus extern "C" { #endif @@ -61,15 +78,14 @@ extern "C" { * * @param file An output file to write the data to. * @param cmp A compressor to use. - * @param keep_in_memory Set to true to store the compressed blocks - * internally until they are explicilty told - * to write them to disk. + * @param flags A combination of @ref E_SQFS_META_WRITER_FLAGS. * - * @return A pointer to a meta writer on success, NULL on allocation failure. + * @return A pointer to a meta writer on success, NULL on allocation failure + * or if an unknown flag was set. */ SQFS_API sqfs_meta_writer_t *sqfs_meta_writer_create(sqfs_file_t *file, sqfs_compressor_t *cmp, - bool keep_in_mem); + int flags); /** * @brief Destroy a meta data writer and free all memory used by it. diff --git a/lib/sqfs/meta_writer.c b/lib/sqfs/meta_writer.c index 29fa183..4dd87a5 100644 --- a/lib/sqfs/meta_writer.c +++ b/lib/sqfs/meta_writer.c @@ -41,7 +41,7 @@ struct sqfs_meta_writer_t { /* The raw data chunk that data is appended to */ uint8_t data[SQFS_META_BLOCK_SIZE]; - bool keep_in_mem; + int flags; meta_block_t *list; meta_block_t *list_end; }; @@ -56,16 +56,20 @@ static int write_block(sqfs_file_t *file, meta_block_t *outblk) sqfs_meta_writer_t *sqfs_meta_writer_create(sqfs_file_t *file, sqfs_compressor_t *cmp, - bool keep_in_mem) + int flags) { - sqfs_meta_writer_t *m = calloc(1, sizeof(*m)); + sqfs_meta_writer_t *m; + if (flags & ~SQFS_META_WRITER_ALL_FLAGS) + return NULL; + + m = calloc(1, sizeof(*m)); if (m == NULL) return NULL; m->cmp = cmp; m->file = file; - m->keep_in_mem = keep_in_mem; + m->flags = flags; return m; } @@ -113,7 +117,7 @@ int sqfs_meta_writer_flush(sqfs_meta_writer_t *m) ret = 0; - if (m->keep_in_mem) { + if (m->flags & SQFS_META_WRITER_KEEP_IN_MEMORY) { if (m->list == NULL) { m->list = outblk; } else { diff --git a/lib/sqfs/write_table.c b/lib/sqfs/write_table.c index 3c718ea..bef576d 100644 --- a/lib/sqfs/write_table.c +++ b/lib/sqfs/write_table.c @@ -36,7 +36,7 @@ int sqfs_write_table(sqfs_file_t *file, sqfs_compressor_t *cmp, return SQFS_ERROR_ALLOC; /* Write actual data */ - m = sqfs_meta_writer_create(file, cmp, false); + m = sqfs_meta_writer_create(file, cmp, 0); if (m == NULL) { ret = SQFS_ERROR_ALLOC; goto out_idx; diff --git a/lib/sqfshelper/serialize_fstree.c b/lib/sqfshelper/serialize_fstree.c index 1953e8d..78f7d13 100644 --- a/lib/sqfshelper/serialize_fstree.c +++ b/lib/sqfshelper/serialize_fstree.c @@ -52,11 +52,12 @@ int sqfs_serialize_fstree(sqfs_file_t *file, sqfs_super_t *super, fstree_t *fs, int ret = -1; size_t i; - im = sqfs_meta_writer_create(file, cmp, false); + im = sqfs_meta_writer_create(file, cmp, 0); if (im == NULL) return -1; - dm = sqfs_meta_writer_create(file, cmp, true); + dm = sqfs_meta_writer_create(file, cmp, + SQFS_META_WRITER_KEEP_IN_MEMORY); if (dm == NULL) goto out_im; diff --git a/lib/sqfshelper/write_xattr.c b/lib/sqfshelper/write_xattr.c index 8103e29..8faa9ff 100644 --- a/lib/sqfshelper/write_xattr.c +++ b/lib/sqfshelper/write_xattr.c @@ -185,7 +185,7 @@ int write_xattr(sqfs_file_t *file, fstree_t *fs, sqfs_super_t *super, if (ool_locations == NULL) return -1; - mw = sqfs_meta_writer_create(file, cmp, false); + mw = sqfs_meta_writer_create(file, cmp, 0); if (mw == NULL) goto fail_ool; |