anchor.diff:  
   (defmethod directory-using-host ((host fat32-host) pathname &key)
     (let ((file-data (open-file-metadata host pathname))
  -        (stack '())
  -        (path (directory-namestring pathname)))
  +        (stack '()))
       (do-files (file) file-data
         t
  -      (push
  -       (parse-simple-file-path host
  -                               (format nil
  -                                       (if (file-p file-data file)
  -                                           "~a~a"
  -                                           "~a~a>")
  -                                       path
  -                                       (read-file-name file-data file)))
  -       stack))
  -    (return-from directory-using-host stack)))
  +      (push (parse-simple-file-path host
  +                                    (format nil
  +                                            (if (file-p file-data file)
  +                                                "~a~a"
  +                                                "~a~a>")
  +                                            (directory-namestring pathname)
  +                                            (read-file-name file-data file)))
  +            stack))
  +    stack))
   
   (defmethod ensure-directories-exist-using-host ((host fat32-host) pathname &key verbose)
     ;; TODO verbose
  
positive.code:                                                                 (pathname-name pathname)
                                                                  (pathname-type pathname)
                                                                  (ash 1 +attribute-archive+))
                                     created-file t
                                     abort-action :delete)
                               (error 'simple-file-error
                                      :pathname pathname
                                      :format-control "File ~A does not exist. ~S"
                                      :format-arguments (list pathname (file-name pathname)))))))))
        (when (and (not created-file) (member direction '(:output :io)))
          (ecase if-exists
            (:error (error 'simple-file-error
                           :pathname pathname
  
negative.code:         (assert source-start (source-start) "Source file not found. ~s" source)
          (multiple-value-bind (dest-dir dest-cluster dest-start) (open-file-metadata host dest)
            (assert (not dest-start) (dest-start) "Destination file alredy exist. ~s" dest)
            (do-file (i source-start) source-dir
              (let ((start (if (< i 0)
                               source-start
                               (+ 32 i))))
                (if (string= (file-name source)
                             (file-name dest))
                    (let ((metadata (subseq source-dir start (+ 32 source-start))))
                      (replace dest-dir metadata :start1 (next-n-spaces dest-dir (/ (length metadata) 32))))
                    ;; Write short name part
                    (let* ((pathname-name (pathname-name dest))
                           (pathname-type (pathname-type dest))
                           (name (concatenate 'string pathname-name "." pathname-type))
                           (short-name (make-short-name pathname-name pathname-type dest-dir))
                           (name-length (length name))
                           (start-offset (next-n-spaces dest-dir (if (> name-length 11)
                                                                     (1+ (ceiling
                                                                          (/ name-length 13)))
                                                                     1)))
                           (end-offset (+ start-offset (ash (if (> name-length 11)
                                                                (ceiling (/ name-length 13))
                                                                0)
                                                            5))))
                      ;; Copy short part
                      (let ((metadata (subseq source-dir source-start (+ 32 source-start))))
                        (replace dest-dir metadata :start1 end-offset))
                      ;; Change short name
                      (setf (read-short-name dest-dir end-offset) short-name)
                      ;; Write long name parts only if needed
                      (unless (and (>= 8 (length pathname-name))
                                   (>= 3 (length pathname-type)))
                        (setf (read-long-name dest-dir start-offset) name))))
                (if (equalp (pathname-directory source)
                            (pathname-directory dest))
                    (loop :for part-offset :from start :to source-start :by 32
                          :do (setf (aref dest-dir part-offset) #xE5))
                    (progn (loop :for part-offset :from start :to source-start :by 32
                                 :do (setf (aref source-dir part-offset) #xE5))
                           (write-file (fat-structure host) (partition host) source-cluster (fat host) source-dir)))
                (write-file (fat-structure host) (partition host) dest-cluster (fat host) dest-dir)))))))
  
  (defmethod file-write-date-using-host ((host fat32-host) path)
    (multiple-value-bind (parent-dir parent-cluster file-offset) (open-file-metadata host path)
  