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

Diff of /src/code/fd-stream.lisp

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

revision 1.114 by rtoy, Tue Jul 20 22:53:11 2010 UTC revision 1.114.2.2 by rtoy, Wed Aug 18 17:31:51 2010 UTC
# Line 1450  Line 1450 
1450                  ;; FAST-READ-CHAR.)                  ;; FAST-READ-CHAR.)
1451                  (setf (lisp-stream-string-buffer stream)                  (setf (lisp-stream-string-buffer stream)
1452                        (make-string (1+ in-buffer-length)))                        (make-string (1+ in-buffer-length)))
1453                    (setf (fd-stream-octet-count stream)
1454                          (make-array in-buffer-length :element-type '(unsigned-byte 8)))
1455                  (setf (lisp-stream-string-buffer-len stream) 0)                  (setf (lisp-stream-string-buffer-len stream) 0)
1456                  (setf (lisp-stream-string-index stream) 0)))))                  (setf (lisp-stream-string-index stream) 0)))))
1457          (setf input-size size)          (setf input-size size)
# Line 1706  Line 1708 
1708                       ;; The string buffer contains Lisp characters,                       ;; The string buffer contains Lisp characters,
1709                       ;; not octets!  To figure out how many octets                       ;; not octets!  To figure out how many octets
1710                       ;; have not been already supplied, we need to                       ;; have not been already supplied, we need to
1711                       ;; convert them back to the encoded format and                       ;; count how many octets were consumed for all
1712                       ;; count the number of octets.                       ;; the characters in the string bbuffer that have
1713                       (decf posn                       ;; not been supplied.
1714                             (length (string-encode (fd-stream-string-buffer stream)                       (let ((ocount (fd-stream-octet-count stream)))
1715                                                    (fd-stream-external-format stream)                         (when ocount
1716                                                    (fd-stream-string-index stream)                           ;; Note: string-index starts at 1 (because
1717                                                    (fd-stream-string-buffer-len stream))))                           ;; index 0 is for the unread-char), but
1718                             ;; octet-count doesn't use that.  Hence,
1719                             ;; subtract one from string-index and
1720                             ;; string-buffer-len.
1721                             (loop for k of-type fixnum from (1- (fd-stream-string-index stream))
1722                                below (1- (fd-stream-string-buffer-len stream))
1723                                do (decf posn (aref ocount k)))))
1724                       (decf posn (- (fd-stream-ibuf-tail stream)                       (decf posn (- (fd-stream-ibuf-tail stream)
1725                                     (fd-stream-ibuf-head stream))))                                     (fd-stream-ibuf-head stream))))
1726                   (when (fd-stream-unread stream) ;;@@                   (when (fd-stream-unread stream) ;;@@
# Line 1841  Line 1849 
1849                            (d (cond ((characterp decoding-error)                            (d (cond ((characterp decoding-error)
1850                                      (constantly (char-code decoding-error)))                                      (constantly (char-code decoding-error)))
1851                                     ((eq t decoding-error)                                     ((eq t decoding-error)
1852                                        #+unicode
1853                                      #'(lambda (&rest args)                                      #'(lambda (&rest args)
1854                                          (apply 'cerror                                          (apply 'cerror
1855                                                 (intl:gettext "Use Unicode replacement character instead")                                                 (intl:gettext "Use Unicode replacement character instead")
1856                                                 args)                                                 args)
1857                                          stream:+replacement-character-code+))                                          stream:+replacement-character-code+)
1858                                        #-unicode
1859                                        #'(lambda (&rest args)
1860                                            (apply 'cerror
1861                                                   (intl:gettext "Use question mark character instead")
1862                                                   args)
1863                                            #\?))
1864                                     (t                                     (t
1865                                      decoding-error))))                                      decoding-error))))
1866                        (%make-fd-stream :fd fd                        (%make-fd-stream :fd fd
# Line 2201  Line 2216 
2216     :if-does-not-exist - one of :error, :create or nil     :if-does-not-exist - one of :error, :create or nil
2217     :external-format - an external format name     :external-format - an external format name
2218     :decoding-error - How to handle decoding errors from the external format.     :decoding-error - How to handle decoding errors from the external format.
2219                         Should be a symbol or function of 3 arguments.  If it                         If a character, then that character is used as
2220                         returns, it should return a code point to use as the                         the replacment character for all errors.  If T,
2221                         replacment.  NIL means use the default replacement scheme                         then a continuable error is signaled.  If
2222                         specified by the external format.  The function arguments                         continued, the Unicode replacement character is
2223                         are a format message string, the offending octet, and the                         used.  Otherwise, it should be a symbol or
2224                         number of octets read in the current encoding.                         function of 3 arguments.  If it returns, it
2225                           should return a code point to use as the
2226                           replacment.  The function arguments are a
2227                           format message string, the offending octet, and
2228                           the number of octets read in the current
2229                           encoding.
2230     :encoding-error - Like :decoding-error, but for errors when encoding the     :encoding-error - Like :decoding-error, but for errors when encoding the
2231                         stream.  The function arguments are a format message                         stream.  If a character, that character is used
2232                         string and the incorrect codepoint.                         as the replacment code point.  Otherwise, it
2233                           should be a symbol or function oof two
2234                           arguments: a format message string and the
2235                           incorrect codepoint.
2236    
2237    See the manual for details."    See the manual for details."
2238    (declare (ignore element-type external-format input-handle output-handle    (declare (ignore element-type external-format input-handle output-handle

Legend:
Removed from v.1.114  
changed lines
  Added in v.1.114.2.2

  ViewVC Help
Powered by ViewVC 1.1.5