12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- (define-module (gcrypt utils)
- #:use-module (rnrs bytevectors)
- #:use-module (rnrs io ports)
- #:export (dump-port))
- (define* (dump-port in out
- #:key (buffer-size 16384)
- (progress (lambda (t k) (k))))
- "Read as much data as possible from IN and write it to OUT, using chunks of
- BUFFER-SIZE bytes. Call PROGRESS at the beginning and after each successful
- transfer of BUFFER-SIZE bytes or less, passing it the total number of bytes
- transferred and the continuation of the transfer as a thunk."
- (define buffer
- (make-bytevector buffer-size))
- (define (loop total bytes)
- (or (eof-object? bytes)
- (let ((total (+ total bytes)))
- (put-bytevector out buffer 0 bytes)
- (progress total
- (lambda ()
- (loop total
- (get-bytevector-n! in buffer 0 buffer-size)))))))
-
-
- (progress 0
- (lambda ()
- (loop 0 (get-bytevector-n! in buffer 0 buffer-size)))))
|