;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for System version 126.98
;;; Reason:
;;;  Patch from Marc Rinfret (Silicart).  Prevents Chaos property list stream
;;;  (stream :PROPERTIES method) from getting jumbled command string.
;;;  Unfortunately, this functionality isn't working for other reasons I
;;;  haven't figured out yet.
;;; Written 29-Sep-88 19:07:13 by keith (Keith Corbett) at site Gigamos Cambridge
;;; while running on Breaking Glass from band 1
;;; with Experimental System 126.94, Experimental ZWEI 126.13, Experimental ZMail 74.2, Experimental Local-File 76.0, Experimental File-Server 25.0, Experimental Lambda-Diag 18.0, Experimental Unix-Interface 15.0, Experimental Tape 26.4, microcode 1762, SDU Boot Tape 3.14, SDU ROM 103.



; From modified file DJ: L.NETWORK.CHAOS; QFILE.LISP#386 at 29-Sep-88 19:07:14
#8R FILE-SYSTEM#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "FILE-SYSTEM")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; CHAOS; QFILE  "

(DEFUN MAKE-FILE-PROPERTY-LIST-STREAM-CHAOS (ACCESS COMMAND WHOSTATE
					     STRING-ARG TOKEN-ARGS PATHNAME NO-ERROR-P
					     &AUX DATA-CONN HOST-UNIT PKT SUCCESS NOT-ABORTED
					     STRING
					     (DEFAULT-CONS-AREA SYS:BACKGROUND-CONS-AREA))
  (MULTIPLE-VALUE (DATA-CONN HOST-UNIT)
    (SEND ACCESS :GET-DATA-CONNECTION :INPUT))
  (UNWIND-PROTECT
      (PROGN
	(MULTIPLE-VALUE-SETQ (PKT SUCCESS STRING)
	  (SEND HOST-UNIT :COMMAND NIL (DATA-INPUT-HANDLE DATA-CONN) NIL WHOSTATE
				   COMMAND #/space
				   TOKEN-ARGS #/NEWLINE
				   STRING-ARG #/NEWLINE))
	(COND ((NOT SUCCESS)
	       (SETQ NOT-ABORTED T)
	       (SETQ STRING (STRING-APPEND STRING))
	       (SETF (DATA-STREAM DATA-CONN :INPUT) NIL)
	       (QFILE-PROCESS-ERROR-NEW STRING PATHNAME NIL NO-ERROR-P :DIRECTORY-STREAM))
	      (T
	       (QFILE-CHECK-COMMAND COMMAND STRING)
	       (PROG1 (MAKE-INSTANCE 'QFILE-DIRECTORY-STREAM
				     :HOST-UNIT HOST-UNIT
				     :DATA-CONNECTION DATA-CONN
				     :PATHNAME PATHNAME)
		      (SETQ NOT-ABORTED T)))))
    (AND PKT (CHAOS:RETURN-PKT PKT))
    ;; Both success and failure set NOT-ABORTED once they get past critical section.
    (UNLESS (OR NOT-ABORTED
		(NULL DATA-CONN)
		(NULL (SEND HOST-UNIT :CONTROL-CONNECTION)))
      ;; Here if aborted out of it and server may have directory stream open.
      (CONDITION-CASE ()
	  (MULTIPLE-VALUE-BIND (pkt CLOSE-SUCCESS)
	      (SEND HOST-UNIT :COMMAND NIL (DATA-INPUT-HANDLE DATA-CONN) NIL "Close" "CLOSE")
	    (and pkt (chaos:return-pkt pkt))
	    (WHEN CLOSE-SUCCESS
	      (READ-UNTIL-SYNCHRONOUS-MARK (DATA-CONNECTION DATA-CONN)))
	    (SEND HOST-UNIT :FREE-DATA-CONNECTION DATA-CONN :INPUT))
	(SYS:HOST-STOPPED-RESPONDING NIL)))))

))
