summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/monojob.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/core/monojob.c b/src/core/monojob.c
index 62e672a4c..7431f88a3 100644
--- a/src/core/monojob.c
+++ b/src/core/monojob.c
@@ -62,6 +62,8 @@ int monojob_wait ( const char *string ) {
int rc;
unsigned long last_progress;
unsigned long elapsed;
+ unsigned long completed;
+ unsigned long total;
unsigned int percentage;
int shown_percentage = 0;
@@ -85,9 +87,11 @@ int monojob_wait ( const char *string ) {
if ( shown_percentage )
printf ( "\b\b\b\b \b\b\b\b" );
job_progress ( &monojob, &progress );
- if ( progress.total ) {
- percentage = ( ( 100 * progress.completed ) /
- progress.total );
+ /* Normalise progress figures to avoid overflow */
+ completed = ( progress.completed / 128 );
+ total = ( progress.total / 128 );
+ if ( total ) {
+ percentage = ( ( 100 * completed ) / total );
printf ( "%3d%%", percentage );
shown_percentage = 1;
} else {