safely.lisp: CLisp's POSIX:COPY-FILE :METHOD :RENAME is a disaster.
[lisp] / safely.lisp
index 69fceed..9809f07 100644 (file)
 
 (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."