From daccd58e5fbe366ebcd33092f70ca45bc79285e0 Mon Sep 17 00:00:00 2001 From: Steve Sprang Date: Wed, 9 Sep 2015 13:59:52 -0700 Subject: [PATCH] build: Fix potential type error when generating human-friendly byte count strings. * guix/build/download.scm (number->integer): New function. (seconds->string): Use new rounding function. (byte-count->string): Use new rounding function. --- guix/build/download.scm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/guix/build/download.scm b/guix/build/download.scm index 6e85174..a0b8d92 100644 --- a/guix/build/download.scm +++ b/guix/build/download.scm @@ -49,6 +49,10 @@ ;; Size of the HTTP receive buffer. 65536) +(define (number->integer n) + "Given an arbitrary number N, round it and return the exact result." + (inexact->exact (round n))) + (define (duration->seconds duration) "Return the number of seconds represented by DURATION, a 'time-duration' object, as an inexact number." @@ -60,7 +64,7 @@ object, as an inexact number." format." (if (not (number? duration)) "00:00:00" - (let* ((total-seconds (inexact->exact (round duration))) + (let* ((total-seconds (number->integer duration)) (extra-seconds (modulo total-seconds 3600)) (hours (quotient total-seconds 3600)) (mins (quotient extra-seconds 60)) @@ -75,8 +79,8 @@ way." (GiB (expt 1024. 3)) (TiB (expt 1024. 4))) (cond - ((< size KiB) (format #f "~dB" (inexact->exact size))) - ((< size MiB) (format #f "~dKiB" (inexact->exact (round (/ size KiB))))) + ((< size KiB) (format #f "~dB" (number->integer size))) + ((< size MiB) (format #f "~dKiB" (number->integer (/ size KiB)))) ((< size GiB) (format #f "~,1fMiB" (/ size MiB))) ((< size TiB) (format #f "~,2fGiB" (/ size GiB))) (else (format #f "~,3fTiB" (/ size TiB)))))) -- 2.5.0