aboutsummaryrefslogtreecommitdiff
path: root/tar
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2020-02-22 23:38:23 +0100
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2020-02-22 23:38:23 +0100
commit7350bebc4ceee0bf065e73f392edb725f8d0cd14 (patch)
tree002dcaf28f184e473bd33117ff59a3626701c241 /tar
parentaecc6dc5a9971eb4f1309f0754b0f213347c4d11 (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.c21
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;