diff --git a/code/stream.lisp b/code/stream.lisp
index 3b409db946210de3d4b85d232197af99822c777d..6213d023dbf0b2371338af5c206f701b76f13385 100644
--- a/code/stream.lisp
+++ b/code/stream.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/stream.lisp,v 1.37 1998/12/20 04:17:26 dtc Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/stream.lisp,v 1.38 1999/02/02 10:54:32 dtc Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -971,20 +971,21 @@
   unread-stuff)
 
 
-(macrolet ((in-fun (name fun out-slot stream-method &rest args)
-	     `(defun ,name (stream ,@args)
+(macrolet ((in-fun (name fun out-slot stream-method)
+	     `(defun ,name (stream eof-errorp eof-value)
 		(or (pop (echo-stream-unread-stuff stream))
 		    (let* ((in (echo-stream-input-stream stream))
 			   (out (echo-stream-output-stream stream))
-			   (result (,fun in ,@args)))
-		      (if (lisp-stream-p out)
-			  (funcall (,out-slot out) out result)
-			  (,stream-method out result))
-		      result)))))
-  (in-fun echo-in read-char lisp-stream-out stream-write-char
-	  eof-errorp eof-value)
-  (in-fun echo-bin read-byte lisp-stream-bout stream-write-byte
-	  eof-errorp eof-value))
+			   (result (,fun in nil :eof)))
+		      (cond ((eq result :eof)
+			     (eof-or-lose stream eof-errorp eof-value))
+			    (t
+			     (if (lisp-stream-p out)
+				 (funcall (,out-slot out) out result)
+				 (,stream-method out result))
+			     result)))))))
+  (in-fun echo-in read-char lisp-stream-out stream-write-char)
+  (in-fun echo-bin read-byte lisp-stream-bout stream-write-byte))
 
 (defun echo-misc (stream operation &optional arg1 arg2)
   (let* ((in (two-way-stream-input-stream stream))