diff options
Diffstat (limited to 'mkfs/mkfs.c')
-rw-r--r-- | mkfs/mkfs.c | 93 |
1 files changed, 45 insertions, 48 deletions
diff --git a/mkfs/mkfs.c b/mkfs/mkfs.c index 50e2ce5..86172e3 100644 --- a/mkfs/mkfs.c +++ b/mkfs/mkfs.c @@ -2,16 +2,16 @@ #include "mkfs.h" #include "util.h" -static int padd_file(sqfs_info_t *info) +static int padd_file(int outfd, sqfs_super_t *super, options_t *opt) { - size_t padd_sz = info->super.bytes_used % info->opt.devblksz; + size_t padd_sz = super->bytes_used % opt->devblksz; uint8_t *buffer; ssize_t ret; if (padd_sz == 0) return 0; - padd_sz = info->opt.devblksz - padd_sz; + padd_sz = opt->devblksz - padd_sz; buffer = calloc(1, padd_sz); if (buffer == NULL) { @@ -19,7 +19,7 @@ static int padd_file(sqfs_info_t *info) return -1; } - ret = write_retry(info->outfd, buffer, padd_sz); + ret = write_retry(outfd, buffer, padd_sz); if (ret < 0) { perror("Error padding squashfs image to page size"); @@ -41,113 +41,110 @@ int main(int argc, char **argv) { int status = EXIT_FAILURE, ret; data_writer_t *data; - sqfs_info_t info; + sqfs_super_t super; + compressor_t *cmp; + id_table_t idtbl; + options_t opt; + fstree_t fs; + int outfd; - memset(&info, 0, sizeof(info)); + process_command_line(&opt, argc, argv); - process_command_line(&info.opt, argc, argv); - - if (sqfs_super_init(&info.super, info.opt.blksz, info.opt.def_mtime, - info.opt.compressor)) { + if (sqfs_super_init(&super, opt.blksz, opt.def_mtime, opt.compressor)) return EXIT_FAILURE; - } - if (id_table_init(&info.idtbl)) + if (id_table_init(&idtbl)) return EXIT_FAILURE; - info.outfd = open(info.opt.outfile, info.opt.outmode, 0644); - if (info.outfd < 0) { - perror(info.opt.outfile); + outfd = open(opt.outfile, opt.outmode, 0644); + if (outfd < 0) { + perror(opt.outfile); goto out_idtbl; } - if (sqfs_super_write(&info.super, info.outfd)) + if (sqfs_super_write(&super, outfd)) goto out_outfd; - if (fstree_init(&info.fs, info.opt.blksz, info.opt.def_mtime, - info.opt.def_mode, info.opt.def_uid, - info.opt.def_gid)) { + if (fstree_init(&fs, opt.blksz, opt.def_mtime, opt.def_mode, + opt.def_uid, opt.def_gid)) { goto out_outfd; } - if (info.opt.infile != NULL) { - if (fstree_from_file(&info.fs, info.opt.infile, info.opt.packdir)) + if (opt.infile != NULL) { + if (fstree_from_file(&fs, opt.infile, opt.packdir)) goto out_fstree; } else { - if (fstree_from_dir(&info.fs, info.opt.packdir)) + if (fstree_from_dir(&fs, opt.packdir)) goto out_fstree; } #ifdef WITH_SELINUX - if (info.opt.selinux != NULL) { - if (fstree_relabel_selinux(&info.fs, info.opt.selinux)) + if (opt.selinux != NULL) { + if (fstree_relabel_selinux(&fs, opt.selinux)) goto out_fstree; } #endif - fstree_xattr_deduplicate(&info.fs); + fstree_xattr_deduplicate(&fs); - fstree_sort(&info.fs); + fstree_sort(&fs); - if (fstree_gen_inode_table(&info.fs)) + if (fstree_gen_inode_table(&fs)) goto out_fstree; - info.super.inode_count = info.fs.inode_tbl_size - 2; + super.inode_count = fs.inode_tbl_size - 2; - info.cmp = compressor_create(info.super.compression_id, true, - info.super.block_size, - info.opt.comp_extra); - if (info.cmp == NULL) { + cmp = compressor_create(super.compression_id, true, super.block_size, + opt.comp_extra); + if (cmp == NULL) { fputs("Error creating compressor\n", stderr); goto out_outfd; } - ret = info.cmp->write_options(info.cmp, info.outfd); + ret = cmp->write_options(cmp, outfd); if (ret < 0) goto out_cmp; if (ret > 0) { - info.super.flags |= SQFS_FLAG_COMPRESSOR_OPTIONS; - info.super.bytes_used += ret; + super.flags |= SQFS_FLAG_COMPRESSOR_OPTIONS; + super.bytes_used += ret; } - data = data_writer_create(&info.super, info.cmp, info.outfd); + data = data_writer_create(&super, cmp, outfd); if (data == NULL) goto out_cmp; - if (write_data_to_image(data, &info)) + if (write_data_to_image(data, &fs, &opt)) goto out_data; - if (sqfs_serialize_fstree(info.outfd, &info.super, &info.fs, - info.cmp, &info.idtbl)) { + if (sqfs_serialize_fstree(outfd, &super, &fs, cmp, &idtbl)) goto out_data; - } if (data_writer_write_fragment_table(data)) goto out_data; - if (id_table_write(&info.idtbl, info.outfd, &info.super, info.cmp)) + if (id_table_write(&idtbl, outfd, &super, cmp)) goto out_data; - if (write_xattr(info.outfd, &info.fs, &info.super, info.cmp)) + if (write_xattr(outfd, &fs, &super, cmp)) goto out_data; - if (sqfs_super_write(&info.super, info.outfd)) + if (sqfs_super_write(&super, outfd)) goto out_data; - if (padd_file(&info)) + if (padd_file(outfd, &super, &opt)) goto out_data; status = EXIT_SUCCESS; out_data: data_writer_destroy(data); out_cmp: - info.cmp->destroy(info.cmp); + cmp->destroy(cmp); out_fstree: - fstree_cleanup(&info.fs); + fstree_cleanup(&fs); out_outfd: - close(info.outfd); + close(outfd); out_idtbl: - id_table_cleanup(&info.idtbl); + id_table_cleanup(&idtbl); return status; } |