summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorMichael Albinus <michael.albinus@gmx.de>2018-07-31 06:50:30 +0200
committerMichael Albinus <michael.albinus@gmx.de>2018-07-31 06:50:30 +0200
commit82d6416a28dc5b4ab65b8081f035679bec4e3604 (patch)
tree82452a2104b5e153afdd0f876844ddba64bba71e /lisp
parent63ef79329935b790b9c8107125bce66e1f272c2e (diff)
downloademacs-82d6416a28dc5b4ab65b8081f035679bec4e3604.tar.gz
Fix Bug#32304
* lisp/net/tramp.el (tramp-handle-substitute-in-file-name): Handle special cas on Cygwin and MS-Windows. (Bug#32304)
Diffstat (limited to 'lisp')
-rw-r--r--lisp/net/tramp.el12
1 files changed, 8 insertions, 4 deletions
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index d56b09a604d..1af2defd586 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -3567,16 +3567,20 @@ support symbolic links."
;; First, we must replace environment variables.
(setq filename (tramp-replace-environment-variables filename))
(with-parsed-tramp-file-name filename nil
- ;; We do not want to replace environment variables, again.
+ ;; We do not want to replace environment variables, again. "//"
+ ;; has a special meaning at the beginning of a file name on
+ ;; Cygwin and MS-Windows, we must remove it.
(let (process-environment)
;; Ignore in LOCALNAME everything before "//" or "/~".
(when (stringp localname)
(if (string-match "//\\(/\\|~\\)" localname)
- (setq filename (substitute-in-file-name localname))
+ (setq filename
+ (replace-regexp-in-string
+ "\\`/+" "/" (substitute-in-file-name localname)))
(setq filename
(concat (file-remote-p filename)
- (tramp-run-real-handler
- 'substitute-in-file-name (list localname)))))))
+ (replace-regexp-in-string
+ "\\`/+" "/" (substitute-in-file-name localname)))))))
;; "/m:h:~" does not work for completion. We use "/m:h:~/".
(if (and (stringp localname) (string-equal "~" localname))
(concat filename "/")