summaryrefslogtreecommitdiff
path: root/lib/sqfs/data_writer/fileapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqfs/data_writer/fileapi.c')
-rw-r--r--lib/sqfs/data_writer/fileapi.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/sqfs/data_writer/fileapi.c b/lib/sqfs/data_writer/fileapi.c
index 2a5d02a..98bdf5c 100644
--- a/lib/sqfs/data_writer/fileapi.c
+++ b/lib/sqfs/data_writer/fileapi.c
@@ -56,7 +56,8 @@ static int flush_block(sqfs_data_writer_t *proc, sqfs_block_t *block)
return 0;
}
- if (block->size < proc->max_block_size) {
+ if (block->size < proc->max_block_size &&
+ !(block->flags & SQFS_BLK_DONT_FRAGMENT)) {
block->flags |= SQFS_BLK_IS_FRAGMENT;
} else {
proc->inode->num_file_blocks += 1;
@@ -124,9 +125,14 @@ int sqfs_data_writer_end_file(sqfs_data_writer_t *proc)
return test_and_set_status(proc, SQFS_ERROR_INTERNAL);
if (!(proc->blk_flags & SQFS_BLK_FIRST_BLOCK)) {
- err = add_sentinel_block(proc);
- if (err)
- return err;
+ if (proc->blk_current != NULL &&
+ (proc->blk_flags & SQFS_BLK_DONT_FRAGMENT)) {
+ proc->blk_flags |= SQFS_BLK_LAST_BLOCK;
+ } else {
+ err = add_sentinel_block(proc);
+ if (err)
+ return err;
+ }
}
if (proc->blk_current != NULL) {