bool (*decode_header) (struct tar_sparse_file *);
bool (*scan_block) (struct tar_sparse_file *, enum sparse_scan_state,
void *);
- bool (*dump_region) (struct tar_sparse_file *, size_t);
- bool (*extract_region) (struct tar_sparse_file *, size_t);
+ bool (*dump_region) (struct tar_sparse_file *, idx_t);
+ bool (*extract_region) (struct tar_sparse_file *, idx_t);
};
struct tar_sparse_file
while (file->offset < offset)
{
- size_t size = (BLOCKSIZE < offset - file->offset
- ? BLOCKSIZE
- : offset - file->offset);
- ssize_t wrbytes;
-
- wrbytes = write (file->fd, zero_buf, size);
+ idx_t size = min (BLOCKSIZE, offset - file->offset);
+ ssize_t wrbytes = write (file->fd, zero_buf, size);
if (wrbytes <= 0)
{
if (wrbytes == 0)
}
static bool
-tar_sparse_dump_region (struct tar_sparse_file *file, size_t i)
+tar_sparse_dump_region (struct tar_sparse_file *file, idx_t i)
{
if (file->optab->dump_region)
return file->optab->dump_region (file, i);
}
static bool
-tar_sparse_extract_region (struct tar_sparse_file *file, size_t i)
+tar_sparse_extract_region (struct tar_sparse_file *file, idx_t i)
{
if (file->optab->extract_region)
return file->optab->extract_region (file, i);
it's made *entirely* of zeros, returning a 0 the instant it finds
something that is a nonzero, i.e., useful data. */
static bool
-zero_block_p (char const *buffer, size_t size)
+zero_block_p (char const *buffer, idx_t size)
{
- while (size--)
+ for (; size; size--)
if (*buffer++)
return false;
return true;
sparse_add_map (struct tar_stat_info *st, struct sp_array const *sp)
{
struct sp_array *sparse_map = st->sparse_map;
- size_t avail = st->sparse_map_avail;
+ idx_t avail = st->sparse_map_avail;
if (avail == st->sparse_map_size)
st->sparse_map = sparse_map =
x2nrealloc (sparse_map, &st->sparse_map_size, sizeof *sparse_map);
}
static bool
-sparse_dump_region (struct tar_sparse_file *file, size_t i)
+sparse_dump_region (struct tar_sparse_file *file, idx_t i)
{
off_t bytes_left = file->stat_info->sparse_map[i].numbytes;
}
static bool
-sparse_extract_region (struct tar_sparse_file *file, size_t i)
+sparse_extract_region (struct tar_sparse_file *file, idx_t i)
{
off_t write_size;
}
else while (write_size > 0)
{
- size_t wrbytes = (write_size > BLOCKSIZE) ? BLOCKSIZE : write_size;
+ idx_t wrbytes = min (write_size, BLOCKSIZE);
union block *blk = find_next_block ();
if (!blk)
{
if (fd >= 0)
{
- size_t i;
-
mv_begin_write (file.stat_info->file_name,
file.stat_info->stat.st_size,
file.stat_info->archive_file_size - file.dumped_size);
- for (i = 0; rc && i < file.stat_info->sparse_map_avail; i++)
+ for (idx_t i = 0; rc && i < file.stat_info->sparse_map_avail; i++)
rc = tar_sparse_dump_region (&file, i);
}
}
{
bool rc = true;
struct tar_sparse_file file;
- size_t i;
if (!tar_sparse_init (&file))
{
file.offset = 0;
rc = tar_sparse_decode_header (&file);
- for (i = 0; rc && i < file.stat_info->sparse_map_avail; i++)
+ for (idx_t i = 0; rc && i < file.stat_info->sparse_map_avail; i++)
rc = tar_sparse_extract_region (&file, i);
*size = file.stat_info->archive_file_size - file.dumped_size;
return (tar_sparse_done (&file) && rc) ? dump_status_ok : dump_status_short;
}
static bool
-check_data_region (struct tar_sparse_file *file, size_t i)
+check_data_region (struct tar_sparse_file *file, idx_t i)
{
off_t size_left;
{
bool rc = true;
struct tar_sparse_file file;
- size_t i;
off_t offset = 0;
if (!tar_sparse_init (&file))
rc = tar_sparse_decode_header (&file);
mv_begin_read (st);
- for (i = 0; rc && i < file.stat_info->sparse_map_avail; i++)
+ for (idx_t i = 0; rc && i < file.stat_info->sparse_map_avail; i++)
{
rc = check_sparse_region (&file,
offset, file.stat_info->sparse_map[i].offset)
static bool
oldgnu_get_sparse_info (struct tar_sparse_file *file)
{
- size_t i;
union block *h = current_header;
int ext_p;
enum oldgnu_add_status rc;
file->stat_info->sparse_map_avail = 0;
- for (i = 0; i < SPARSES_IN_OLDGNU_HEADER; i++)
+ for (idx_t i = 0; i < SPARSES_IN_OLDGNU_HEADER; i++)
{
rc = oldgnu_add_sparse (file, &h->oldgnu_header.sp[i]);
if (rc != add_ok)
return false;
}
set_next_block_after (h);
- for (i = 0; i < SPARSES_IN_SPARSE_HEADER && rc == add_ok; i++)
+ for (idx_t i = 0; i < SPARSES_IN_SPARSE_HEADER && rc == add_ok; i++)
rc = oldgnu_add_sparse (file, &h->sparse_header.sp[i]);
}
}
static void
-oldgnu_store_sparse_info (struct tar_sparse_file *file, size_t *pindex,
- struct sparse *sp, size_t sparse_size)
+oldgnu_store_sparse_info (struct tar_sparse_file *file, idx_t *pindex,
+ struct sparse *sp, idx_t sparse_size)
{
for (; *pindex < file->stat_info->sparse_map_avail
&& sparse_size > 0; sparse_size--, sp++, ++*pindex)
{
off_t block_ordinal = current_block_ordinal ();
union block *blk;
- size_t i;
blk = start_header (file->stat_info);
blk->header.typeflag = GNUTYPE_SPARSE;
/* Store the effective (shrunken) file size */
OFF_TO_CHARS (file->stat_info->archive_file_size, blk->header.size);
- i = 0;
+ idx_t i = 0;
oldgnu_store_sparse_info (file, &i,
blk->oldgnu_header.sp,
SPARSES_IN_OLDGNU_HEADER);
static bool
star_get_sparse_info (struct tar_sparse_file *file)
{
- size_t i;
union block *h = current_header;
int ext_p;
enum oldgnu_add_status rc = add_ok;
&& h->star_in_header.sp[0].offset[10] != '\0')
{
/* Old star format */
- for (i = 0; i < SPARSES_IN_STAR_HEADER; i++)
+ for (idx_t i = 0; i < SPARSES_IN_STAR_HEADER; i++)
{
rc = oldgnu_add_sparse (file, &h->star_in_header.sp[i]);
if (rc != add_ok)
return false;
}
set_next_block_after (h);
- for (i = 0; i < SPARSES_IN_STAR_EXT_HEADER && rc == add_ok; i++)
+ for (idx_t i = 0; i < SPARSES_IN_STAR_EXT_HEADER && rc == add_ok; i++)
rc = oldgnu_add_sparse (file, &h->star_ext_header.sp[i]);
file->dumped_size += BLOCKSIZE;
}
{
off_t block_ordinal = current_block_ordinal ();
union block *blk;
- size_t i;
char nbuf[UINTMAX_STRSIZE_BOUND];
struct sp_array *map = file->stat_info->sparse_map;
char *save_file_name = NULL;
if (xheader_keyword_deleted_p ("GNU.sparse.map")
|| tar_sparse_minor == 0)
{
- for (i = 0; i < file->stat_info->sparse_map_avail; i++)
+ for (idx_t i = 0; i < file->stat_info->sparse_map_avail; i++)
{
xheader_store ("GNU.sparse.offset", file->stat_info, &i);
xheader_store ("GNU.sparse.numbytes", file->stat_info, &i);
"%d/GNUSparseFile.%p/%f", 0);
xheader_string_begin (&file->stat_info->xhdr);
- for (i = 0; i < file->stat_info->sparse_map_avail; i++)
+ for (idx_t i = 0; i < file->stat_info->sparse_map_avail; i++)
{
if (i)
xheader_string_add (&file->stat_info->xhdr, ",");