anchor.diff:      (otherwise post-op-attr)))
   
   (defun call-read-dir-plus (dhandle count &key max (cookie 0) verf (host *nfs-host*) (port *nfs-port*) protocol)
  -  (%call-read-dir-plus (list dhandle cookie (or verf (make-cookie-verf3)) count (or max count))
  -		       :host host
  -		       :port port
  -		       :protocol protocol))
  +  (let ((res (%call-read-dir-plus (list dhandle cookie (or verf (make-cookie-verf3)) count (or max count))
  +				  :host host
  +				  :port port
  +				  :protocol protocol)))
  +    (if (eq (xunion-tag res) :ok)
  +	(destructuring-bind (attr cverf dlist) (xunion-val res)
  +	  (list attr cverf 
  +		(make-dir-list3-plus 
  +		 :eof (dir-list3-plus-eof dlist)
  +		 :entries
  +		 (do ((entries (dir-list3-plus-entries dlist) (%entry3-plus-next-entry entries))
  +		      (elist nil))
  +		     ((null entries) elist)
  +		   (push (%entry3-plus-entry entries) elist)))))
  +	(error "READ-DIR-PLUS failed: ~A" (xunion-tag res)))))
  +
   
   (defhandler %handle-read-dir-plus (args 17)
  -  (destructuring-bind (dir cookie verf count max) args
  -    (declare (ignore dir cookie count max))
  -    (make-xunion :ok 
  -		 (list nil verf (make-dir-list3-plus :eof t)))))
  +  (destructuring-bind (dh cookie verf count max) args
  +    (declare (ignore cookie verf count max))
  +    (let ((dhandle (find-handle dh)))
  +      (if dhandle 
  +	  (let ((files (cl-fad:list-directory (handle-pathname dhandle)))
  +		(dlist3 (make-dir-list3-plus :eof t)))
  +	    (do ((%files files (cdr %files))
  +		 (fileid 0 (1+ fileid)))
  +		((null %files))
  +	      (let* ((path (car %files))
  +		     (handle (allocate-handle dhandle (or (pathname-name path)
  +							  (car (last (pathname-directory path)))))))
  +		(when handle 
  +		  (setf (dir-list3-plus-entries dlist3)
  +			(make-%entry3-plus :entry 
  +					   (make-entry3-plus :fileid fileid
  +							     :name (if (cl-fad:directory-pathname-p path)
  +								       (car (last (pathname-directory path)))
  +								       (format nil "~A~A~A" 
  +									       (pathname-name path)
  +									       (if (pathname-type path)
  +										   "."
  +										   "")
  +									       (if (pathname-type path)
  +										   (pathname-type path)
  +										   "")))
  +							     :handle (handle-fh handle))
  +					   :next-entry (dir-list3-plus-entries dlist3))))))
  +	    (make-xunion :ok 
  +			 (list nil (make-cookie-verf3) dlist3)))
  +	  (make-xunion :bad-handle nil)))))
   
   ;; ------------------------------------------------------
   ;; fs stat -- get dynamic filesystem info
  
positive.code:     (otherwise (:list wcc-data wcc-data))))
  
  (defun call-rename (from-dhandle from-filename to-filename &key to-dhandle (host *nfs-host*) (port *nfs-port*) protocol)
    (%call-rename (list (make-dir-op-args3 :dir from-dhandle 
  					 :name from-filename)
  		      (make-dir-op-args3 :dir (or to-dhandle from-dhandle)
  					 :name to-filename))
  		:host host
  		:port port
  		:protocol protocol))
  
  (defhandler %handle-rename (args 14)
    (destructuring-bind (from to) args
  
negative.code:     (otherwise (:list post-op-attr wcc-data))))
  
  (defun call-link (handle dhandle filename &key (host *nfs-host*) (port *nfs-port*) protocol)
    (let ((res (%call-link (list handle (make-dir-op-args3 :dir dhandle :name filename))
  			 :host host
  			 :port port
  			 :protocol protocol)))
      (if (eq (xunion-tag res) :ok)
  	(destructuring-bind (attr wcc) (xunion-val res)
  	  (values attr wcc))
  	(error "LINK failed: ~A" (xunion-tag res)))))
  	
  ;;(defhandler %handle-link (args 15)
  ;;  (destructuring-bind (handle dirop) args
  ;;    (declare (ignore handle dirop))
  