Subject: Re: bug#14030: 24.3; expand-file-name expands remote file name on Windows incorrectly

From: Michael Albinus <[email-masked]>
Date: Sat, 23 Mar 2013 13:13:37 +0100

Eli Zaretskii <[email-masked]> writes:

> This is due to some change in Tramp, specifically in
> tramp-sh-file-name-handler: it returned "/ssh:user@host:/" in 24.2,
> but "/ssh:user@host:c:/" in 24.3.  Michael, could you please take a
> look?

This is competely strange. In `tramp-sh-handle-expand-file-name', there
is the following code at the very end:

      (let ((directory-sep-char ?/)
	    (default-directory (tramp-compat-temporary-file-directory)))
	(tramp-make-tramp-file-name
	 method user host
	 (tramp-drop-volume-letter
	  (tramp-run-real-handler
	   'expand-file-name (list localname)))
	 hop)))))

In Emacs 24.3, `tramp-drop-volume-letter' is not executed:

| | | | 5 -> tramp-run-real-handler: operation=expand-file-name args=("/root/")
| | | | 5 <- tramp-run-real-handler: "c:/root/"
| | | | 5 -> tramp-make-tramp-file-name: method="plink" user=nil host="ford" localname="c:/root/" hop=nil
| | | | 5 <- tramp-make-tramp-file-name: "/plink:ford:c:/root/"

When I use Emacs 24.3.50, the latest snapshot, that function is
executed:

| | | | 5 -> (tramp-run-real-handler expand-file-name ("/root/"))
| | | | 5 <- tramp-run-real-handler: "c:/root/"
| | | | 5 -> (tramp-drop-volume-letter "c:/root/")
| | | | 5 <- tramp-drop-volume-letter: "/root/"
| | | | 5 -> (tramp-make-tramp-file-name "plink" nil "ford" "/root/" nil)
| | | | 5 <- tramp-make-tramp-file-name: "/plink:ford:/root/"

I have no idea, what prevents `tramp-drop-volume-letter' to be called.
If you want to reproduce my test, I have setup the traces like this:

(require 'tramp)
(require 'trace)
(dolist (elt (all-completions "tramp-" obarray 'functionp))
  (trace-function-background (intern elt)))

(expand-file-name "/plink:ford:")

Best regards, Michael.