(cond ((eq object t)
;; No new descriptor is needed.
(values -1 nil))
- ((eq object nil)
+ ((or (eq object nil)
+ (and (typep object 'broadcast-stream)
+ (not (broadcast-stream-streams object))))
;; Use /dev/null.
(multiple-value-bind
(fd errno)
(loop with buf = (make-array 256 :element-type '(unsigned-byte 8))
for p = (read-sequence buf object)
until (zerop p)
- do (sb-unix:unix-write fd buf 0 p))))
+ do (sb-unix:unix-write fd buf 0 p)))
+ (t
+ (error "Don't know how to copy from stream of element-type ~S"
+ et)))
(sb-unix:unix-lseek fd 0 sb-unix:l_set)
(push fd *close-in-parent*)
(return (values fd nil)))))
(assert (= 0 (read-sequence (make-array 8) out)))
(assert (equalp buf data)))))
+(with-test (:name :run-program-cat-4)
+ ;; Null broadcast stream as output
+ (let* ((process (sb-ext:run-program "/bin/cat" '() :wait nil
+ :output (make-broadcast-stream)
+ :input :stream))
+ (in (process-input process)))
+ (unwind-protect
+ (progn
+ (write-string "foobar" in)
+ (close in)
+ (process-wait process))
+ (process-close process))))
+
;;; Test driving an external program (cat) through pipes wrapped in
;;; composite streams.
(defparameter *cat-out-pipe* (make-pipe))
(defparameter *cat-out* (make-synonym-stream '*cat-out-pipe*))
-(with-test (:name :run-program-cat-2)
+(with-test (:name :run-program-cat-5)
(let ((cat (run-program "/bin/cat" nil :input *cat-in* :output *cat-out*
:wait nil)))
(dolist (test '("This is a test!"
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.48.14"
+"1.0.48.15"