Mercurial > emacs
changeset 43755:485d5d33f9d6
(make-auto-save-file-name): Make sure the produced file
name does not contain characters that are invalid for DOS/Windows
filesystems.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Wed, 06 Mar 2002 18:19:43 +0000 |
parents | 877062848c63 |
children | 321baeaafdc2 |
files | lisp/files.el |
diffstat | 1 files changed, 46 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/files.el Wed Mar 06 17:00:30 2002 +0000 +++ b/lisp/files.el Wed Mar 06 18:19:43 2002 +0000 @@ -3308,22 +3308,33 @@ (setq list (cdr list))) (if result (setq filename result)) - (if (and (eq system-type 'ms-dos) - (not (msdos-long-file-names))) - ;; We truncate the file name to DOS 8+3 limits before - ;; doing anything else, because the regexp passed to - ;; string-match below cannot handle extensions longer than - ;; 3 characters, multiple dots, and other atrocities. - (let ((fn (dos-8+3-filename - (file-name-nondirectory buffer-file-name)))) - (string-match "\\`\\([^.]+\\)\\(\\.\\(..?\\)?.?\\|\\)\\'" fn) - (concat (file-name-directory buffer-file-name) - "#" (match-string 1 fn) - "." (match-string 3 fn) "#")) - (concat (file-name-directory filename) - "#" - (file-name-nondirectory filename) - "#"))) + (setq result + (if (and (eq system-type 'ms-dos) + (not (msdos-long-file-names))) + ;; We truncate the file name to DOS 8+3 limits + ;; before doing anything else, because the regexp + ;; passed to string-match below cannot handle + ;; extensions longer than 3 characters, multiple + ;; dots, and other atrocities. + (let ((fn (dos-8+3-filename + (file-name-nondirectory buffer-file-name)))) + (string-match + "\\`\\([^.]+\\)\\(\\.\\(..?\\)?.?\\|\\)\\'" + fn) + (concat (file-name-directory buffer-file-name) + "#" (match-string 1 fn) + "." (match-string 3 fn) "#")) + (concat (file-name-directory filename) + "#" + (file-name-nondirectory filename) + "#"))) + ;; Make sure auto-save file names don't contain characters + ;; invalid for the underlying filesystem. + (if (and (memq system-type '(ms-dos windows-nt)) + ;; Don't modify remote (ange-ftp) filenames + (not (string-match "^/\\w+@[-A-Za-z0-9._]+:" result))) + (convert-standard-filename result) + result)) ;; Deal with buffers that don't have any associated files. (Mail ;; mode tends to create a good number of these.) @@ -3343,13 +3354,25 @@ (setq limit (1+ (match-end 0))))) ;; Generate the file name. (make-temp-file - (expand-file-name - (format "#%s#" buffer-name) - ;; Try a few alternative directories, to get one we can write it. - (cond - ((file-writable-p default-directory) default-directory) - ((file-writable-p "/var/tmp/") "/var/tmp/") - ("~/"))))))) + (let ((fname + (expand-file-name + (format "#%s#" buffer-name) + ;; Try a few alternative directories, to get one we can + ;; write it. + (cond + ((file-writable-p default-directory) default-directory) + ((file-writable-p "/var/tmp/") "/var/tmp/") + ("~/"))))) + (if (and (memq system-type '(ms-dos windows-nt)) + ;; Don't modify remote (ange-ftp) filenames + (not (string-match "^/\\w+@[-A-Za-z0-9._]+:" fname))) + ;; The call to convert-standard-filename is in case + ;; buffer-name includes characters not allowed by the + ;; DOS/Windows filesystems. make-temp-file writes to the + ;; file it creates, so we must fix the file name _before_ + ;; make-temp-file is called. + (convert-standard-filename fname) + fname)))))) (defun auto-save-file-name-p (filename) "Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'.