diff options
Diffstat (limited to 'mkfs/block.c')
-rw-r--r-- | mkfs/block.c | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/mkfs/block.c b/mkfs/block.c index f023876..896cefc 100644 --- a/mkfs/block.c +++ b/mkfs/block.c @@ -82,19 +82,14 @@ static int flush_fragments(sqfs_info_t *info) return 0; } -static int process_file(sqfs_info_t *info, file_info_t *fi) +static int write_data_from_fd(sqfs_info_t *info, file_info_t *fi, int infd) { - int infd, ret, blk_idx = 0; uint64_t count = fi->size; + int blk_idx = 0; uint32_t out; + ssize_t ret; size_t diff; - infd = open(fi->input_file, O_RDONLY); - if (infd < 0) { - perror(fi->input_file); - return -1; - } - fi->startblock = info->super.bytes_used; while (count != 0) { @@ -110,7 +105,7 @@ static int process_file(sqfs_info_t *info, file_info_t *fi) if (diff < info->super.block_size) { if (info->frag_offset + diff > info->super.block_size) { if (flush_fragments(info)) - goto fail; + return -1; } fi->fragment_offset = info->frag_offset; @@ -122,7 +117,7 @@ static int process_file(sqfs_info_t *info, file_info_t *fi) } else { if (write_compressed(info, info->block, info->super.block_size, &out)) { - goto fail; + return -1; } fi->blocksizes[blk_idx++] = out; @@ -131,17 +126,29 @@ static int process_file(sqfs_info_t *info, file_info_t *fi) count -= diff; } - close(infd); return 0; -fail: - close(infd); - return -1; fail_read: fprintf(stderr, "read from %s: %s\n", fi->input_file, strerror(errno)); - goto fail; + return -1; fail_trunc: fprintf(stderr, "%s: truncated read\n", fi->input_file); - goto fail; + return -1; +} + +static int process_file(sqfs_info_t *info, file_info_t *fi) +{ + int ret, infd; + + infd = open(fi->input_file, O_RDONLY); + if (infd < 0) { + perror(fi->input_file); + return -1; + } + + ret = write_data_from_fd(info, fi, infd); + + close(infd); + return ret; } static void print_name(tree_node_t *n) |