changeset 111898:6264215e64a3

Fix bug #4674 with UNCs in file-relative-name. files.el (file-relative-name): Handle UNC file names on DOS/Windows. Also fixes bug#4673.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 04 Dec 2010 14:52:04 +0200
parents b4a45bb251e4
children 3b293c5ab354
files lisp/ChangeLog lisp/files.el
diffstat 2 files changed, 25 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sat Dec 04 13:45:59 2010 +0200
+++ b/lisp/ChangeLog	Sat Dec 04 14:52:04 2010 +0200
@@ -1,3 +1,8 @@
+2010-12-04  Eli Zaretskii  <eliz@gnu.org>
+
+	* files.el (file-relative-name): Handle UNC file names on
+	DOS/Windows.  (Bug#4674)
+
 2010-12-02  Glenn Morris  <rgm@gnu.org>
 
 	* ps-print.el (ps-line-lengths-internal, ps-nb-pages):
--- a/lisp/files.el	Sat Dec 04 13:45:59 2010 +0200
+++ b/lisp/files.el	Sat Dec 04 14:52:04 2010 +0200
@@ -4054,11 +4054,29 @@
           (dremote (file-remote-p directory)))
       (if ;; Conditions for separate trees
 	  (or
-	   ;; Test for different drives on DOS/Windows
+	   ;; Test for different filesystems on DOS/Windows
 	   (and
 	    ;; Should `cygwin' really be included here?  --stef
 	    (memq system-type '(ms-dos cygwin windows-nt))
-	    (not (eq t (compare-strings filename 0 2 directory 0 2))))
+	    (or
+	     ;; Test for different drive letters
+	     (not (eq t (compare-strings filename 0 2 directory 0 2)))
+	     ;; Test for UNCs on different servers
+	     (not (eq t (compare-strings
+			 (progn
+			   (if (string-match "\\`//\\([^:/]+\\)/" filename)
+			       (match-string 1 filename)
+			     ;; Windows file names cannot have ? in
+			     ;; them, so use that to detect when
+			     ;; neither FILENAME nor DIRECTORY is a
+			     ;; UNC.
+			     "?"))
+			 0 nil
+			 (progn
+			   (if (string-match "\\`//\\([^:/]+\\)/" directory)
+			       (match-string 1 directory)
+			     "?"))
+			 0 nil t)))))
 	   ;; Test for different remote file system identification
 	   (not (equal fremote dremote)))
 	  filename