-(defun fd-stream-read-n-bytes (stream buffer start requested eof-error-p)
- (declare (type fd-stream stream))
- (declare (type index start requested))
- (do ((total-copied 0))
+(defun fd-stream-read-n-bytes (stream buffer start requested eof-error-p
+ &aux (total-copied 0))
+ (declare (type file-stream stream))
+ (declare (type index start requested total-copied))
+ (let ((unread (fd-stream-unread stream)))
+ (when unread
+ ;; AVERs designed to fail when we have more complicated
+ ;; character representations.
+ (aver (typep unread 'base-char))
+ (aver (= (fd-stream-element-size stream) 1))
+ ;; KLUDGE: this is a slightly-unrolled-and-inlined version of
+ ;; %BYTE-BLT
+ (etypecase buffer
+ (system-area-pointer
+ (setf (sap-ref-8 buffer start) (char-code unread)))
+ ((simple-unboxed-array (*))
+ (setf (aref buffer start) unread)))
+ (setf (fd-stream-unread stream) nil)
+ (setf (fd-stream-listen stream) nil)
+ (incf total-copied)))
+ (do ()