Index: /trunk/ccl/level-1/l1-sockets.lisp
===================================================================
--- /trunk/ccl/level-1/l1-sockets.lisp	(revision 383)
+++ /trunk/ccl/level-1/l1-sockets.lisp	(revision 384)
@@ -254,5 +254,6 @@
   (when (socket-device socket)
     (fd-close (socket-device socket))
-    (setf (socket-device socket) nil)))
+    (setf (socket-device socket) nil)
+    t))
 
 ;; A passive tcp socket just generates connection streams
Index: /trunk/ccl/level-1/l1-streams.lisp
===================================================================
--- /trunk/ccl/level-1/l1-streams.lisp	(revision 383)
+++ /trunk/ccl/level-1/l1-streams.lisp	(revision 384)
@@ -244,11 +244,9 @@
 (defmethod close ((stream stream) &key abort)
   (declare (ignore abort))
-  nil)
-
-(defmethod close :after ((stream stream) &key abort)
-  (declare (ignore abort))
-  (unless (slot-value stream 'closed)
-    (set-slot-value stream 'closed :closed)
-    t))
+  (with-slots ((closed closed)) stream
+      (unless closed
+	(setf closed nil))))
+
+
 
 (defmethod open-stream-p ((x t))
@@ -1679,5 +1677,4 @@
   ())
 
-
 (defmethod close :after ((stream buffered-stream-mixin) &key abort)
   (declare (ignore abort))
@@ -1686,9 +1683,8 @@
       (%ioblock-close ioblock))))
 
-
 (defmethod close :before ((stream buffered-output-stream-mixin) &key abort)
-  (declare (ignore abort))
-  (when (open-stream-p stream)
-    (stream-force-output stream)))
+  (unless abort
+    (when (open-stream-p stream)
+      (stream-force-output stream))))
 
 (defmethod interactive-stream-p ((stream buffered-stream-mixin))
Index: /trunk/ccl/level-1/l1-sysio.lisp
===================================================================
--- /trunk/ccl/level-1/l1-sysio.lisp	(revision 383)
+++ /trunk/ccl/level-1/l1-sysio.lisp	(revision 384)
@@ -471,5 +471,6 @@
 	  (delete-file original-name)))
       (setq *open-file-streams* (nremove s *open-file-streams*))
-      (call-next-method))))
+      (call-next-method)
+      t)))
 
 (defmethod select-stream-class ((class file-stream) in-p out-p char-p)
@@ -621,5 +622,8 @@
 (defun file-string-length (stream object)
   (unless (and (typep stream 'file-stream)
-	       (eq 'character (stream-element-type stream)))
+	       (let* ((eltype (stream-element-type stream)))
+		 (or (eq 'character eltype)
+		     (eq 'base-char eltype)
+		     (subtypep eltype 'character))))
     (error "~S is not a file stream capable of character output" stream))
   (etypecase object
