-GNU tar NEWS - User visible changes. 2023-09-12
+GNU tar NEWS - User visible changes. 2024-11-02
Please send GNU tar bug reports to <bug-tar@gnu.org>
\f
version TBD
** Transformations that change case (e.g., --transform='s/.*/\L&/')
now work correctly with multi-byte characters.
+* Performance improvements
+
+** Sparse files are now read and written with larger blocksizes.
+
\f
version 1.35 - Sergey Poznyakoff, 2023-07-18
while (bytes_left > 0)
{
union block *blk = find_next_block ();
- idx_t bufsize = min (bytes_left, BLOCKSIZE);
+ idx_t avail = available_space_after (blk);
+ idx_t bufsize = min (bytes_left, avail);
idx_t bytes_read = full_read (file->fd, blk->buffer, bufsize);
if (bytes_read < BLOCKSIZE)
memset (blk->buffer + bytes_read, 0, BLOCKSIZE - bytes_read);
return false;
}
- set_next_block_after (blk);
+ set_next_block_after (blk + (bufsize - 1) / BLOCKSIZE);
}
return true;
}
else while (write_size > 0)
{
- idx_t wrbytes = min (write_size, BLOCKSIZE);
union block *blk = find_next_block ();
if (!blk)
{
paxerror (0, _("Unexpected EOF in archive"));
return false;
}
- set_next_block_after (blk);
- file->dumped_size += BLOCKSIZE;
+ idx_t avail = available_space_after (blk);
+ idx_t wrbytes = min (write_size, avail);
+ set_next_block_after (blk + (wrbytes - 1) / BLOCKSIZE);
+ file->dumped_size += avail;
idx_t count = blocking_write (file->fd, blk->buffer, wrbytes);
write_size -= count;
mv_size_left (file->stat_info->archive_file_size - file->dumped_size);