fix an off-by-1 error

svn: r11479

original commit: 354ac668e81032de67d1740b32a41fdb2e71078b
This commit is contained in:
Eli Barzilay 2008-08-29 09:22:44 +00:00
commit a957e2c047

View File

@ -37,10 +37,10 @@
(define (base64-encode-stream in out [linesep #"\n"]) (define (base64-encode-stream in out [linesep #"\n"])
(let loop ([data 0] [bits 0] [width 0]) (let loop ([data 0] [bits 0] [width 0])
(define (write-char) (define (write-char)
(write-byte (vector-ref digit-base64 (arithmetic-shift data (- 6 bits)))
out)
(let ([width (modulo (add1 width) 72)]) (let ([width (modulo (add1 width) 72)])
(when (zero? width) (display linesep out)) (when (zero? width) (display linesep out))
(write-byte (vector-ref digit-base64 (arithmetic-shift data (- 6 bits)))
out)
width)) width))
(if (>= bits 6) (if (>= bits 6)
(let ([bits (- bits 6)]) (let ([bits (- bits 6)])
@ -48,10 +48,14 @@
(let ([c (read-byte in)]) (let ([c (read-byte in)])
(if (eof-object? c) (if (eof-object? c)
;; flush extra bits ;; flush extra bits
(let ([width (if (> bits 0) (write-char) width)]) (begin
(when (> width 0) (printf "1 width = ~s\n" width)
(for ([i (in-range (modulo (- width) 4))]) (write-byte =byte out)) (let ([width (if (> bits 0) (write-char) width)])
(display linesep out))) (printf "2 width = ~s\n" width)
(when (> width 0)
(for ([i (in-range (modulo (- width) 4))])
(write-byte =byte out))
(display linesep out))))
(loop (+ (arithmetic-shift data 8) c) (+ bits 8) width)))))) (loop (+ (arithmetic-shift data 8) c) (+ bits 8) width))))))
(define (base64-decode src) (define (base64-decode src)