diff options
Diffstat (limited to 'lib/sqfs/block_processor/serial.c')
-rw-r--r-- | lib/sqfs/block_processor/serial.c | 63 |
1 files changed, 36 insertions, 27 deletions
diff --git a/lib/sqfs/block_processor/serial.c b/lib/sqfs/block_processor/serial.c index e44ce17..2e00198 100644 --- a/lib/sqfs/block_processor/serial.c +++ b/lib/sqfs/block_processor/serial.c @@ -7,6 +7,12 @@ #define SQFS_BUILDING_DLL #include "internal.h" +typedef struct { + sqfs_block_processor_t base; + int status; + sqfs_u8 scratch[]; +} serial_block_processor_t; + static void block_processor_destroy(sqfs_object_t *obj) { sqfs_block_processor_t *proc = (sqfs_block_processor_t *)obj; @@ -23,71 +29,74 @@ sqfs_block_processor_t *sqfs_block_processor_create(size_t max_block_size, sqfs_block_writer_t *wr, sqfs_frag_table_t *tbl) { - sqfs_block_processor_t *proc; + serial_block_processor_t *proc; (void)num_workers; (void)max_backlog; proc = alloc_flex(sizeof(*proc), 1, max_block_size); if (proc == NULL) return NULL; - proc->max_block_size = max_block_size; - proc->cmp = cmp; - proc->frag_tbl = tbl; - proc->wr = wr; - proc->stats.size = sizeof(proc->stats); + proc->base.max_block_size = max_block_size; + proc->base.cmp = cmp; + proc->base.frag_tbl = tbl; + proc->base.wr = wr; + proc->base.stats.size = sizeof(proc->base.stats); ((sqfs_object_t *)proc)->destroy = block_processor_destroy; - return proc; + return (sqfs_block_processor_t *)proc; } int append_to_work_queue(sqfs_block_processor_t *proc, sqfs_block_t *block) { + serial_block_processor_t *sproc = (serial_block_processor_t *)proc; sqfs_block_t *fragblk = NULL; - if (proc->status != 0) + if (sproc->status != 0) goto done; - proc->status = block_processor_do_block(block, proc->cmp, - proc->scratch, - proc->max_block_size); - if (proc->status != 0) + sproc->status = block_processor_do_block(block, proc->cmp, + sproc->scratch, + proc->max_block_size); + if (sproc->status != 0) goto done; if (block->flags & SQFS_BLK_IS_FRAGMENT) { - proc->status = process_completed_fragment(proc, block, - &fragblk); + sproc->status = process_completed_fragment(proc, block, + &fragblk); if (fragblk == NULL) goto done; free(block); block = fragblk; - proc->status = block_processor_do_block(block, proc->cmp, - proc->scratch, - proc->max_block_size); - if (proc->status != 0) + sproc->status = block_processor_do_block(block, proc->cmp, + sproc->scratch, + proc->max_block_size); + if (sproc->status != 0) goto done; } - proc->status = process_completed_block(proc, block); + sproc->status = process_completed_block(proc, block); done: free(block); - return proc->status; + return sproc->status; } int sqfs_block_processor_finish(sqfs_block_processor_t *proc) { - if (proc->frag_block == NULL || proc->status != 0) + serial_block_processor_t *sproc = (serial_block_processor_t *)proc; + + if (proc->frag_block == NULL || sproc->status != 0) goto out; - proc->status = block_processor_do_block(proc->frag_block, proc->cmp, - proc->scratch, - proc->max_block_size); - if (proc->status != 0) + sproc->status = block_processor_do_block(proc->frag_block, proc->cmp, + sproc->scratch, + proc->max_block_size); + if (sproc->status != 0) goto out; - proc->status = process_completed_block(proc, proc->frag_block); + sproc->status = process_completed_block(proc, proc->frag_block); out: free(proc->frag_block); proc->frag_block = NULL; - return proc->status; + return sproc->status; } |