diff options
-rw-r--r-- | lib/sqfshelper/data_writer.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/lib/sqfshelper/data_writer.c b/lib/sqfshelper/data_writer.c index 137fe06..3a27e06 100644 --- a/lib/sqfshelper/data_writer.c +++ b/lib/sqfshelper/data_writer.c @@ -153,13 +153,12 @@ static int block_callback(void *user, sqfs_block_t *blk) } else { fi->block_size[blk->index] = htole32(out); - if (store_block_location(data, offset, out, - blk->checksum)) - return -1; - data->stats.blocks_written += 1; } + if (store_block_location(data, offset, out, blk->checksum)) + return -1; + if (data->file->write_at(data->file, offset, blk->data, blk->size)) { return -1; @@ -175,10 +174,17 @@ static int block_callback(void *user, sqfs_block_t *blk) fi->startblock = data->blocks[start].offset; - if (start + count < data->file_start) { - data->num_blocks = data->file_start; + if (start < data->file_start) { + offset = start + count; - data->stats.duplicate_blocks += count; + if (offset >= data->file_start) { + data->num_blocks = offset; + data->stats.duplicate_blocks += + offset - data->num_blocks; + } else { + data->num_blocks = data->file_start; + data->stats.duplicate_blocks += count; + } if (data->file->truncate(data->file, data->start)) { perror("truncating squashfs image after " |