summaryrefslogtreecommitdiff
path: root/lisp/files.el
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2013-04-06 10:41:09 +0300
committerEli Zaretskii <eliz@gnu.org>2013-04-06 10:41:09 +0300
commit33bb237a73a4ba97f21e673dac36b1f8c1299289 (patch)
treefd1904d5ce25925f8990cb052fc0f43c67766fff /lisp/files.el
parentcd542620197df6fefe2c2bebca1967ec84e8fa7c (diff)
downloademacs-33bb237a73a4ba97f21e673dac36b1f8c1299289.tar.gz
Fix the non-creation of backup files in temporary-file directory on Windows.
lisp/files.el (normal-backup-enable-predicate): On MS-Windows and MS-DOS compare truenames of temporary-file-directory and of the file, so that 8+3 aliases (usually found in $TEMP on Windows) don't fail comparison by compare-strings. Also, compare file names case-insensitively on MS-Windows and MS-DOS.
Diffstat (limited to 'lisp/files.el')
-rw-r--r--lisp/files.el42
1 files changed, 25 insertions, 17 deletions
diff --git a/lisp/files.el b/lisp/files.el
index 06958622d14..d098f0fcec7 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -4180,23 +4180,31 @@ ignored."
"Default `backup-enable-predicate' function.
Checks for files in `temporary-file-directory',
`small-temporary-file-directory', and /tmp."
- (not (or (let ((comp (compare-strings temporary-file-directory 0 nil
- name 0 nil)))
- ;; Directory is under temporary-file-directory.
- (and (not (eq comp t))
- (< comp (- (length temporary-file-directory)))))
- (let ((comp (compare-strings "/tmp" 0 nil
- name 0 nil)))
- ;; Directory is under /tmp.
- (and (not (eq comp t))
- (< comp (- (length "/tmp")))))
- (if small-temporary-file-directory
- (let ((comp (compare-strings small-temporary-file-directory
- 0 nil
- name 0 nil)))
- ;; Directory is under small-temporary-file-directory.
- (and (not (eq comp t))
- (< comp (- (length small-temporary-file-directory)))))))))
+ (let ((temporary-file-directory temporary-file-directory)
+ caseless)
+ ;; On MS-Windows, file-truename will convert short 8+3 alises to
+ ;; their long file-name equivalents, so compare-strings does TRT.
+ (if (memq system-type '(ms-dos windows-nt))
+ (setq temporary-file-directory (file-truename temporary-file-directory)
+ name (file-truename name)
+ caseless t))
+ (not (or (let ((comp (compare-strings temporary-file-directory 0 nil
+ name 0 nil caseless)))
+ ;; Directory is under temporary-file-directory.
+ (and (not (eq comp t))
+ (< comp (- (length temporary-file-directory)))))
+ (let ((comp (compare-strings "/tmp" 0 nil
+ name 0 nil)))
+ ;; Directory is under /tmp.
+ (and (not (eq comp t))
+ (< comp (- (length "/tmp")))))
+ (if small-temporary-file-directory
+ (let ((comp (compare-strings small-temporary-file-directory
+ 0 nil
+ name 0 nil caseless)))
+ ;; Directory is under small-temporary-file-directory.
+ (and (not (eq comp t))
+ (< comp (- (length small-temporary-file-directory))))))))))
(defun make-backup-file-name (file)
"Create the non-numeric backup file name for FILE.