/[cmucl]/src/code/stream.lisp
ViewVC logotype

Diff of /src/code/stream.lisp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.94 by rtoy, Mon Jul 5 03:40:02 2010 UTC revision 1.94.4.3 by rtoy, Thu Sep 2 23:47:31 2010 UTC
# Line 364  Line 364 
364        (t        (t
365         (let ((res (funcall (lisp-stream-misc stream) stream         (let ((res (funcall (lisp-stream-misc stream) stream
366                             :file-position nil)))                             :file-position nil)))
367             ;; For Unicode, the LISP-STREAM-MISC function handles
368             ;; everything, so we can just return the result.
369             #-unicode
370           (when res           (when res
371             (- res (- in-buffer-length (lisp-stream-in-index stream)))))))))             (- res (- in-buffer-length (lisp-stream-in-index stream))))
372             #+unicode
373             res)))))
374    
375    
376  ;;; File-Length  --  Public  ;;; File-Length  --  Public
# Line 731  Line 736 
736      (progn      (progn
737        (format t "index = ~A~%" index)        (format t "index = ~A~%" index)
738        (format t "in-length = ~A~%" in-length)        (format t "in-length = ~A~%" in-length)
739        (format t "ibuf before = ~A~%" ibuf))        (format t "ibuf before = ~A~%" ibuf)
740          (format t "sbuf before = ~S~%" (subseq (lisp-stream-string-buffer stream) 0
741                                                 (1+ (lisp-stream-string-buffer-len stream)))))
742    
743      ;; Copy the stuff we haven't read from in-buffer to the beginning      ;; Copy the stuff we haven't read from in-buffer to the beginning
744      ;; of the buffer.      ;; of the buffer.
# Line 788  Line 795 
795    
796                 ;; Copy the last read character to the beginning of the                 ;; Copy the last read character to the beginning of the
797                 ;; buffer to support unreading.                 ;; buffer to support unreading.
798                 #+(or)                 #+(or debug-frc-sr)
799                 (format t "slen = ~A~%" slen)                 (format t "slen = ~A~%" slen)
800                 (when (plusp slen)                 (when (plusp slen)
801                   (setf (schar sbuf 0) (schar sbuf (1- slen))))                   (setf (schar sbuf 0) (schar sbuf slen)))
802                   #+(or debug-frc-sr)
803                   (progn
804                     (format t "sbuf[0] = ~S~%" (schar sbuf 0))
805                     (format t "index = ~S~%" index))
806    
807    
808                 ;; Convert all the octets, including the ones that we                 ;; Convert all the octets, including the ones that we
809                 ;; haven't processed yet and the ones we just read in.                 ;; haven't processed yet and the ones we just read in.
810                 (multiple-value-bind (s char-count octet-count new-state)                 (flet
811                     (octets-to-string ibuf                     ((convert-buffer ()
812                                       :start 0                        (multiple-value-bind (s char-count octet-count new-state)
813                                       :end (fd-stream-in-length stream)                            (stream::octets-to-string-counted
814                                       :state (fd-stream-oc-state stream)                             ibuf
815                                       :string sbuf                             (fd-stream-octet-count stream)
816                                       :s-start 1                             :start 0
817                                       :external-format (fd-stream-external-format stream)                             :end (fd-stream-in-length stream)
818                                       :error (fd-stream-octets-to-char-error stream))                             :state (fd-stream-oc-state stream)
819                   (declare (ignore s))                             :string sbuf
820                   (setf (fd-stream-oc-state stream) new-state)                             :s-start 1
821                   (setf (lisp-stream-string-buffer-len stream) char-count)                             :external-format (fd-stream-external-format stream)
822                   (setf (lisp-stream-string-index stream) 2)                             :error (fd-stream-octets-to-char-error stream))
823                   (setf (lisp-stream-in-index stream) octet-count)                          (declare (ignore s)
824                   #+(or debug-frc-sr)                                   (type (integer 0 #.in-buffer-length) char-count octet-count))
825                   (format t "new in-index = ~A~%" (lisp-stream-in-index stream))                          (setf (fd-stream-oc-state stream) new-state)
826                   (schar sbuf 1))))))))                          (setf (lisp-stream-string-buffer-len stream) (1+ char-count))
827                            (setf (lisp-stream-string-index stream) 2)
828                            (setf (lisp-stream-in-index stream) (if (plusp octet-count)
829                                                                    octet-count
830                                                                    index))
831                            #+(or debug-frc-sr)
832                            (progn
833                              (format t "new in-index = ~A~%" (lisp-stream-in-index stream))
834                              (format t "char-count = ~A~%" char-count)
835                              (format t "new sbuf = ~S~%"
836                                      (subseq sbuf 0 (1+ char-count))))
837                            (when (plusp char-count)
838                              (schar sbuf 1)))))
839                     (let ((out (convert-buffer)))
840                       (or out
841                           (let ((count (funcall (lisp-stream-n-bin stream) stream
842                                                 ibuf index
843                                                 (- in-buffer-length index)
844                                                 nil)))
845                             (declare (type (integer 0 #.in-buffer-length) count))
846                             (cond ((zerop count)
847                                    ;; Nothing left in the stream, so update our pointers to
848                                    ;; indicate we've read everything and call the stream-in
849                                    ;; function so that we do the right thing for eof.
850                                    (setf (lisp-stream-in-index stream) in-buffer-length)
851                                    (setf (lisp-stream-string-index stream)
852                                          (lisp-stream-string-buffer-len stream))
853                                    (funcall (lisp-stream-in stream) stream eof-errorp eof-value))
854                                   (t
855                                    (convert-buffer)))))))))))))
856    
857  ;;; FAST-READ-BYTE-REFILL  --  Interface  ;;; FAST-READ-BYTE-REFILL  --  Interface
858  ;;;  ;;;

Legend:
Removed from v.1.94  
changed lines
  Added in v.1.94.4.3

  ViewVC Help
Powered by ViewVC 1.1.5