chiark
/
gitweb
/
~mdw
/
lisp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of metalzone:public-git/lisp
[lisp]
/
safely.lisp
diff --git
a/safely.lisp
b/safely.lisp
index 8cd0f9a635dd6e137414f46448bba475a23e473a..84a06c4a6cd65649c745410327c9e388d24c761f 100644
(file)
--- a/
safely.lisp
+++ b/
safely.lisp
@@
-33,7
+33,13
@@
(in-package #:safely)
#+(or cmu sbcl)
(eval-when (:compile-toplevel :execute)
(import #+cmu '(ext:unix-namestring unix:unix-link)
#+(or cmu sbcl)
(eval-when (:compile-toplevel :execute)
(import #+cmu '(ext:unix-namestring unix:unix-link)
- #+sbcl '(sb-int:unix-namestring)))
+ #+sbcl '(sb-ext:native-namestring)))
+#+cmu
+(progn
+ (declaim (inline unix-namestring))
+ (defun native-namestring (pathname &key as-file)
+ (declare (ignore as-file))
+ (unix-namestring pathname nil)))
(defstruct (safely (:predicate safelyp))
"Stores information about how to commit or undo safe writes."
(defstruct (safely (:predicate safelyp))
"Stores information about how to commit or undo safe writes."
@@
-158,17
+164,21
@@
(defun safe-copy (file tag)
;; Use link(2) where available.
(generate-fresh-file-name file tag
(lambda (name)
;; Use link(2) where available.
(generate-fresh-file-name file tag
(lambda (name)
- (let ((from (unix-namestring file t))
- (to (unix-namestring name nil)))
+ (let ((from (native-namestring file
+ :as-file t))
+ (to (native-namestring name
+ :as-file t)))
(and from to
(unix-link from to)))))
#+clisp
(generate-fresh-file-name file tag
(lambda (name)
(and from to
(unix-link from to)))))
#+clisp
(generate-fresh-file-name file tag
(lambda (name)
- (>= (unix:link (namestring file)
- (namestring name))
- 0)))
+ (posix:copy-file (namestring file)
+ (namestring name)
+ :method :hardlink
+ :if-exists nil)))
+
#-(or cmu sbcl)
#-(or cmu sbcl)