X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Fprogress.c;h=6f24cd290e027094504b7479910e109141256f33;hb=bb0194c6e7181825cd6a1cf6440c05d9f99f6449;hp=b675bbf196a64f0dd454bdbd5cb00ceb801dcc9a;hpb=9c810d69ac58d8fac07f288a4e5f932848007009;p=wget diff --git a/src/progress.c b/src/progress.c index b675bbf1..6f24cd29 100644 --- a/src/progress.c +++ b/src/progress.c @@ -76,7 +76,7 @@ static int current_impl_locked; #define DEFAULT_PROGRESS_IMPLEMENTATION "bar" -/* Fallnback progress implementation should be something that works +/* Fallback progress implementation should be something that works under all display types. If you put something other than "dot" here, remember that bar_set_params tries to switch to this if we're not running on a TTY. So changing this to "bar" could cause @@ -108,7 +108,7 @@ set_progress_implementation (const char *name) { int i, namelen; struct progress_implementation *pi = implementations; - char *colon; + const char *colon; if (!name) name = DEFAULT_PROGRESS_IMPLEMENTATION; @@ -258,7 +258,13 @@ dot_create (wgint initial, wgint total) static void print_percentage (wgint bytes, wgint expected) { - int percentage = (int)(100.0 * bytes / expected); + /* This intentionally rounds to the floor value because it is a + measure of how much data *has* been retrieved. Therefore 12.8% + rounds to 12% because the 13% mark has not yet been reached. + Likewise, 100% is only shown when all data has been retrieved, + not before. */ + + int percentage = 100.0 * bytes / expected; logprintf (LOG_VERBOSE, "%3d%%", percentage); } @@ -754,7 +760,7 @@ create_image (struct bar_progress *bp, double dl_total_time, bool done) /* "xx% " */ if (bp->total_length > 0) { - int percentage = (int)(100.0 * size / bp->total_length); + int percentage = 100.0 * size / bp->total_length; assert (percentage <= 100); if (percentage < 100) @@ -880,7 +886,7 @@ create_image (struct bar_progress *bp, double dl_total_time, bool done) /* Translation note: "ETA" is English-centric, but this must be short, ideally 3 chars. Abbreviate if necessary. */ - sprintf (p, " eta %s", eta_to_human_short (eta)); + sprintf (p, _(" eta %s"), eta_to_human_short (eta)); move_to_end (p); } else if (bp->total_length > 0) @@ -900,7 +906,7 @@ create_image (struct bar_progress *bp, double dl_total_time, bool done) strcpy (p, eta_to_human_short ((int) (secs + 0.5))); else /* For very quick downloads show more exact timing information. */ - sprintf (p, _("%.*fs"), + sprintf (p, "%.*fs", secs < 0.001 ? 0 : /* 0s instead of 0.000s */ secs < 0.01 ? 3 : /* 0.00x */ secs < 0.1 ? 2 : /* 0.0x */ @@ -980,7 +986,12 @@ progress_handle_sigwinch (int sig) and hours are shown. This ensures brevity while still displaying as much as possible. - It never occupies more than 7 characters of screen space. */ + If SEP is false, the separator between minutes and seconds (and + hours and minutes, etc.) is not included, shortening the display by + one additional character. This is used for dot progress. + + The display never occupies more than 7 characters of screen + space. */ static const char * eta_to_human_short (int secs) @@ -988,9 +999,9 @@ eta_to_human_short (int secs) static char buf[10]; /* 8 should be enough, but just in case */ static int last = -1; - /* Trivial optimization. This function can be called every 200 - msecs (see bar_update) for fast downloads, but ETA will only - change once per 900 msecs (see create_image). */ + /* Trivial optimization. create_image can call us every 200 msecs + (see bar_update) for fast downloads, but ETA will only change + once per 900 msecs. */ if (secs == last) return buf; last = secs;