Index: /trunk/ccl/level-1/l1-streams.lisp
===================================================================
--- /trunk/ccl/level-1/l1-streams.lisp	(revision 5579)
+++ /trunk/ccl/level-1/l1-streams.lisp	(revision 5580)
@@ -4083,4 +4083,10 @@
 (def-standard-initial-binding %string-output-stream-ioblocks% (%cons-pool nil))
 
+(defmethod stream-force-output ((s string-output-stream))
+  nil)
+
+(defmethod stream-finish-output ((s string-output-stream))
+  nil)
+
 ;;; Should only be used for a stream whose class is exactly
 ;;; *string-output-stream-class* 
@@ -4468,4 +4474,21 @@
 
 
+(defun string-input-stream-character-read-vector (ioblock vector start end)
+  (let* ((string (string-stream-ioblock-string ioblock))
+         (idx (string-input-stream-ioblock-index ioblock))
+         (limit (string-input-stream-ioblock-end ioblock)))
+    (declare (fixnum idx limit))
+    (do* ((i start (1+ i)))
+         ((= i end) (setf (string-input-stream-ioblock-index ioblock) idx) end)
+      (declare (fixnum i))
+      (if (< idx limit)
+        (setf (uvref vector i) (schar string idx)
+              idx (1+ idx))
+        (progn
+          (setf (string-input-stream-ioblock-index ioblock) idx)
+          (return i))))))
+         
+
+
 (defun make-string-input-stream (string &optional (start 0)
                                         (end nil))
@@ -4491,5 +4514,5 @@
                      :read-char-when-locked-function 'string-input-stream-ioblock-read-char
                      :peek-char-function 'string-input-stream-ioblock-peek-char
-                     :character-read-vector-function 'generic-character-read-vector
+                     :character-read-vector-function 'string-input-stream-character-read-vector
                      :close-function #'false
                      :unread-char-function 'string-input-stream-ioblock-unread-char
