diff options
Diffstat (limited to 'lib/sqfs')
-rw-r--r-- | lib/sqfs/dir_writer.c | 26 | ||||
-rw-r--r-- | lib/sqfs/meta_writer.c | 27 | ||||
-rw-r--r-- | lib/sqfs/write_inode.c | 41 | ||||
-rw-r--r-- | lib/sqfs/write_table.c | 14 |
4 files changed, 59 insertions, 49 deletions
diff --git a/lib/sqfs/dir_writer.c b/lib/sqfs/dir_writer.c index 3ef3bc7..2fb655a 100644 --- a/lib/sqfs/dir_writer.c +++ b/lib/sqfs/dir_writer.c @@ -43,7 +43,7 @@ struct sqfs_dir_writer_t { uint64_t dir_ref; size_t dir_size; size_t idx_size; - meta_writer_t *dm; + sqfs_meta_writer_t *dm; }; static int get_type(mode_t mode) @@ -85,7 +85,7 @@ static void writer_reset(sqfs_dir_writer_t *writer) writer->idx_size = 0; } -sqfs_dir_writer_t *sqfs_dir_writer_create(meta_writer_t *dm) +sqfs_dir_writer_t *sqfs_dir_writer_create(sqfs_meta_writer_t *dm) { sqfs_dir_writer_t *writer = calloc(1, sizeof(*writer)); @@ -111,7 +111,7 @@ int sqfs_dir_writer_begin(sqfs_dir_writer_t *writer) writer_reset(writer); - meta_writer_get_position(writer->dm, &block, &offset); + sqfs_meta_writer_get_position(writer->dm, &block, &offset); writer->dir_ref = (block << 16) | offset; return 0; } @@ -185,7 +185,7 @@ static int add_header(sqfs_dir_writer_t *writer, size_t count, hdr.start_block = htole32(ref->inode_ref >> 16); hdr.inode_number = htole32(ref->inode_num); - if (meta_writer_append(writer->dm, &hdr, sizeof(hdr))) + if (sqfs_meta_writer_append(writer->dm, &hdr, sizeof(hdr))) return -1; idx = calloc(1, sizeof(*idx)); @@ -220,7 +220,7 @@ int sqfs_dir_writer_end(sqfs_dir_writer_t *writer) uint64_t block; for (it = writer->list; it != NULL; ) { - meta_writer_get_position(writer->dm, &block, &offset); + sqfs_meta_writer_get_position(writer->dm, &block, &offset); count = get_conseq_entry_count(offset, it); if (add_header(writer, count, it, block)) @@ -237,11 +237,15 @@ int sqfs_dir_writer_end(sqfs_dir_writer_t *writer) diff_u16 = (uint16_t *)&ent.inode_diff; *diff_u16 = htole16(*diff_u16); - if (meta_writer_append(writer->dm, &ent, sizeof(ent))) + if (sqfs_meta_writer_append(writer->dm, &ent, + sizeof(ent))) { return -1; + } - if (meta_writer_append(writer->dm, it->name, it->name_len)) + if (sqfs_meta_writer_append(writer->dm, it->name, + it->name_len)) { return -1; + } it = it->next; } @@ -266,7 +270,7 @@ size_t sqfs_dir_writer_get_index_size(sqfs_dir_writer_t *writer) } int sqfs_dir_writer_write_index(sqfs_dir_writer_t *writer, - meta_writer_t *im) + sqfs_meta_writer_t *im) { sqfs_dir_index_t ent; index_ent_t *idx; @@ -276,11 +280,13 @@ int sqfs_dir_writer_write_index(sqfs_dir_writer_t *writer, ent.index = htole32(idx->index); ent.size = htole32(idx->ent->name_len - 1); - if (meta_writer_append(im, &ent, sizeof(ent))) + if (sqfs_meta_writer_append(im, &ent, sizeof(ent))) return -1; - if (meta_writer_append(im, idx->ent->name, idx->ent->name_len)) + if (sqfs_meta_writer_append(im, idx->ent->name, + idx->ent->name_len)) { return -1; + } } return 0; diff --git a/lib/sqfs/meta_writer.c b/lib/sqfs/meta_writer.c index 1f7825a..c85a12e 100644 --- a/lib/sqfs/meta_writer.c +++ b/lib/sqfs/meta_writer.c @@ -22,7 +22,7 @@ typedef struct meta_block_t { uint8_t data[SQFS_META_BLOCK_SIZE + 2]; } meta_block_t; -struct meta_writer_t { +struct sqfs_meta_writer_t { /* A byte offset into the uncompressed data of the current block */ size_t offset; @@ -51,9 +51,10 @@ static int write_block(int fd, meta_block_t *outblk) outblk->data, count + 2); } -meta_writer_t *meta_writer_create(int fd, compressor_t *cmp, bool keep_in_mem) +sqfs_meta_writer_t *sqfs_meta_writer_create(int fd, compressor_t *cmp, + bool keep_in_mem) { - meta_writer_t *m = calloc(1, sizeof(*m)); + sqfs_meta_writer_t *m = calloc(1, sizeof(*m)); if (m == NULL) { perror("creating meta data writer"); @@ -66,7 +67,7 @@ meta_writer_t *meta_writer_create(int fd, compressor_t *cmp, bool keep_in_mem) return m; } -void meta_writer_destroy(meta_writer_t *m) +void sqfs_meta_writer_destroy(sqfs_meta_writer_t *m) { meta_block_t *blk; @@ -79,7 +80,7 @@ void meta_writer_destroy(meta_writer_t *m) free(m); } -int meta_writer_flush(meta_writer_t *m) +int sqfs_meta_writer_flush(sqfs_meta_writer_t *m) { meta_block_t *outblk; size_t count; @@ -129,7 +130,8 @@ int meta_writer_flush(meta_writer_t *m) return ret; } -int meta_writer_append(meta_writer_t *m, const void *data, size_t size) +int sqfs_meta_writer_append(sqfs_meta_writer_t *m, const void *data, + size_t size) { size_t diff; @@ -137,7 +139,7 @@ int meta_writer_append(meta_writer_t *m, const void *data, size_t size) diff = sizeof(m->data) - m->offset; if (diff == 0) { - if (meta_writer_flush(m)) + if (sqfs_meta_writer_flush(m)) return -1; diff = sizeof(m->data); } @@ -152,25 +154,26 @@ int meta_writer_append(meta_writer_t *m, const void *data, size_t size) } if (m->offset == sizeof(m->data)) - return meta_writer_flush(m); + return sqfs_meta_writer_flush(m); return 0; } -void meta_writer_get_position(const meta_writer_t *m, uint64_t *block_start, - uint32_t *offset) +void sqfs_meta_writer_get_position(const sqfs_meta_writer_t *m, + uint64_t *block_start, + uint32_t *offset) { *block_start = m->block_offset; *offset = m->offset; } -void meta_writer_reset(meta_writer_t *m) +void sqfs_meta_writer_reset(sqfs_meta_writer_t *m) { m->block_offset = 0; m->offset = 0; } -int meta_write_write_to_file(meta_writer_t *m) +int sqfs_meta_write_write_to_file(sqfs_meta_writer_t *m) { meta_block_t *blk; diff --git a/lib/sqfs/write_inode.c b/lib/sqfs/write_inode.c index 258f516..408e428 100644 --- a/lib/sqfs/write_inode.c +++ b/lib/sqfs/write_inode.c @@ -8,7 +8,7 @@ #include "sqfs/inode.h" -static int write_block_sizes(meta_writer_t *ir, sqfs_inode_generic_t *n) +static int write_block_sizes(sqfs_meta_writer_t *ir, sqfs_inode_generic_t *n) { uint32_t sizes[n->num_file_blocks]; size_t i; @@ -16,11 +16,12 @@ static int write_block_sizes(meta_writer_t *ir, sqfs_inode_generic_t *n) for (i = 0; i < n->num_file_blocks; ++i) sizes[i] = htole32(n->block_sizes[i]); - return meta_writer_append(ir, sizes, - sizeof(uint32_t) * n->num_file_blocks); + return sqfs_meta_writer_append(ir, sizes, + sizeof(uint32_t) * n->num_file_blocks); } -int meta_writer_write_inode(meta_writer_t *ir, sqfs_inode_generic_t *n) +int sqfs_meta_writer_write_inode(sqfs_meta_writer_t *ir, + sqfs_inode_generic_t *n) { sqfs_inode_t base; @@ -31,7 +32,7 @@ int meta_writer_write_inode(meta_writer_t *ir, sqfs_inode_generic_t *n) base.mod_time = htole32(n->base.mod_time); base.inode_number = htole32(n->base.inode_number); - if (meta_writer_append(ir, &base, sizeof(base))) + if (sqfs_meta_writer_append(ir, &base, sizeof(base))) return -1; switch (n->base.type) { @@ -43,7 +44,7 @@ int meta_writer_write_inode(meta_writer_t *ir, sqfs_inode_generic_t *n) .offset = htole16(n->data.dir.offset), .parent_inode = htole32(n->data.dir.parent_inode), }; - return meta_writer_append(ir, &dir, sizeof(dir)); + return sqfs_meta_writer_append(ir, &dir, sizeof(dir)); } case SQFS_INODE_FILE: { sqfs_inode_file_t file = { @@ -53,7 +54,7 @@ int meta_writer_write_inode(meta_writer_t *ir, sqfs_inode_generic_t *n) htole32(n->data.file.fragment_offset), .file_size = htole32(n->data.file.file_size), }; - if (meta_writer_append(ir, &file, sizeof(file))) + if (sqfs_meta_writer_append(ir, &file, sizeof(file))) return -1; return write_block_sizes(ir, n); } @@ -62,10 +63,10 @@ int meta_writer_write_inode(meta_writer_t *ir, sqfs_inode_generic_t *n) .nlink = htole32(n->data.slink.nlink), .target_size = htole32(n->data.slink.target_size), }; - if (meta_writer_append(ir, &slink, sizeof(slink))) + if (sqfs_meta_writer_append(ir, &slink, sizeof(slink))) return -1; - return meta_writer_append(ir, n->slink_target, - n->data.slink.target_size); + return sqfs_meta_writer_append(ir, n->slink_target, + n->data.slink.target_size); } case SQFS_INODE_BDEV: case SQFS_INODE_CDEV: { @@ -73,14 +74,14 @@ int meta_writer_write_inode(meta_writer_t *ir, sqfs_inode_generic_t *n) .nlink = htole32(n->data.dev.nlink), .devno = htole32(n->data.dev.devno), }; - return meta_writer_append(ir, &dev, sizeof(dev)); + return sqfs_meta_writer_append(ir, &dev, sizeof(dev)); } case SQFS_INODE_FIFO: case SQFS_INODE_SOCKET: { sqfs_inode_ipc_t ipc = { .nlink = htole32(n->data.ipc.nlink), }; - return meta_writer_append(ir, &ipc, sizeof(ipc)); + return sqfs_meta_writer_append(ir, &ipc, sizeof(ipc)); } case SQFS_INODE_EXT_DIR: { sqfs_inode_dir_ext_t dir = { @@ -92,7 +93,7 @@ int meta_writer_write_inode(meta_writer_t *ir, sqfs_inode_generic_t *n) .offset = htole16(n->data.dir_ext.offset), .xattr_idx = htole32(n->data.dir_ext.xattr_idx), }; - return meta_writer_append(ir, &dir, sizeof(dir)); + return sqfs_meta_writer_append(ir, &dir, sizeof(dir)); } case SQFS_INODE_EXT_FILE: { sqfs_inode_file_ext_t file = { @@ -105,7 +106,7 @@ int meta_writer_write_inode(meta_writer_t *ir, sqfs_inode_generic_t *n) htole32(n->data.file_ext.fragment_offset), .xattr_idx = htole32(n->data.file_ext.xattr_idx), }; - if (meta_writer_append(ir, &file, sizeof(file))) + if (sqfs_meta_writer_append(ir, &file, sizeof(file))) return -1; return write_block_sizes(ir, n); } @@ -116,13 +117,13 @@ int meta_writer_write_inode(meta_writer_t *ir, sqfs_inode_generic_t *n) }; uint32_t xattr = htole32(n->data.slink_ext.xattr_idx); - if (meta_writer_append(ir, &slink, sizeof(slink))) + if (sqfs_meta_writer_append(ir, &slink, sizeof(slink))) return -1; - if (meta_writer_append(ir, n->slink_target, - n->data.slink_ext.target_size)) { + if (sqfs_meta_writer_append(ir, n->slink_target, + n->data.slink_ext.target_size)) { return -1; } - return meta_writer_append(ir, &xattr, sizeof(xattr)); + return sqfs_meta_writer_append(ir, &xattr, sizeof(xattr)); } case SQFS_INODE_EXT_BDEV: case SQFS_INODE_EXT_CDEV: { @@ -131,7 +132,7 @@ int meta_writer_write_inode(meta_writer_t *ir, sqfs_inode_generic_t *n) .devno = htole32(n->data.dev_ext.devno), .xattr_idx = htole32(n->data.dev_ext.xattr_idx), }; - return meta_writer_append(ir, &dev, sizeof(dev)); + return sqfs_meta_writer_append(ir, &dev, sizeof(dev)); } case SQFS_INODE_EXT_FIFO: case SQFS_INODE_EXT_SOCKET: { @@ -139,7 +140,7 @@ int meta_writer_write_inode(meta_writer_t *ir, sqfs_inode_generic_t *n) .nlink = htole32(n->data.ipc_ext.nlink), .xattr_idx = htole32(n->data.ipc_ext.xattr_idx), }; - return meta_writer_append(ir, &ipc, sizeof(ipc)); + return sqfs_meta_writer_append(ir, &ipc, sizeof(ipc)); } } diff --git a/lib/sqfs/write_table.c b/lib/sqfs/write_table.c index a2814a4..7c24087 100644 --- a/lib/sqfs/write_table.c +++ b/lib/sqfs/write_table.c @@ -19,7 +19,7 @@ int sqfs_write_table(int outfd, sqfs_super_t *super, compressor_t *cmp, { size_t block_count, list_size, diff, blkidx = 0; uint64_t block, *locations; - meta_writer_t *m; + sqfs_meta_writer_t *m; uint32_t offset; int ret = -1; @@ -35,29 +35,29 @@ int sqfs_write_table(int outfd, sqfs_super_t *super, compressor_t *cmp, } /* Write actual data */ - m = meta_writer_create(outfd, cmp, false); + m = sqfs_meta_writer_create(outfd, cmp, false); if (m == NULL) goto out_idx; while (table_size > 0) { - meta_writer_get_position(m, &block, &offset); + sqfs_meta_writer_get_position(m, &block, &offset); locations[blkidx++] = htole64(super->bytes_used + block); diff = SQFS_META_BLOCK_SIZE; if (diff > table_size) diff = table_size; - if (meta_writer_append(m, data, diff)) + if (sqfs_meta_writer_append(m, data, diff)) goto out; data = (const char *)data + diff; table_size -= diff; } - if (meta_writer_flush(m)) + if (sqfs_meta_writer_flush(m)) goto out; - meta_writer_get_position(m, &block, &offset); + sqfs_meta_writer_get_position(m, &block, &offset); super->bytes_used += block; /* write location list */ @@ -72,7 +72,7 @@ int sqfs_write_table(int outfd, sqfs_super_t *super, compressor_t *cmp, /* cleanup */ ret = 0; out: - meta_writer_destroy(m); + sqfs_meta_writer_destroy(m); out_idx: free(locations); return ret; |