It seems to do two separate pathname merges. Use RENAME-FILE instead:
it may be mad, but at least it's mad in a well-understood way. We still
need :IF-EXISTS :OVERWRITE because CLisp makes life unnecessarily
difficult.
(declaim (inline rename))
(defun rename (old new)
- #-clisp (rename-file old
- (make-pathname :directory '(:relative)
- :defaults new))
- #+clisp (posix:copy-file old new :method :rename))
+ (let ((target (make-pathname :directory '(:relative)
+ :defaults new)))
+ #-clisp (rename-file old target)
+ #+clisp (rename-file old target :if-exists :overwrite)))
(defun delete-file-without-moaning (file)
"Delete the FILE, ignoring errors."