mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH 8/8] copy_file: fix progress bar for files larger than 2G
Date: Tue, 16 Feb 2021 21:02:08 +0100	[thread overview]
Message-ID: <20210216200208.5275-9-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20210216200208.5275-1-a.fatoum@pengutronix.de>

Files larger than 2G cause the benign bug, that the progress bar is no
longer accurate. Use loff_t to fix this.

Note that printed % HASHES_PER_LINE in show_progress implies a 64-bit
division. A previous commit changed the constant divisor to a power of
two, so a division shouldn't be generated. The original multiplication
and modulo operations are left as is for clarity.

Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 include/progress.h  |  6 ++++--
 lib/libfile.c       |  2 +-
 lib/show_progress.c | 15 +++++++--------
 3 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/include/progress.h b/include/progress.h
index 75aa9c4f8616..50b15fb12b4c 100644
--- a/include/progress.h
+++ b/include/progress.h
@@ -2,15 +2,17 @@
 #ifndef __PROGRSS_H
 #define __PROGRSS_H
 
+#include <linux/types.h>
+
 /* Initialize a progress bar. If max > 0 a one line progress
  * bar is printed where 'max' corresponds to 100%. If max == 0
  * a multi line progress bar is printed.
  */
-void init_progression_bar(int max);
+void init_progression_bar(loff_t max);
 
 /* update a progress bar to a new value. If now < 0 then a
  * spinner is printed.
  */
-void show_progress(int now);
+void show_progress(loff_t now);
 
 #endif /*  __PROGRSS_H */
diff --git a/lib/libfile.c b/lib/libfile.c
index 20bb689a7969..4ab8db11ad56 100644
--- a/lib/libfile.c
+++ b/lib/libfile.c
@@ -332,7 +332,7 @@ int copy_file(const char *src, const char *dst, int verbose)
 	int r, s;
 	int ret = 1, err1 = 0;
 	int mode;
-	int total = 0;
+	loff_t total = 0;
 	struct stat srcstat, dststat;
 
 	rw_buf = xmalloc(RW_BUF_SIZE);
diff --git a/lib/show_progress.c b/lib/show_progress.c
index d0d7b31303dc..1be06ea7806e 100644
--- a/lib/show_progress.c
+++ b/lib/show_progress.c
@@ -21,11 +21,11 @@
 
 #define HASHES_PER_LINE	64
 
-static int printed;
-static int progress_max;
-static int spin;
+static loff_t printed;
+static loff_t progress_max;
+static unsigned spin;
 
-void show_progress(int now)
+void show_progress(loff_t now)
 {
 	char spinchr[] = "\\|/-";
 
@@ -35,9 +35,8 @@ void show_progress(int now)
 	}
 
 	if (progress_max && progress_max != FILESIZE_MAX) {
-		uint64_t tmp = (int64_t)now * HASHES_PER_LINE;
-		do_div(tmp, progress_max);
-		now = tmp;
+		uint64_t tmp = now * HASHES_PER_LINE;
+		now = div64_u64(tmp, progress_max);
 	}
 
 	while (printed < now) {
@@ -48,7 +47,7 @@ void show_progress(int now)
 	}
 }
 
-void init_progression_bar(int max)
+void init_progression_bar(loff_t max)
 {
 	printed = 0;
 	progress_max = max;
-- 
2.29.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  parent reply	other threads:[~2021-02-16 20:02 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-16 20:02 [PATCH 0/8] Support large files on larger ext4 partitions on larger still USB disks Ahmad Fatoum
2021-02-16 20:02 ` [PATCH 1/8] ext4: ext_common.h: drop declaration of never-defined part_offset Ahmad Fatoum
2021-02-16 20:02 ` [PATCH 2/8] fs: ext4: ext4fs.h: remove unused struct members of ext_filesystem Ahmad Fatoum
2021-02-16 20:02 ` [PATCH 3/8] block: use 64-bit types for sector offset and count on all platforms Ahmad Fatoum
2021-02-16 20:02 ` [PATCH 4/8] usb: storage: support USB disks up to 2TiB of size Ahmad Fatoum
2021-02-16 20:02 ` [PATCH 5/8] fs: ext4: use sector_t and loff_t where appropriate Ahmad Fatoum
2021-02-16 20:02 ` [PATCH 6/8] fs: ext4: support files exceeding 4G Ahmad Fatoum
2021-02-16 20:02 ` [PATCH 7/8] show_progress: change HASHES_PER_LINE from 65 to 64 to avoid division Ahmad Fatoum
2021-02-16 20:02 ` Ahmad Fatoum [this message]
2021-02-18  8:24 ` [PATCH 0/8] Support large files on larger ext4 partitions on larger still USB disks Sascha Hauer
2021-02-19 13:56 ` Antony Pavlov
2021-02-25 10:49   ` Ahmad Fatoum

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210216200208.5275-9-a.fatoum@pengutronix.de \
    --to=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox