r10035:
[kmrcl.git] / io.lisp
diff --git a/io.lisp b/io.lisp
index ba68048739c57e4ff55b4138d8e48e6308af95cc..aedca9942a166d716bf11f44c227d711176ee105 100644 (file)
--- a/io.lisp
+++ b/io.lisp
     (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)))             
     (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)))