From: Eli Zaretskii Date: Sat, 6 Apr 2013 07:41:09 +0000 (+0300) Subject: Fix the non-creation of backup files in temporary-file directory on Windows. X-Git-Url: http://git.hcoop.net/bpt/emacs.git/commitdiff_plain/33bb237a73a4ba97f21e673dac36b1f8c1299289 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. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1af9905c7e..8b249977e4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2013-04-06 Eli Zaretskii + + * 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. + 2013-04-05 Stefan Monnier * emacs-lisp/package.el (package-compute-transaction): Fix last fix. diff --git a/lisp/files.el b/lisp/files.el index 06958622d1..d098f0fcec 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.