changeset 80220:c67d2b72f70a

(make-auto-save-file-name): Encode more characters in non-file buffer names. Use url-encoding.
author Jason Rumney <jasonr@gnu.org>
date Tue, 26 Feb 2008 16:52:02 +0000
parents ac7edea19aab
children e4842173cecd
files lisp/files.el
diffstat 1 files changed, 10 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/files.el	Tue Feb 26 16:34:36 2008 +0000
+++ b/lisp/files.el	Tue Feb 26 16:52:02 2008 +0000
@@ -4561,15 +4561,18 @@
     (let ((buffer-name (buffer-name))
 	  (limit 0)
 	  file-name)
-      ;; Eliminate all slashes and backslashes by
-      ;; replacing them with sequences that start with %.
-      ;; Quote % also, to keep distinct names distinct.
-      (while (string-match "[/\\%]" buffer-name limit)
+      ;; Restrict the characters used in the file name to those which
+      ;; are known to be safe on all filesystems, url-encoding the
+      ;; rest.
+      ;; We do this on all platforms, because even if we are not
+      ;; running on DOS/Windows, the current directory may be on a
+      ;; mounted VFAT filesystem, such as a USB memory stick.
+      (while (string-match "[^A-Za-z0-9-_.~#+]" buffer-name limit)
 	(let* ((character (aref buffer-name (match-beginning 0)))
 	       (replacement
-		(cond ((eq character ?%) "%%")
-		      ((eq character ?/) "%+")
-		      ((eq character ?\\) "%-"))))
+                ;; For multibyte characters, this will produce more than
+                ;; 2 hex digits, so is not true URL encoding.
+                (format "%%%02X" character)))
 	  (setq buffer-name (replace-match replacement t t buffer-name))
 	  (setq limit (1+ (match-end 0)))))
       ;; Generate the file name.