Skip to content

Commit

Permalink
Implement READ-SEQUENCE for the local filesystem.
Browse files Browse the repository at this point in the history
  • Loading branch information
froggey committed Feb 17, 2017
1 parent 7e833fa commit 822e927
Showing 1 changed file with 14 additions and 7 deletions.
21 changes: 14 additions & 7 deletions file/local.lisp
Expand Up @@ -604,15 +604,22 @@
(incf (stream-position stream) (- end start))
(setf (getf (file-plist file) :write-time) (get-universal-time)))))

#+(or)(defmethod sys.gray:stream-read-sequence ((stream local-stream) sequence &optional (start 0) end)
(defmethod sys.gray:stream-read-sequence ((stream local-stream) sequence &optional (start 0) end)
(check-type (direction stream) (member :io :input))
(let ((file (local-stream-file stream)))
(let ((file (local-stream-file stream))
(end (or end (length sequence))))
(mezzano.supervisor:with-mutex ((file-lock file))
(cond ((< (stream-position stream)
(length (file-storage file)))
(prog1 (aref (file-storage file) (stream-position stream))
(incf (stream-position stream))))
(t :eof)))))
(let* ((pos (stream-position stream))
(storage (file-storage file))
(file-size (length storage))
(requested-n-bytes (- end start))
(n-bytes (max 0 (min requested-n-bytes (- file-size pos)))))
(replace sequence storage
:start1 start
:start2 pos
:end2 (+ pos n-bytes))
(incf (stream-position stream) n-bytes)
(+ start n-bytes)))))

(defmethod sys.gray:stream-element-type ((stream local-stream))
(array-element-type (file-storage (local-stream-file stream))))
Expand Down

0 comments on commit 822e927

Please sign in to comment.