diff options
| author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2021-06-07 11:26:27 +0200 | 
|---|---|---|
| committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2021-06-07 14:30:29 +0200 | 
| commit | 85d88bcdc74d6a092a2932ff6b80ac455556f0ce (patch) | |
| tree | 23a774e6a59a5074d9b4154c510b1119108778c9 /lib | |
| parent | b3efb637c8e1dc5cbb557e90988b5537cc6aff61 (diff) | |
libsquashfs: fix block alignment if requested
1) If the block alignment flag is set, the padding bytes must be
   inserted _before_ recording the start position, otherwise the
   resulting image is not readable.
2) Also perform alignment if the flag is set on a fragment block.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqfs/block_writer.c | 16 | 
1 files changed, 10 insertions, 6 deletions
| diff --git a/lib/sqfs/block_writer.c b/lib/sqfs/block_writer.c index 17d045f..69a467a 100644 --- a/lib/sqfs/block_writer.c +++ b/lib/sqfs/block_writer.c @@ -187,15 +187,17 @@ static int write_data_block(sqfs_block_writer_t *base, void *user,  	int err;  	(void)user; -	if (flags & SQFS_BLK_FIRST_BLOCK) { -		wr->start = wr->file->get_size(wr->file); -		wr->file_start = wr->num_blocks; - +	if (flags & (SQFS_BLK_FIRST_BLOCK | SQFS_BLK_FRAGMENT_BLOCK)) {  		if (flags & SQFS_BLK_ALIGN) {  			err = align_file(wr);  			if (err)  				return err;  		} + +		if (flags & SQFS_BLK_FIRST_BLOCK) { +			wr->start = wr->file->get_size(wr->file); +			wr->file_start = wr->num_blocks; +		}  	}  	offset = wr->file->get_size(wr->file); @@ -217,13 +219,15 @@ static int write_data_block(sqfs_block_writer_t *base, void *user,  		wr->blocks_written = wr->num_blocks;  	} -	if (flags & SQFS_BLK_LAST_BLOCK) { -		if (flags & SQFS_BLK_ALIGN) { +	if (flags & SQFS_BLK_ALIGN) { +		if (flags & (SQFS_BLK_LAST_BLOCK | SQFS_BLK_FRAGMENT_BLOCK)) {  			err = align_file(wr);  			if (err)  				return err;  		} +	} +	if (flags & SQFS_BLK_LAST_BLOCK) {  		count = wr->num_blocks - wr->file_start;  		if (count == 0) { | 
