chiark / gitweb /
Whitespace cleanups across the board.
[lisp] / safely.lisp
index 9809f07ee5bf87fe257131a66a0012c28b57cf4e..43ea4fed73a9f48918a378c22b0942884da7b90d 100644 (file)
@@ -110,12 +110,26 @@ (defun safely-open-output-stream (safe file &rest open-args)
          (safely-trail safe))
     stream))
 
+#+clisp
+(progn
+  (ffi:def-call-out %rename (:name "rename")
+    (:language :stdc)
+    (:library "libc.so.6")
+    (:arguments (from ffi:c-string)
+               (to ffi:c-string))
+    (:return-type ffi:int)))
+
 (declaim (inline rename))
 (defun rename (old new)
+  #-clisp
   (let ((target (make-pathname :directory '(:relative)
                               :defaults new)))
-    #-clisp (rename-file old target)
-    #+clisp (rename-file old target :if-exists :overwrite)))
+    (rename-file old target))
+
+  #+clisp
+  (let ((rc (%rename (namestring old) (namestring new))))
+    (when (= rc -1)
+      (error "Failed to rename ~S to ~S: ~A" old new (posix:strerror)))))
 
 (defun delete-file-without-moaning (file)
   "Delete the FILE, ignoring errors."
@@ -181,9 +195,7 @@ (defun safe-copy (file tag)
                                               :method :hardlink
                                               :if-exists nil)))
 
-
-
-  #-(or cmu sbcl)
+  #-(or cmu sbcl clisp)
   ;; Otherwise just copy the file contents and hope for the best.
   (with-open-file (input file :element-type :default)
     (multiple-value-bind