On 11-May-09, at 10:30 PM, Alex Queiroz wrote:
Hallo,
Why does this code always return the output vector, instead of
whatever I put inside the inner 'if'?
(define (embed-resource file) (let* ((buffer-size 4096) (buffer (make-u8vector buffer-size 0)) (out-vector (make-u8vector 0)) (info (file-info file))) (if (eq? (file-info-type info) 'regular) (call-with-input-file file (lambda (in) (call-with-output-u8vector out-vector (lambda (out) (let loop () (let ((size (read-subu8vector buffer 0 buffer-size in))) (write-subu8vector buffer 0 size out) (if (< size buffer-size) `(define ,(string->symbol (path-strip-extension file))) (loop)))))))) (error "bad file" file))))
The procedure call-with-output-u8vector returns the u8vector that was accumulated. What you want is this:
(define (embed-resource file) (let* ((buffer-size 4096) (buffer (make-u8vector buffer-size 0)) (out-vector (make-u8vector 0)) (info (file-info file))) (if (eq? (file-info-type info) 'regular) (call-with-input-file file (lambda (in) `(define ,(string->symbol (path-strip-extension file)) ',(call-with-output-u8vector out-vector (lambda (out) (let loop () (let ((size (read-subu8vector buffer 0 buffer- size in))) (write-subu8vector buffer 0 size out) (if (= size buffer-size) (loop))))))))) (error "bad file" file))))
Marc