X-Git-Url: http://git.kpe.io/?p=kmrcl.git;a=blobdiff_plain;f=io.lisp;h=aedca9942a166d716bf11f44c227d711176ee105;hp=ba68048739c57e4ff55b4138d8e48e6308af95cc;hb=09816397bfa39bd4b3c85e9f5fc05d30b073bacb;hpb=78b62107690123d8d7a1a400e4a1d744408a05b1 diff --git a/io.lisp b/io.lisp index ba68048..aedca99 100644 --- a/io.lisp +++ b/io.lisp @@ -43,6 +43,17 @@ (with-open-file (in file :direction :input) (read-stream-to-string in)))) +(defun read-file-to-usb8-array (file) + "Opens a reads a file. Returns the contents as single unsigned-byte array" + (with-open-file (in file :direction :input) + (let* ((file-len (file-length in)) + (usb8 (make-array file-len :element-type '(unsigned-byte 8))) + (pos (read-sequence usb8 in))) + (unless (= file-len pos) + (error "Length read (~D) doesn't match file length (~D)~%" pos file-len)) + usb8))) + + (defun read-stream-to-strings (in) (let ((lines '()) (eof (gensym))) @@ -311,8 +322,8 @@ (write-char #\: stream) (write-string (aref +datetime-number-strings+ minute) stream))) -(defun copy-binary-stream (in out) - (do* ((buf (make-array 4096 :element-type '(unsigned-byte 8))) +(defun copy-binary-stream (in out &key (chunk-size 4096)) + (do* ((buf (make-array chunk-size :element-type '(unsigned-byte 8))) (pos (read-sequence buf in) (read-sequence buf in))) ((zerop pos)) (write-sequence buf out :end pos)))