diff options
author | Eli Zaretskii <eliz@gnu.org> | 2010-12-04 14:52:04 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2010-12-04 14:52:04 +0200 |
commit | 2472c214a6fe78dcbb5eb6df9b6074fb31c0509c (patch) | |
tree | 10e98ba3bc8d3a5b097a1fc358bf5c8f7d1e2e66 | |
parent | 4f1948eb4c9e4ba07c50978363c565368d406de1 (diff) | |
download | emacs-2472c214a6fe78dcbb5eb6df9b6074fb31c0509c.tar.gz |
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.
-rw-r--r-- | lisp/ChangeLog | 5 | ||||
-rw-r--r-- | lisp/files.el | 22 |
2 files changed, 25 insertions, 2 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f6514c16577..aaa55e9abfe 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -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): diff --git a/lisp/files.el b/lisp/files.el index 4901c3872cd..97dce0fc1e5 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -4054,11 +4054,29 @@ on a DOS/Windows machine, it returns FILENAME in expanded form." (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 |