- (let* ((stream (find-user-data stream-id))
- (sequence (make-array length :element-type '(unsigned-byte 8)))
- (bytes-read
- (handler-case (etypecase stream
- (stream
- (read-sequence sequence stream))
- ((or symbol function)
- (funcall stream sequence)))
- (serious-condition (condition)
- (declare (ignore condition))
- 0))))
- (make-c-vector '(unsigned-byte 8) bytes-read
- :content sequence :location data)
- bytes-read))
+ (let* ((stream (find-user-data stream-id)))
+ (handler-case
+ (multiple-value-bind (sequence bytes-read)
+ (etypecase stream
+ (stream
+ (let ((sequence (make-array length
+ :element-type '(unsigned-byte 8))))
+ (values sequence (read-sequence sequence stream))))
+ ((or symbol function) (funcall stream length)))
+ (make-c-vector '(unsigned-byte 8) (or bytes-read (length sequence))
+ :content sequence :location data)
+ (or bytes-read (length sequence)))
+ (serious-condition (condition)
+ (declare (ignore condition))
+ 0))))