diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-09-29 00:38:04 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-09-29 00:39:35 +0200 |
commit | 99f3eaecb4ad3c85d791361c8857e6ba2be8f9ea (patch) | |
tree | 08e8a2c854eca57f20f788fd929d86642e2fbc0e /lib | |
parent | 74a755290c6b000b1a793f09ce5b6ee6d4016eaf (diff) |
Bring back the don't fragment flag
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sqfs/data_writer/fileapi.c | 14 |
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) { |