If the compressed data is larger than the uncompressed,
report the compression ratio as 0% instead of displaying nonsense triggered by numeric overflow. This is common when dealing with uncompressed files when the I/O blocking causes there to be small transient differences in the accounting. Thanks to: Boris Samorodov
This commit is contained in:
parent
2ca090b308
commit
0c1bca0fd2
@ -103,6 +103,7 @@ progress_func(void *cookie)
|
||||
struct archive *a = progress_data->archive;
|
||||
struct archive_entry *entry = progress_data->entry;
|
||||
uint64_t comp, uncomp;
|
||||
int compression;
|
||||
|
||||
if (!need_report())
|
||||
return;
|
||||
@ -112,9 +113,13 @@ progress_func(void *cookie)
|
||||
if (a != NULL) {
|
||||
comp = archive_position_compressed(a);
|
||||
uncomp = archive_position_uncompressed(a);
|
||||
if (comp > uncomp)
|
||||
compression = 0;
|
||||
else
|
||||
compression = (int)((uncomp - comp) * 100 / uncomp);
|
||||
fprintf(stderr,
|
||||
"In: %s bytes, compression %d%%;",
|
||||
tar_i64toa(comp), (int)((uncomp - comp) * 100 / uncomp));
|
||||
tar_i64toa(comp), compression);
|
||||
fprintf(stderr, " Out: %d files, %s bytes\n",
|
||||
archive_file_count(a), tar_i64toa(uncomp));
|
||||
}
|
||||
|
@ -965,15 +965,21 @@ report_write(struct bsdtar *bsdtar, struct archive *a,
|
||||
struct archive_entry *entry, int64_t progress)
|
||||
{
|
||||
uint64_t comp, uncomp;
|
||||
int compression;
|
||||
|
||||
if (bsdtar->verbose)
|
||||
fprintf(stderr, "\n");
|
||||
comp = archive_position_compressed(a);
|
||||
uncomp = archive_position_uncompressed(a);
|
||||
fprintf(stderr, "In: %d files, %s bytes;",
|
||||
archive_file_count(a), tar_i64toa(uncomp));
|
||||
if (comp > uncomp)
|
||||
compression = 0;
|
||||
else
|
||||
compression = (int)((uncomp - comp) * 100 / uncomp);
|
||||
fprintf(stderr,
|
||||
" Out: %s bytes, compression %d%%\n",
|
||||
tar_i64toa(comp), (int)((uncomp - comp) * 100 / uncomp));
|
||||
tar_i64toa(comp), compression);
|
||||
/* Can't have two calls to tar_i64toa() pending, so split the output. */
|
||||
safe_fprintf(stderr, "Current: %s (%s",
|
||||
archive_entry_pathname(entry),
|
||||
|
Loading…
Reference in New Issue
Block a user