diff options
Diffstat (limited to 'mkfs')
| -rw-r--r-- | mkfs/mkfs.c | 24 | 
1 files changed, 14 insertions, 10 deletions
| diff --git a/mkfs/mkfs.c b/mkfs/mkfs.c index e67b517..acb3202 100644 --- a/mkfs/mkfs.c +++ b/mkfs/mkfs.c @@ -32,6 +32,7 @@ static int pack_files(data_writer_t *data, fstree_t *fs, options_t *opt)  {  	sqfs_inode_generic_t *inode;  	size_t max_blk_count; +	uint64_t filesize;  	sqfs_file_t *file;  	file_info_t *fi;  	int ret; @@ -43,31 +44,34 @@ static int pack_files(data_writer_t *data, fstree_t *fs, options_t *opt)  		if (!opt->quiet)  			printf("packing %s\n", fi->input_file); -		max_blk_count = fi->size / fs->block_size; -		if (fi->size % fs->block_size) +		file = sqfs_open_file(fi->input_file, +				      SQFS_FILE_OPEN_READ_ONLY); +		if (file == NULL) { +			perror(fi->input_file); +			return -1; +		} + +		filesize = file->get_size(file); + +		max_blk_count = filesize / fs->block_size; +		if (filesize % fs->block_size)  			++max_blk_count;  		inode = alloc_flex(sizeof(*inode), sizeof(uint32_t),  				   max_blk_count);  		if (inode == NULL) {  			perror("creating file inode"); +			file->destroy(file);  			return -1;  		}  		inode->block_sizes = (uint32_t *)inode->extra;  		inode->base.type = SQFS_INODE_FILE; -		sqfs_inode_set_file_size(inode, fi->size); +		sqfs_inode_set_file_size(inode, filesize);  		sqfs_inode_set_frag_location(inode, 0xFFFFFFFF, 0xFFFFFFFF);  		fi->user_ptr = inode; -		file = sqfs_open_file(fi->input_file, -				      SQFS_FILE_OPEN_READ_ONLY); -		if (file == NULL) { -			perror(fi->input_file); -			return -1; -		} -  		ret = write_data_from_file(data, inode, file, 0);  		file->destroy(file); | 
