diff options
| author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2020-02-22 23:38:23 +0100 | 
|---|---|---|
| committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2020-02-22 23:38:23 +0100 | 
| commit | 7350bebc4ceee0bf065e73f392edb725f8d0cd14 (patch) | |
| tree | 002dcaf28f184e473bd33117ff59a3626701c241 /tar | |
| parent | aecc6dc5a9971eb4f1309f0754b0f213347c4d11 (diff) | |
libcommon: stdin file: Fix size accounting for sparse files
The file has to report the "apparent size" for sparse files, but
internally work with the actual size in the tar ball.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'tar')
| -rw-r--r-- | tar/tar2sqfs.c | 21 | 
1 files changed, 4 insertions, 17 deletions
diff --git a/tar/tar2sqfs.c b/tar/tar2sqfs.c index f505f6b..69d445e 100644 --- a/tar/tar2sqfs.c +++ b/tar/tar2sqfs.c @@ -250,11 +250,9 @@ fail_arg:  static int write_file(tar_header_decoded_t *hdr, file_info_t *fi,  		      sqfs_u64 filesize)  { -	const sparse_map_t *it;  	sqfs_inode_generic_t *inode;  	size_t size, max_blk_count;  	sqfs_file_t *file; -	sqfs_u64 sum;  	int flags;  	int ret; @@ -278,21 +276,10 @@ static int write_file(tar_header_decoded_t *hdr, file_info_t *fi,  	inode->base.type = SQFS_INODE_FILE;  	fi->user_ptr = inode; -	if (hdr->sparse != NULL) { -		for (sum = 0, it = hdr->sparse; it != NULL; it = it->next) -			sum += it->count; - -		file = sqfs_get_stdin_file(input_file, hdr->sparse, sum); -		if (file == NULL) { -			perror("packing files"); -			return -1; -		} -	} else { -		file = sqfs_get_stdin_file(input_file, NULL, filesize); -		if (file == NULL) { -			perror("packing files"); -			return -1; -		} +	file = sqfs_get_stdin_file(input_file, hdr->sparse, filesize); +	if (file == NULL) { +		perror("packing files"); +		return -1;  	}  	flags = 0;  | 
