diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sqfs/blk_proc/process_block.c | 3 | ||||
-rw-r--r-- | lib/sqfs/blk_proc/pthread.c | 7 | ||||
-rw-r--r-- | lib/sqfs/blk_proc/serial.c | 14 | ||||
-rw-r--r-- | lib/sqfshelper/data_writer.c | 2 |
4 files changed, 19 insertions, 7 deletions
diff --git a/lib/sqfs/blk_proc/process_block.c b/lib/sqfs/blk_proc/process_block.c index 0747bc5..5d1fa58 100644 --- a/lib/sqfs/blk_proc/process_block.c +++ b/lib/sqfs/blk_proc/process_block.c @@ -15,8 +15,7 @@ int sqfs_block_process(sqfs_block_t *block, sqfs_compressor_t *cmp, { ssize_t ret; - if (!(block->flags & SQFS_BLK_DONT_CHECKSUM)) - block->checksum = crc32(0, block->data, block->size); + block->checksum = crc32(0, block->data, block->size); if (!(block->flags & SQFS_BLK_DONT_COMPRESS)) { ret = cmp->do_block(cmp, block->data, block->size, diff --git a/lib/sqfs/blk_proc/pthread.c b/lib/sqfs/blk_proc/pthread.c index a9cffd0..f1874c0 100644 --- a/lib/sqfs/blk_proc/pthread.c +++ b/lib/sqfs/blk_proc/pthread.c @@ -193,12 +193,15 @@ int sqfs_block_processor_enqueue(sqfs_block_processor_t *proc, { sqfs_block_t *queue = NULL, *it, *prev; + if (block->flags & ~SQFS_BLK_USER_SETTABLE_FLAGS) + return SQFS_ERROR_UNSUPPORTED; + block->sequence_number = proc->enqueue_id++; block->next = NULL; pthread_mutex_lock(&proc->mtx); - if ((block->flags & SQFS_BLK_DONT_COMPRESS) && - (block->flags & SQFS_BLK_DONT_CHECKSUM)) { + if (block->size == 0) { + block->checksum = 0; store_completed_block(proc, block); } else { while (proc->backlog > proc->max_backlog) diff --git a/lib/sqfs/blk_proc/serial.c b/lib/sqfs/blk_proc/serial.c index b6c17fb..b7bc545 100644 --- a/lib/sqfs/blk_proc/serial.c +++ b/lib/sqfs/blk_proc/serial.c @@ -51,8 +51,18 @@ int sqfs_block_processor_enqueue(sqfs_block_processor_t *proc, return proc->status; } - proc->status = sqfs_block_process(block, proc->cmp, - proc->scratch, proc->max_block_size); + if (block->flags & ~SQFS_BLK_USER_SETTABLE_FLAGS) { + proc->status = SQFS_ERROR_UNSUPPORTED; + return proc->status; + } + + if (block->size == 0) { + block->checksum = 0; + } else { + proc->status = sqfs_block_process(block, proc->cmp, + proc->scratch, + proc->max_block_size); + } block->next = NULL; return process_completed_blocks(proc, block); diff --git a/lib/sqfshelper/data_writer.c b/lib/sqfshelper/data_writer.c index f5e22f3..3163c4e 100644 --- a/lib/sqfshelper/data_writer.c +++ b/lib/sqfshelper/data_writer.c @@ -151,7 +151,7 @@ static int add_sentinel_block(data_writer_t *data, sqfs_inode_generic_t *inode, } blk->inode = inode; - blk->flags = SQFS_BLK_DONT_COMPRESS | SQFS_BLK_DONT_CHECKSUM | flags; + blk->flags = flags; return sqfs_block_processor_enqueue(data->proc, blk); } |