aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqfs/data_writer/block.c31
-rw-r--r--lib/sqfs/data_writer/common.c31
-rw-r--r--lib/sqfs/data_writer/internal.h10
-rw-r--r--lib/sqfs/data_writer/pthread.c7
4 files changed, 39 insertions, 40 deletions
diff --git a/lib/sqfs/data_writer/block.c b/lib/sqfs/data_writer/block.c
index 13c62a2..9396e4a 100644
--- a/lib/sqfs/data_writer/block.c
+++ b/lib/sqfs/data_writer/block.c
@@ -170,3 +170,34 @@ int process_completed_block(sqfs_data_writer_t *proc, sqfs_block_t *blk)
return 0;
}
+
+int data_writer_do_block(sqfs_block_t *block, sqfs_compressor_t *cmp,
+ sqfs_u8 *scratch, size_t scratch_size)
+{
+ ssize_t ret;
+
+ if (block->size == 0) {
+ block->checksum = 0;
+ return 0;
+ }
+
+ block->checksum = crc32(0, block->data, block->size);
+
+ if (block->flags & SQFS_BLK_IS_FRAGMENT)
+ return 0;
+
+ if (!(block->flags & SQFS_BLK_DONT_COMPRESS)) {
+ ret = cmp->do_block(cmp, block->data, block->size,
+ scratch, scratch_size);
+ if (ret < 0)
+ return ret;
+
+ if (ret > 0) {
+ memcpy(block->data, scratch, ret);
+ block->size = ret;
+ block->flags |= SQFS_BLK_IS_COMPRESSED;
+ }
+ }
+
+ return 0;
+}
diff --git a/lib/sqfs/data_writer/common.c b/lib/sqfs/data_writer/common.c
index a19eb6d..5fe70ac 100644
--- a/lib/sqfs/data_writer/common.c
+++ b/lib/sqfs/data_writer/common.c
@@ -98,37 +98,6 @@ sqfs_block_t *data_writer_next_work_item(sqfs_data_writer_t *proc)
return blk;
}
-int data_writer_do_block(sqfs_block_t *block, sqfs_compressor_t *cmp,
- sqfs_u8 *scratch, size_t scratch_size)
-{
- ssize_t ret;
-
- if (block->size == 0) {
- block->checksum = 0;
- return 0;
- }
-
- block->checksum = crc32(0, block->data, block->size);
-
- if (block->flags & SQFS_BLK_IS_FRAGMENT)
- return 0;
-
- if (!(block->flags & SQFS_BLK_DONT_COMPRESS)) {
- ret = cmp->do_block(cmp, block->data, block->size,
- scratch, scratch_size);
- if (ret < 0)
- return ret;
-
- if (ret > 0) {
- memcpy(block->data, scratch, ret);
- block->size = ret;
- block->flags |= SQFS_BLK_IS_COMPRESSED;
- }
- }
-
- return 0;
-}
-
int sqfs_data_writer_write_fragment_table(sqfs_data_writer_t *proc,
sqfs_super_t *super)
{
diff --git a/lib/sqfs/data_writer/internal.h b/lib/sqfs/data_writer/internal.h
index 7af6ab4..fab6c50 100644
--- a/lib/sqfs/data_writer/internal.h
+++ b/lib/sqfs/data_writer/internal.h
@@ -45,15 +45,7 @@ typedef struct {
sqfs_u64 hash;
} frag_info_t;
-
-#ifdef WITH_PTHREAD
-typedef struct {
- sqfs_data_writer_t *shared;
- sqfs_compressor_t *cmp;
- pthread_t thread;
- sqfs_u8 scratch[];
-} compress_worker_t;
-#endif
+typedef struct compress_worker_t compress_worker_t;
struct sqfs_data_writer_t {
/* synchronization primitives */
diff --git a/lib/sqfs/data_writer/pthread.c b/lib/sqfs/data_writer/pthread.c
index 915ea2a..1830d07 100644
--- a/lib/sqfs/data_writer/pthread.c
+++ b/lib/sqfs/data_writer/pthread.c
@@ -7,6 +7,13 @@
#define SQFS_BUILDING_DLL
#include "internal.h"
+struct compress_worker_t {
+ sqfs_data_writer_t *shared;
+ sqfs_compressor_t *cmp;
+ pthread_t thread;
+ sqfs_u8 scratch[];
+};
+
static void *worker_proc(void *arg)
{
compress_worker_t *worker = arg;