unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#6339: url-filename => "/c:/some/file.txt"
@ 2010-06-03  2:38 Lennart Borgman
  2010-06-03 11:13 ` Juanma Barranquero
  2010-07-26 11:50 ` Juanma Barranquero
  0 siblings, 2 replies; 50+ messages in thread
From: Lennart Borgman @ 2010-06-03  2:38 UTC (permalink / raw)
  To: 6339

(setq x (url-generic-parse-url "file:///c:/some/file.txt"))
(url-filename x) => "/c:/some/file.txt"

Should not that be "c:/some/file.txt"?





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2010-06-03  2:38 bug#6339: url-filename => "/c:/some/file.txt" Lennart Borgman
@ 2010-06-03 11:13 ` Juanma Barranquero
  2010-07-26 11:50 ` Juanma Barranquero
  1 sibling, 0 replies; 50+ messages in thread
From: Juanma Barranquero @ 2010-06-03 11:13 UTC (permalink / raw)
  To: Lennart Borgman; +Cc: 6339

> Should not that be "c:/some/file.txt"?

Yes.

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2010-06-03  2:38 bug#6339: url-filename => "/c:/some/file.txt" Lennart Borgman
  2010-06-03 11:13 ` Juanma Barranquero
@ 2010-07-26 11:50 ` Juanma Barranquero
  2010-07-26 12:00   ` Lennart Borgman
                     ` (3 more replies)
  1 sibling, 4 replies; 50+ messages in thread
From: Juanma Barranquero @ 2010-07-26 11:50 UTC (permalink / raw)
  To: Lennart Borgman; +Cc: 6339

On Thu, Jun 3, 2010 at 04:38, Lennart Borgman <lennart.borgman@gmail.com> wrote:

> (setq x (url-generic-parse-url "file:///c:/some/file.txt"))
> (url-filename x) => "/c:/some/file.txt"
>
> Should not that be "c:/some/file.txt"?

This is caused by url-generic-parse-url thinking that in
file://HOST/PATH, the path is /PATH, when in fact, according to the
relevant RFCs, "/" is a separator and part of the URI syntax, and PATH
is an absolute path (to be interpreted as starting from / on Unix, but
that's irrelevant). This was extensively discussed in bug#5345.

The subyacent cause of the bug, IMHO, is that many software for POSIX
environments that parses URIs just takes the /PATH part as a whole
because it is easier than removing the slash and then re-adding it.
That breaks on Windows file: URIs, as this bug, and #5345, show.

So the right fix IMO is as simple as the attached patch. The problem
is that it will likely cause trouble for other users of
url-generic-parse-url which wrongly assume that the path part will be
rooted at /.

Another, hacky & ugly, fix is removing the slash only if the PATH part
matches /[A-Z]:.

I'd rather fix it the good way and watch the fireworks.


    Juanma



=== modified file 'lisp/url/url-parse.el'
--- lisp/url/url-parse.el	2010-06-22 16:48:53 +0000
+++ lisp/url/url-parse.el	2010-07-26 11:46:11 +0000
@@ -148,4 +148,5 @@
           ;; 3.3. Path
+	  (when (looking-at "/") (forward-char 1))
           ;; Gross hack to preserve ';' in data URLs
           (setq save-pos (point))





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2010-07-26 11:50 ` Juanma Barranquero
@ 2010-07-26 12:00   ` Lennart Borgman
  2010-08-01 18:46   ` Juanma Barranquero
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 50+ messages in thread
From: Lennart Borgman @ 2010-07-26 12:00 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: 6339

On Mon, Jul 26, 2010 at 1:50 PM, Juanma Barranquero <lekktu@gmail.com> wrote:
>
> The subyacent cause of the bug, IMHO, is that many software for POSIX
> environments that parses URIs just takes the /PATH part as a whole
> because it is easier than removing the slash and then re-adding it.
> That breaks on Windows file: URIs, as this bug, and #5345, show.
>
> So the right fix IMO is as simple as the attached patch. The problem
> is that it will likely cause trouble for other users of
> url-generic-parse-url which wrongly assume that the path part will be
> rooted at /.
>
> Another, hacky & ugly, fix is removing the slash only if the PATH part
> matches /[A-Z]:.
>
> I'd rather fix it the good way and watch the fireworks.


I agree.





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2010-07-26 11:50 ` Juanma Barranquero
  2010-07-26 12:00   ` Lennart Borgman
@ 2010-08-01 18:46   ` Juanma Barranquero
  2010-08-02  7:51     ` Michael Albinus
  2011-09-21 20:28   ` Lars Magne Ingebrigtsen
  2012-05-09  9:04   ` Chong Yidong
  3 siblings, 1 reply; 50+ messages in thread
From: Juanma Barranquero @ 2010-08-01 18:46 UTC (permalink / raw)
  To: 6339

Anyone opposed to trying this patch on the trunk and seeing what breaks?

  J


> === modified file 'lisp/url/url-parse.el'
> --- lisp/url/url-parse.el       2010-06-22 16:48:53 +0000
> +++ lisp/url/url-parse.el       2010-07-26 11:46:11 +0000
> @@ -148,4 +148,5 @@
>           ;; 3.3. Path
> +         (when (looking-at "/") (forward-char 1))
>           ;; Gross hack to preserve ';' in data URLs
>           (setq save-pos (point))
>





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2010-08-01 18:46   ` Juanma Barranquero
@ 2010-08-02  7:51     ` Michael Albinus
  0 siblings, 0 replies; 50+ messages in thread
From: Michael Albinus @ 2010-08-02  7:51 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: 6339

Juanma Barranquero <lekktu@gmail.com> writes:

> Anyone opposed to trying this patch on the trunk and seeing what breaks?

I'm in favour of this patch. The current behaviour could cause trouble
to Tramp.

>   J

Best regards, Michael.





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2010-07-26 11:50 ` Juanma Barranquero
  2010-07-26 12:00   ` Lennart Borgman
  2010-08-01 18:46   ` Juanma Barranquero
@ 2011-09-21 20:28   ` Lars Magne Ingebrigtsen
  2011-09-21 22:21     ` Juanma Barranquero
  2012-05-09  9:04   ` Chong Yidong
  3 siblings, 1 reply; 50+ messages in thread
From: Lars Magne Ingebrigtsen @ 2011-09-21 20:28 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: 6339

Juanma Barranquero <lekktu@gmail.com> writes:

> On Thu, Jun 3, 2010 at 04:38, Lennart Borgman <lennart.borgman@gmail.com> wrote:
>
>> (setq x (url-generic-parse-url "file:///c:/some/file.txt"))
>> (url-filename x) => "/c:/some/file.txt"
>>
>> Should not that be "c:/some/file.txt"?

[...]

> I'd rather fix it the good way and watch the fireworks.
>
>     Juanma
>
> === modified file 'lisp/url/url-parse.el'
> --- lisp/url/url-parse.el	2010-06-22 16:48:53 +0000
> +++ lisp/url/url-parse.el	2010-07-26 11:46:11 +0000
> @@ -148,4 +148,5 @@
>            ;; 3.3. Path
> +	  (when (looking-at "/") (forward-char 1))
>            ;; Gross hack to preserve ';' in data URLs
>            (setq save-pos (point))

If I say:

(setq x (url-generic-parse-url "file:///home/larsi/foo.txt"))

Then I get

(url-filename x)
=> "/home/larsi/foo.txt"

as expected.  Would your patch break that?

-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-21 20:28   ` Lars Magne Ingebrigtsen
@ 2011-09-21 22:21     ` Juanma Barranquero
  2011-09-21 22:31       ` Lennart Borgman
  0 siblings, 1 reply; 50+ messages in thread
From: Juanma Barranquero @ 2011-09-21 22:21 UTC (permalink / raw)
  To: Lars Magne Ingebrigtsen; +Cc: 6339

On Wed, Sep 21, 2011 at 22:28, Lars Magne Ingebrigtsen <larsi@gnus.org> wrote:

> If I say:
>
> (setq x (url-generic-parse-url "file:///home/larsi/foo.txt"))
>
> Then I get
>
> (url-filename x)
> => "/home/larsi/foo.txt"
>
> as expected.  Would your patch break that?

My patch would return "home/larsi/foo.txt", yes.

But expecting the slash is a "bug" in you expectations, because the
*filename* (the path, according to the RFCs, see below) of

  file:///home/larsi/foo.txt

is not "/home/larsi/foo.txt". The slash is a separator, part of the
URI syntax, and "home/larsi/foo.txt" is an absolute path. It's easier
to see it with the full syntax, in things like

  file://localhost/home/larsi/foo.txt

for example. The fact that url-filename returns the slash is a bug;
just one that nobody has fixed or complained about because it makes
easier to process the path than having to do

  (concat "/" (url-filename "file:///mypath"))

At least, until you have a Windows URI. And no, this is *not* a
Windows problem or a Windows bug, it's a bug that makes life easier
for POSIX at the cost of making it uglier for Windows.

    Juanma


From RFC 1738 "Uniform Resource Locators (URL)"

3.10 FILES

   The file URL scheme is used to designate files accessible on a
   particular host computer. This scheme, unlike most other URL schemes,
   does not designate a resource that is universally accessible over the
   Internet.

   A file URL takes the form:

       file://<host>/<path>

   where <host> is the fully qualified domain name of the system on
   which the <path> is accessible, and <path> is a hierarchical
   directory path of the form <directory>/<directory>/.../<name>.

   For example, a VMS file

     DISK$USER:[MY.NOTES]NOTE123456.TXT

   might become

     <URL:file://vms.host.edu/disk$user/my/notes/note12345.txt>

   As a special case, <host> can be the string "localhost" or the empty
   string; this is interpreted as `the machine from which the URL is
   being interpreted'.

   The file URL scheme is unusual in that it does not specify an
   Internet protocol or access method for such files; as such, its
   utility in network protocols between hosts is limited.





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-21 22:21     ` Juanma Barranquero
@ 2011-09-21 22:31       ` Lennart Borgman
  2011-09-21 22:45         ` Juanma Barranquero
  0 siblings, 1 reply; 50+ messages in thread
From: Lennart Borgman @ 2011-09-21 22:31 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 00:21, Juanma Barranquero <lekktu@gmail.com> wrote:
> On Wed, Sep 21, 2011 at 22:28, Lars Magne Ingebrigtsen <larsi@gnus.org> wrote:
>
>> If I say:
>>
>> (setq x (url-generic-parse-url "file:///home/larsi/foo.txt"))
>>
>> Then I get
>>
>> (url-filename x)
>> => "/home/larsi/foo.txt"
>>
>> as expected.  Would your patch break that?
>
> My patch would return "home/larsi/foo.txt", yes.
>
> But expecting the slash is a "bug" in you expectations, because the
> *filename* (the path, according to the RFCs, see below) of
>
>  file:///home/larsi/foo.txt
>
> is not "/home/larsi/foo.txt". The slash is a separator, part of the
> URI syntax, and "home/larsi/foo.txt" is an absolute path. It's easier
> to see it with the full syntax, in things like
>
>  file://localhost/home/larsi/foo.txt
>
> for example. The fact that url-filename returns the slash is a bug;
> just one that nobody has fixed or complained about because it makes
> easier to process the path than having to do
>
>  (concat "/" (url-filename "file:///mypath"))

Are we not dealing with two different file name syntaxes here that
just happens to look very similar? I.e. the URL file name syntax and
the unix style file name syntax.

url-filename is now returning the file name in unix style. This is, as
you said, practical, but a bit surprising. I suspect there are some
small mixing of those syntaxes elsewhere too. My suggestion would be
to keep them and document them.


> At least, until you have a Windows URI. And no, this is *not* a
> Windows problem or a Windows bug, it's a bug that makes life easier
> for POSIX at the cost of making it uglier for Windows.

Indeed.





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-21 22:31       ` Lennart Borgman
@ 2011-09-21 22:45         ` Juanma Barranquero
  2011-09-21 22:51           ` Lennart Borgman
  0 siblings, 1 reply; 50+ messages in thread
From: Juanma Barranquero @ 2011-09-21 22:45 UTC (permalink / raw)
  To: Lennart Borgman; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 00:31, Lennart Borgman
<lennart.borgman@gmail.com> wrote:

> Are we not dealing with two different file name syntaxes here that
> just happens to look very similar? I.e. the URL file name syntax and
> the unix style file name syntax.

I would expect that an accessor for the filename slot of a struct
called URL would interpret the struct as a URL, and the "filename" of
the URL does not start with a slash. Why would I expect that
url-filename (url-generic-parse-url, in fact) returns anything "unix
style" specific?

> url-filename is now returning the file name in unix style.

No.

  (url-generic-parse-url "file:///C:/my/file.xt") => [cl-struct-url
"file" nil nil "" 21 "/C:/my/file.txt" nil nil t nil]

That's not a "file name in unix style", that's a bug, clear and
simple. There's no reason why url-generic-parse-url should think that
a URL is in some kind of "unix style". What if it is a VMS filename?

> This is, as
> you said, practical, but a bit surprising. I suspect there are some
> small mixing of those syntaxes elsewhere too. My suggestion would be
> to keep them and document them.

"Keep them and document them" still means that it does not work for
Windows or VMS or anything not POSIX-style. And fixing it just for
these systems means that we keep a bug for POSIX sake and make other
systems jump around hoops. Ugly, to say the least.

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-21 22:45         ` Juanma Barranquero
@ 2011-09-21 22:51           ` Lennart Borgman
  2011-09-21 22:59             ` Juanma Barranquero
  0 siblings, 1 reply; 50+ messages in thread
From: Lennart Borgman @ 2011-09-21 22:51 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 00:45, Juanma Barranquero <lekktu@gmail.com> wrote:
> On Thu, Sep 22, 2011 at 00:31, Lennart Borgman
> <lennart.borgman@gmail.com> wrote:
>
>> Are we not dealing with two different file name syntaxes here that
>> just happens to look very similar? I.e. the URL file name syntax and
>> the unix style file name syntax.
>
> I would expect that an accessor for the filename slot of a struct
> called URL would interpret the struct as a URL, and the "filename" of
> the URL does not start with a slash. Why would I expect that
> url-filename (url-generic-parse-url, in fact) returns anything "unix
> style" specific?
>
>> url-filename is now returning the file name in unix style.
>
> No.
>
>  (url-generic-parse-url "file:///C:/my/file.xt") => [cl-struct-url
> "file" nil nil "" 21 "/C:/my/file.txt" nil nil t nil]
>
> That's not a "file name in unix style", that's a bug, clear and
> simple.

Ah, yes, of course. I thought everyone reading here was clear about that.

> There's no reason why url-generic-parse-url should think that
> a URL is in some kind of "unix style". What if it is a VMS filename?

You are right. I did not mean to imply that the current behaviour is ok.

>> This is, as
>> you said, practical, but a bit surprising. I suspect there are some
>> small mixing of those syntaxes elsewhere too. My suggestion would be
>> to keep them and document them.
>
> "Keep them and document them" still means that it does not work for
> Windows or VMS or anything not POSIX-style. And fixing it just for
> these systems means that we keep a bug for POSIX sake and make other
> systems jump around hoops. Ugly, to say the least.

Of course the behaviour must be fixed too. I meant to write that it is
ok that url-filename returns a system-dependent absolute file name
(for local files).





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-21 22:51           ` Lennart Borgman
@ 2011-09-21 22:59             ` Juanma Barranquero
  2011-09-21 23:15               ` Lennart Borgman
  0 siblings, 1 reply; 50+ messages in thread
From: Juanma Barranquero @ 2011-09-21 22:59 UTC (permalink / raw)
  To: Lennart Borgman; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 00:51, Lennart Borgman
<lennart.borgman@gmail.com> wrote:

> Of course the behaviour must be fixed too. I meant to write that it is
> ok that url-filename returns a system-dependent absolute file name
> (for local files).

When you do (url-filename (url-generic-parse-url "file:///SOMEPATH"))
you are not checking SOMEPATH against the local filesystem (the path
does not need to exist, for example). So, when you say
"system-dependant" and "local files", what you're really saying is
that SOMEPATH should be analyzed to see whether it is POSIX-style, or
Windows-style, or whatever, to "fix it" or "leave it alone" according
to the detected style.

And yes, we have already discussed that. It is certainly possible. It
is also ugly and ad hoc, and ugly too.

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-21 22:59             ` Juanma Barranquero
@ 2011-09-21 23:15               ` Lennart Borgman
  2011-09-21 23:18                 ` Juanma Barranquero
  0 siblings, 1 reply; 50+ messages in thread
From: Lennart Borgman @ 2011-09-21 23:15 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 00:59, Juanma Barranquero <lekktu@gmail.com> wrote:
> On Thu, Sep 22, 2011 at 00:51, Lennart Borgman
> <lennart.borgman@gmail.com> wrote:
>
>> Of course the behaviour must be fixed too. I meant to write that it is
>> ok that url-filename returns a system-dependent absolute file name
>> (for local files).
>
> When you do (url-filename (url-generic-parse-url "file:///SOMEPATH"))
> you are not checking SOMEPATH against the local filesystem (the path
> does not need to exist, for example). So, when you say
> "system-dependant" and "local files", what you're really saying is
> that SOMEPATH should be analyzed to see whether it is POSIX-style, or
> Windows-style, or whatever, to "fix it" or "leave it alone" according
> to the detected style.

The analysis of "file:///SOMEPATH" should probably be system
independent (since it is an URL that is analysed).

But the return value should be system dependant since it is supposed
to be a local file system absolute path.





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-21 23:15               ` Lennart Borgman
@ 2011-09-21 23:18                 ` Juanma Barranquero
  2011-09-21 23:32                   ` Lennart Borgman
  0 siblings, 1 reply; 50+ messages in thread
From: Juanma Barranquero @ 2011-09-21 23:18 UTC (permalink / raw)
  To: Lennart Borgman; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 01:15, Lennart Borgman
<lennart.borgman@gmail.com> wrote:

> But the return value should be system dependant since it is supposed
> to be a local file system absolute path.

Do you mean that Emacs running in a POSIX system cannot process file
URLs for Windows local files, for example?

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-21 23:18                 ` Juanma Barranquero
@ 2011-09-21 23:32                   ` Lennart Borgman
  2011-09-21 23:37                     ` Juanma Barranquero
  0 siblings, 1 reply; 50+ messages in thread
From: Lennart Borgman @ 2011-09-21 23:32 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 01:18, Juanma Barranquero <lekktu@gmail.com> wrote:
> On Thu, Sep 22, 2011 at 01:15, Lennart Borgman
> <lennart.borgman@gmail.com> wrote:
>
>> But the return value should be system dependant since it is supposed
>> to be a local file system absolute path.
>
> Do you mean that Emacs running in a POSIX system cannot process file
> URLs for Windows local files, for example?

I am not sure. Are URL style file name context dependent?





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-21 23:32                   ` Lennart Borgman
@ 2011-09-21 23:37                     ` Juanma Barranquero
  2011-09-21 23:46                       ` Lennart Borgman
  0 siblings, 1 reply; 50+ messages in thread
From: Juanma Barranquero @ 2011-09-21 23:37 UTC (permalink / raw)
  To: Lennart Borgman; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 01:32, Lennart Borgman
<lennart.borgman@gmail.com> wrote:

> I am not sure. Are URL style file name context dependent?

I don't understand your question, but I will be quite surprised if the
answer to my previous question is "yes".

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-21 23:37                     ` Juanma Barranquero
@ 2011-09-21 23:46                       ` Lennart Borgman
  2011-09-22  0:32                         ` Juanma Barranquero
  0 siblings, 1 reply; 50+ messages in thread
From: Lennart Borgman @ 2011-09-21 23:46 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 01:37, Juanma Barranquero <lekktu@gmail.com> wrote:
> On Thu, Sep 22, 2011 at 01:32, Lennart Borgman
> <lennart.borgman@gmail.com> wrote:
>
>> I am not sure. Are URL style file name context dependent?
>
> I don't understand your question, but I will be quite surprised if the
> answer to my previous question is "yes".

Then your answer to my question is that you will be surprised if URL
style file names are context dependent. ;-)

But unfortunately that might not be the right answer... Take this URL file name:

   file:///c:/some/file.txt

On windows that would be "c:/some/file.txt". What would it mean on a
unix system? I guess it would mean "/c:/some/file.txt", but I am not
sure. Perhaps that is an invalid file name on unix?





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-21 23:46                       ` Lennart Borgman
@ 2011-09-22  0:32                         ` Juanma Barranquero
  2011-09-22  0:40                           ` Lennart Borgman
  2011-09-24  3:35                           ` Jason Rumney
  0 siblings, 2 replies; 50+ messages in thread
From: Juanma Barranquero @ 2011-09-22  0:32 UTC (permalink / raw)
  To: Lennart Borgman; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 01:46, Lennart Borgman
<lennart.borgman@gmail.com> wrote:

> But unfortunately that might not be the right answer... Take this URL file name:
>
>   file:///c:/some/file.txt
>
> On windows that would be "c:/some/file.txt". What would it mean on a
> unix system? I guess it would mean "/c:/some/file.txt", but I am not
> sure. Perhaps that is an invalid file name on unix?

Quite likely, but IMO you're missing the point.

file:///c:/some/file.txt is a URL, i.e., it's a pointer to some
specific file in some specific place (or files with identical path and
name in different hosts, because the URL is missing the HOST part,
defaulting then to localhost). In fact, it is the URL that points to a
file, in some filesystem, with absolute path "c:/some/file.txt".
Whether that file exists, and whether that path makes sense when you
apply it locally to a POSIX system, i.e., whether you can access a
file with that URL, is irrelevant to the fact that "c:/some/file.txt"
is the path of the URL. You're muddling the waters when you insist in
"context" and "local system" and the like, because that affects to the
*use* of the URL, not its syntax. Splitting a URL into pieces
according to the RFC does not depend on where you do it or how do you
intend to use it.

We wouldn't be having this discussion in an alternative world where
the POSIX path separator was still "/", but the good people who wrote
the URI/URL specs had chosen "#" as the field separator in URLs:
file:##HOST#PATH

  file:###c:/some/file.txt  vs.  file:###some/file.txt

No one would try to split that as "#some/file.txt".

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-22  0:32                         ` Juanma Barranquero
@ 2011-09-22  0:40                           ` Lennart Borgman
  2011-09-22  0:59                             ` Juanma Barranquero
  2011-09-24  3:35                           ` Jason Rumney
  1 sibling, 1 reply; 50+ messages in thread
From: Lennart Borgman @ 2011-09-22  0:40 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 02:32, Juanma Barranquero <lekktu@gmail.com> wrote:
> On Thu, Sep 22, 2011 at 01:46, Lennart Borgman
> <lennart.borgman@gmail.com> wrote:
>
>> But unfortunately that might not be the right answer... Take this URL file name:
>>
>>   file:///c:/some/file.txt
>>
>> On windows that would be "c:/some/file.txt". What would it mean on a
>> unix system? I guess it would mean "/c:/some/file.txt", but I am not
>> sure. Perhaps that is an invalid file name on unix?
>
> Quite likely, but IMO you're missing the point.
>
> file:///c:/some/file.txt is a URL, i.e., it's a pointer to some
> specific file in some specific place (or files with identical path and
> name in different hosts, because the URL is missing the HOST part,
> defaulting then to localhost). In fact, it is the URL that points to a
> file, in some filesystem, with absolute path "c:/some/file.txt".

Yes, but please remember if you make that interpretation (which I hope
is the correct one) then "c:/some/file.txt" is an absolute local file
name in URL file name syntax.

So if we hold on to that interpretation then maybe we should say (and
document ;-) that url-filename returns such a file name and that it
needs to be translated to the actually used systems file syntax to be
used there.

This would be an incompatible change from the current (faulty)
behaviour, but I think it would be the best.

> Whether that file exists, and whether that path makes sense when you
> apply it locally to a POSIX system, i.e., whether you can access a
> file with that URL, is irrelevant to the fact that "c:/some/file.txt"
> is the path of the URL. You're muddling the waters when you insist in
> "context" and "local system" and the like, because that affects to the
> *use* of the URL, not its syntax. Splitting a URL into pieces
> according to the RFC does not depend on where you do it or how do you
> intend to use it.

Ah, yes. I think we are saying the same thing about the problem here.

> We wouldn't be having this discussion in an alternative world where
> the POSIX path separator was still "/", but the good people who wrote
> the URI/URL specs had chosen "#" as the field separator in URLs:
> file:##HOST#PATH
>
>  file:###c:/some/file.txt  vs.  file:###some/file.txt
>
> No one would try to split that as "#some/file.txt".

That is a good example.





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-22  0:40                           ` Lennart Borgman
@ 2011-09-22  0:59                             ` Juanma Barranquero
  2011-09-22  1:07                               ` Lennart Borgman
  0 siblings, 1 reply; 50+ messages in thread
From: Juanma Barranquero @ 2011-09-22  0:59 UTC (permalink / raw)
  To: Lennart Borgman; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 02:40, Lennart Borgman
<lennart.borgman@gmail.com> wrote:

> Yes, but please remember if you make that interpretation (which I hope
> is the correct one) then "c:/some/file.txt" is an absolute local file
> name in URL file name syntax.
>
> So if we hold on to that interpretation then maybe we should say (and
> document ;-) that url-filename returns such a file name and that it
> needs to be translated to the actually used systems file syntax to be
> used there.
>
> This would be an incompatible change from the current (faulty)
> behaviour, but I think it would be the best.

Isn't that what I've been saying all along?

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-22  0:59                             ` Juanma Barranquero
@ 2011-09-22  1:07                               ` Lennart Borgman
  2011-09-22  1:14                                 ` Juanma Barranquero
  0 siblings, 1 reply; 50+ messages in thread
From: Lennart Borgman @ 2011-09-22  1:07 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 02:59, Juanma Barranquero <lekktu@gmail.com> wrote:
> On Thu, Sep 22, 2011 at 02:40, Lennart Borgman
> <lennart.borgman@gmail.com> wrote:
>
>> Yes, but please remember if you make that interpretation (which I hope
>> is the correct one) then "c:/some/file.txt" is an absolute local file
>> name in URL file name syntax.
>>
>> So if we hold on to that interpretation then maybe we should say (and
>> document ;-) that url-filename returns such a file name and that it
>> needs to be translated to the actually used systems file syntax to be
>> used there.
>>
>> This would be an incompatible change from the current (faulty)
>> behaviour, but I think it would be the best.
>
> Isn't that what I've been saying all along?

If you say so ;-)





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-22  1:07                               ` Lennart Borgman
@ 2011-09-22  1:14                                 ` Juanma Barranquero
  2011-09-22  9:52                                   ` Lennart Borgman
  2011-10-06  5:09                                   ` Kevin Rodgers
  0 siblings, 2 replies; 50+ messages in thread
From: Juanma Barranquero @ 2011-09-22  1:14 UTC (permalink / raw)
  To: Lennart Borgman; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 03:07, Lennart Borgman
<lennart.borgman@gmail.com> wrote:

> If you say so ;-)

Well,

> Yes, but please remember if you make that interpretation (which I hope
> is the correct one) then "c:/some/file.txt" is an absolute local file
> name in URL file name syntax.

This is what the RFC says. I even quoted it.

> So if we hold on to that interpretation then maybe we should say (and
> document ;-) that url-filename returns such a file name

This I didn't say (but any change or unexpected behavior should be documented).

> and that it
> needs to be translated to the actually used systems file syntax to be
> used there.

I explicitly talked about (concat "/" (url-filename ...))

> This would be an incompatible change from the current (faulty)
> behaviour, but I think it would be the best.

This is what I've been saying in pretty much every message from this thread.

So yes, "I say so".

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-22  1:14                                 ` Juanma Barranquero
@ 2011-09-22  9:52                                   ` Lennart Borgman
  2011-10-06  5:09                                   ` Kevin Rodgers
  1 sibling, 0 replies; 50+ messages in thread
From: Lennart Borgman @ 2011-09-22  9:52 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Lars Magne Ingebrigtsen, 6339

On Thu, Sep 22, 2011 at 03:14, Juanma Barranquero <lekktu@gmail.com> wrote:
>
> This is what I've been saying in pretty much every message from this thread.
>
> So yes, "I say so".

And I said in my second message that I agree... ;-)





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-22  0:32                         ` Juanma Barranquero
  2011-09-22  0:40                           ` Lennart Borgman
@ 2011-09-24  3:35                           ` Jason Rumney
  2011-09-24  8:59                             ` Juanma Barranquero
                                               ` (2 more replies)
  1 sibling, 3 replies; 50+ messages in thread
From: Jason Rumney @ 2011-09-24  3:35 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Lars Magne Ingebrigtsen, 6339

Juanma Barranquero <lekktu@gmail.com> writes:

> file:///c:/some/file.txt is a URL, i.e., it's a pointer to some
> specific file in some specific place (or files with identical path and
> name in different hosts, because the URL is missing the HOST part,
> defaulting then to localhost). In fact, it is the URL that points to a
> file, in some filesystem, with absolute path "c:/some/file.txt".

No. That is not an absolute path on most platforms. The absolute path on
POSIX platforms would be /c:/some/file.txt, which is consistant with
other URL schemes where the initial / forms part of the PATH portion of
the URL.






^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-24  3:35                           ` Jason Rumney
@ 2011-09-24  8:59                             ` Juanma Barranquero
  2011-09-24  9:06                               ` Juanma Barranquero
  2011-09-24 11:53                               ` Andreas Schwab
  2011-09-24  9:46                             ` Lennart Borgman
  2011-09-24 12:28                             ` Richard Stallman
  2 siblings, 2 replies; 50+ messages in thread
From: Juanma Barranquero @ 2011-09-24  8:59 UTC (permalink / raw)
  To: Jason Rumney; +Cc: Lars Magne Ingebrigtsen, 6339

On Sat, Sep 24, 2011 at 05:35, Jason Rumney <jasonr@gnu.org> wrote:

> No. That is not an absolute path on most platforms.

The spec says that the PATH part is an absolute path. You can argue
that, in POSIX, "some/file.txt" is an absolute path, because all PATH
parts of file: URIs must be understood as such (and so, have an
implicit / at the front), or you can argue that these paths should be
propertly rooted (and so, the correct way for a POSIX file: reference
is file:////some.file.txt). But no amount of defining or redefining
"absolute" is going to change the fact that the third slash in
file:/// is a separator, and no part of the PATH, according to the
spec.

> The absolute path on
> POSIX platforms would be /c:/some/file.txt, which is consistant with
> other URL schemes where the initial / forms part of the PATH portion of
> the URL.

I don't know what other URLs schemes say, but certainly RFC 1738 says:

3.3. HTTP

   The HTTP URL scheme is used to designate Internet resources
   accessible using HTTP (HyperText Transfer Protocol).

   The HTTP protocol is specified elsewhere. This specification only
   describes the syntax of HTTP URLs.

   An HTTP URL takes the form:

      http://<host>:<port>/<path>?<searchpart>

   where <host> and <port> are as described in Section 3.1. If :<port>
   is omitted, the port defaults to 80.  No user name or password is
   allowed.  <path> is an HTTP selector, and <searchpart> is a query
   string. The <path> is optional, as is the <searchpart> and its
   preceding "?". If neither <path> nor <searchpart> is present, the "/"
   may also be omitted.

   Within the <path> and <searchpart> components, "/", ";", "?" are
   reserved.  The "/" character may be used within HTTP to designate a
   hierarchical structure.

so it's no different of "file:". The slash is a separator.

If people doesn''t want to change the way Emacs works, and prefer to
add ad hoc fixes for Windows URIs, I can do nothing against it. It's
ugly, but such is life. But let's accept that using that slash is just
a shortcut because it conveniently happens to coincide with the POSIX
slash separator, not because it is really part of the path.

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-24  8:59                             ` Juanma Barranquero
@ 2011-09-24  9:06                               ` Juanma Barranquero
  2011-09-24 11:53                               ` Andreas Schwab
  1 sibling, 0 replies; 50+ messages in thread
From: Juanma Barranquero @ 2011-09-24  9:06 UTC (permalink / raw)
  To: Jason Rumney; +Cc: Lars Magne Ingebrigtsen, 6339

On Sat, Sep 24, 2011 at 10:59, Juanma Barranquero <lekktu@gmail.com> wrote:

> You can argue
> that, in POSIX, "some/file.txt" is an absolute path, because all PATH
> parts of file: URIs must be understood as such (and so, have an
> implicit / at the front),

I mean that "some/file.txt" is an absolute path, in the context of
decoding and splitting an URI, of course. Obviously it is not in
general terms.

That said, I suppose that people who thinks that the third slash is
not a separator, but part of the PATH, should also be arguing in favor
of Windows-style file: URIs being of the form
"file://C:/some/file.txt" (which is clearly incorrect, according to
the spec, and certainly unused in the wild). What does not make sense
is arguing that the value returned by url-generic-parse-url is
correct.

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-24  3:35                           ` Jason Rumney
  2011-09-24  8:59                             ` Juanma Barranquero
@ 2011-09-24  9:46                             ` Lennart Borgman
  2011-09-24 12:28                             ` Richard Stallman
  2 siblings, 0 replies; 50+ messages in thread
From: Lennart Borgman @ 2011-09-24  9:46 UTC (permalink / raw)
  To: Jason Rumney; +Cc: Juanma Barranquero, Lars Magne Ingebrigtsen, 6339

On Sat, Sep 24, 2011 at 05:35, Jason Rumney <jasonr@gnu.org> wrote:
> Juanma Barranquero <lekktu@gmail.com> writes:
>
>> file:///c:/some/file.txt is a URL, i.e., it's a pointer to some
>> specific file in some specific place (or files with identical path and
>> name in different hosts, because the URL is missing the HOST part,
>> defaulting then to localhost). In fact, it is the URL that points to a
>> file, in some filesystem, with absolute path "c:/some/file.txt".
>
> No. That is not an absolute path on most platforms.

This is not about absolute path in the platform syntax. It is an
absolute path as understood as part of an URL. That has to be
translated to a platform path.





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-24  8:59                             ` Juanma Barranquero
  2011-09-24  9:06                               ` Juanma Barranquero
@ 2011-09-24 11:53                               ` Andreas Schwab
  2011-09-24 21:56                                 ` Juanma Barranquero
  1 sibling, 1 reply; 50+ messages in thread
From: Andreas Schwab @ 2011-09-24 11:53 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Lars Magne Ingebrigtsen, 6339

Juanma Barranquero <lekktu@gmail.com> writes:

> I don't know what other URLs schemes say, but certainly RFC 1738 says:
>
> 3.3. HTTP

Note that the interpretation of the local part is scheme dependent, so
you cannot compare file: and http: directly.

RFC 1738 defines fileurl in terms of fpath, which is shared with ftpurl.
In an ftp URL an absolute fpath needs to be written with a leading
escaped slash (%2F).  RFCs 4722 and 5022 consistently use four leading
slashes for an absolute file name.  OTOH there are a few occurrences of
file URLs denoting absolute paths with only three slashes in other RFCs.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-24  3:35                           ` Jason Rumney
  2011-09-24  8:59                             ` Juanma Barranquero
  2011-09-24  9:46                             ` Lennart Borgman
@ 2011-09-24 12:28                             ` Richard Stallman
  2 siblings, 0 replies; 50+ messages in thread
From: Richard Stallman @ 2011-09-24 12:28 UTC (permalink / raw)
  To: Jason Rumney; +Cc: lekktu, larsi, 6339

    > defaulting then to localhost). In fact, it is the URL that points to a
    > file, in some filesystem, with absolute path "c:/some/file.txt".

    No. That is not an absolute path on most platforms.

Please note that the GNU terminology for this is "file name" -- "path"
means a list of directories, only.


-- 
Dr Richard Stallman
President, Free Software Foundation
51 Franklin St
Boston MA 02110
USA
www.fsf.org  www.gnu.org
Skype: No way! That's nonfree (freedom-denying) software.
  Use free telephony http://directory.fsf.org/category/tel/





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-24 11:53                               ` Andreas Schwab
@ 2011-09-24 21:56                                 ` Juanma Barranquero
  2011-09-24 23:42                                   ` Andreas Schwab
  0 siblings, 1 reply; 50+ messages in thread
From: Juanma Barranquero @ 2011-09-24 21:56 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Lars Magne Ingebrigtsen, 6339

On Sat, Sep 24, 2011 at 13:53, Andreas Schwab <schwab@linux-m68k.org> wrote:

> In an ftp URL an absolute fpath needs to be written with a leading
> escaped slash (%2F).  RFCs 4722 and 5022 consistently use four leading
> slashes for an absolute file name.  OTOH there are a few occurrences of
> file URLs denoting absolute paths with only three slashes in other RFCs.

I think we're in agreement: there are several ways to interpret the
PATH part, but in all cases, it does not include the separator slash.

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-24 21:56                                 ` Juanma Barranquero
@ 2011-09-24 23:42                                   ` Andreas Schwab
  2011-09-25  0:02                                     ` Juanma Barranquero
  0 siblings, 1 reply; 50+ messages in thread
From: Andreas Schwab @ 2011-09-24 23:42 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Lars Magne Ingebrigtsen, 6339

Juanma Barranquero <lekktu@gmail.com> writes:

> On Sat, Sep 24, 2011 at 13:53, Andreas Schwab <schwab@linux-m68k.org> wrote:
>
>> In an ftp URL an absolute fpath needs to be written with a leading
>> escaped slash (%2F).  RFCs 4722 and 5022 consistently use four leading
>> slashes for an absolute file name.  OTOH there are a few occurrences of
>> file URLs denoting absolute paths with only three slashes in other RFCs.
>
> I think we're in agreement: there are several ways to interpret the
> PATH part, but in all cases, it does not include the separator slash.

That's not the point.  If you interpret the local part as an absolute
file name you have to prepend a slash after decomposing.  If not, then
file:///etc/hosts wouldn't work as probably intended.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-24 23:42                                   ` Andreas Schwab
@ 2011-09-25  0:02                                     ` Juanma Barranquero
  0 siblings, 0 replies; 50+ messages in thread
From: Juanma Barranquero @ 2011-09-25  0:02 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Lars Magne Ingebrigtsen, 6339

On Sun, Sep 25, 2011 at 01:42, Andreas Schwab <schwab@linux-m68k.org> wrote:

> If you interpret the local part as an absolute
> file name you have to prepend a slash after decomposing.  If not, then
> file:///etc/hosts wouldn't work as probably intended.

Of course. But that's not the point. The point is that how do you
interpret the local part is only important *after* decomposing the
URI. It's not url-generic-parse-url's task to do any interpretation.
Its docstring says just this:

  Return an url-struct of the parts of url.
  The CL-style struct contains the following fields:
  TYPE USER PASSWORD HOST PORTSPEC FILENAME TARGET ATTRIBUTES FULLNESS.

It says nothing of interpreting any of it, and specifically FILENAME,
POSIX-style. And if it does interpret it POSIX-style it is wreaking
havoc with Windows file: URIs (that's the whole point of this bug
report).

So, of course I agree with you when you say "If you interpret the
local part as an absolute file name you have to prepend a slash after
decomposing.", or more precisely, with what Lennart said previously:

> This is not about absolute path in the platform syntax. It is an
> absolute path as understood as part of an URL. That has to be
> translated to a platform path.

But this discussion is not about how to use the decomposed URI, is
about whether the decomposition is correct, or buggy (and so should be
fixed). I think the RFCs (the one I quoted and the ones you quoted)
show clearly that the current decomposition is erroneous, though
convenient for POSIX systems.

At this point, I can see only two options:

- Fix the bug, and fix also the places where the return value of
url-generic-parse-url / url-filename is assumed to be a POSIX absolute
path.
- Leave it as is, and implement some ad hoc hack to make it work with
Windows file: URIs.

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-09-22  1:14                                 ` Juanma Barranquero
  2011-09-22  9:52                                   ` Lennart Borgman
@ 2011-10-06  5:09                                   ` Kevin Rodgers
  2011-10-06 11:56                                     ` Juanma Barranquero
  1 sibling, 1 reply; 50+ messages in thread
From: Kevin Rodgers @ 2011-10-06  5:09 UTC (permalink / raw)
  To: 6339

On 9/21/11 7:14 PM, Juanma Barranquero wrote:
> On Thu, Sep 22, 2011 at 03:07, Lennart Borgman
> <lennart.borgman@gmail.com>  wrote:
>
>> If you say so ;-)
>
> Well,
>
>> Yes, but please remember if you make that interpretation (which I hope
>> is the correct one) then "c:/some/file.txt" is an absolute local file
>> name in URL file name syntax.
>
> This is what the RFC says. I even quoted it.
>
>> So if we hold on to that interpretation then maybe we should say (and
>> document ;-) that url-filename returns such a file name
>
> This I didn't say (but any change or unexpected behavior should be documented).
>
>> and that it
>> needs to be translated to the actually used systems file syntax to be
>> used there.
>
> I explicitly talked about (concat "/" (url-filename ...))

Don't you mean: (expand-file-name (url-filename ...) "/")

>> This would be an incompatible change from the current (faulty)
>> behaviour, but I think it would be the best.
>
> This is what I've been saying in pretty much every message from this thread.
>
> So yes, "I say so".
>
>      Juanma
>
>
>
>


-- 
Kevin Rodgers
Denver, Colorado, USA






^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06  5:09                                   ` Kevin Rodgers
@ 2011-10-06 11:56                                     ` Juanma Barranquero
  2011-10-06 12:43                                       ` Stefan Monnier
  0 siblings, 1 reply; 50+ messages in thread
From: Juanma Barranquero @ 2011-10-06 11:56 UTC (permalink / raw)
  To: Kevin Rodgers; +Cc: 6339

On Thu, Oct 6, 2011 at 07:09, Kevin Rodgers <kevin.d.rodgers@gmail.com> wrote:

> Don't you mean: (expand-file-name (url-filename ...) "/")

That's better and more correct, yes.

BTW, I would like to know whether we will finally do anything with
this bug. The fix is clear, is just that apparently some people
dislike it.

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06 11:56                                     ` Juanma Barranquero
@ 2011-10-06 12:43                                       ` Stefan Monnier
  2011-10-06 13:40                                         ` Juanma Barranquero
  0 siblings, 1 reply; 50+ messages in thread
From: Stefan Monnier @ 2011-10-06 12:43 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Kevin Rodgers, 6339

>> Don't you mean: (expand-file-name (url-filename ...) "/")
> That's better and more correct, yes.
> BTW, I would like to know whether we will finally do anything with
> this bug. The fix is clear, is just that apparently some people
> dislike it.

Could someone (re)send the proposed patch?


        Stefan





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06 12:43                                       ` Stefan Monnier
@ 2011-10-06 13:40                                         ` Juanma Barranquero
  2011-10-06 14:24                                           ` Jason Rumney
  2011-10-06 15:31                                           ` Stefan Monnier
  0 siblings, 2 replies; 50+ messages in thread
From: Juanma Barranquero @ 2011-10-06 13:40 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Kevin Rodgers, 6339

> Could someone (re)send the proposed patch?

The proposed patch is this, or something similar to this:

=== modified file 'lisp/url/url-parse.el'
--- lisp/url/url-parse.el       2010-06-22 16:48:53 +0000
+++ lisp/url/url-parse.el       2010-07-26 11:46:11 +0000
@@ -148,4 +148,5 @@
          ;; 3.3. Path
+         (when (looking-at "/") (forward-char 1))
          ;; Gross hack to preserve ';' in data URLs
          (setq save-pos (point))

but the gist of it is, make url-generic-parse-url not consider the
slash separator as part of the path. If we agree in that, we can then
decide whether that place is the right one to do it or not.

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06 13:40                                         ` Juanma Barranquero
@ 2011-10-06 14:24                                           ` Jason Rumney
  2011-10-06 14:30                                             ` Juanma Barranquero
  2011-10-06 15:31                                           ` Stefan Monnier
  1 sibling, 1 reply; 50+ messages in thread
From: Jason Rumney @ 2011-10-06 14:24 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Kevin Rodgers, 6339

Juanma Barranquero <lekktu@gmail.com> writes:

>> Could someone (re)send the proposed patch?
>
> The proposed patch is this, or something similar to this:
>
> === modified file 'lisp/url/url-parse.el'
> --- lisp/url/url-parse.el       2010-06-22 16:48:53 +0000
> +++ lisp/url/url-parse.el       2010-07-26 11:46:11 +0000
> @@ -148,4 +148,5 @@
>           ;; 3.3. Path
> +         (when (looking-at "/") (forward-char 1))
>           ;; Gross hack to preserve ';' in data URLs
>           (setq save-pos (point))
>
> but the gist of it is, make url-generic-parse-url not consider the
> slash separator as part of the path. If we agree in that, we can then
> decide whether that place is the right one to do it or not.

This is a general url-parsing function, changing this to not return
the leading / on the file portion of the url will break every other user
of this function.

This needs to be done for file URLs only, and be system-dependent.





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06 14:24                                           ` Jason Rumney
@ 2011-10-06 14:30                                             ` Juanma Barranquero
  2011-10-06 14:38                                               ` Jason Rumney
  0 siblings, 1 reply; 50+ messages in thread
From: Juanma Barranquero @ 2011-10-06 14:30 UTC (permalink / raw)
  To: Jason Rumney; +Cc: Kevin Rodgers, 6339

On Thu, Oct 6, 2011 at 16:24, Jason Rumney <jasonr@gnu.org> wrote:

> This is a general url-parsing function, changing this to not return
> the leading / on the file portion of the url will break every other user
> of this function.

Only the ones that incorrectly assume that the slash is part of the
path. The ones that use expand-file-name, as Kevin pointed out, will
continue to work.

> This needs to be done for file URLs only

Perhaps, but for non-file URLs, the slash isn't part of the path
either. That's what the RFCs say.

> and be system-dependent.

That's a hack.

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06 14:30                                             ` Juanma Barranquero
@ 2011-10-06 14:38                                               ` Jason Rumney
  2011-10-06 14:49                                                 ` Juanma Barranquero
                                                                   ` (2 more replies)
  0 siblings, 3 replies; 50+ messages in thread
From: Jason Rumney @ 2011-10-06 14:38 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Kevin Rodgers, 6339

Juanma Barranquero <lekktu@gmail.com> writes:

> On Thu, Oct 6, 2011 at 16:24, Jason Rumney <jasonr@gnu.org> wrote:
>
>> This is a general url-parsing function, changing this to not return
>> the leading / on the file portion of the url will break every other user
>> of this function.
>
> Only the ones that incorrectly assume that the slash is part of the
> path. The ones that use expand-file-name, as Kevin pointed out, will
> continue to work.

It is incorrect to assume that the slash is NOT part of the file portion
of the URL, when actual usage in http, ftp, gopher and file URLs on
platforms other than Windows and VMS relies on the leading slash being
preserved.





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06 14:38                                               ` Jason Rumney
@ 2011-10-06 14:49                                                 ` Juanma Barranquero
  2011-10-06 15:08                                                 ` Lennart Borgman
  2011-10-06 15:08                                                 ` Lennart Borgman
  2 siblings, 0 replies; 50+ messages in thread
From: Juanma Barranquero @ 2011-10-06 14:49 UTC (permalink / raw)
  To: Jason Rumney; +Cc: Kevin Rodgers, 6339

On Thu, Oct 6, 2011 at 16:38, Jason Rumney <jasonr@gnu.org> wrote:

> It is incorrect to assume that the slash is NOT part of the file portion
> of the URL, when actual usage in http, ftp, gopher and file URLs on
> platforms other than Windows and VMS relies on the leading slash being
> preserved.

[Today is my "whole disagreement day", it seems.] It's a fact that the
slash is NOT part of the file portion, whatever shortcuts people have
taken along the years.

That said, someone who really thinks that this is a Windows-specific
problem, even if it is not, can trivially "fix" it with an ugly hack.
Let's hope someone does and we can close this bug report forever.

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06 14:38                                               ` Jason Rumney
  2011-10-06 14:49                                                 ` Juanma Barranquero
@ 2011-10-06 15:08                                                 ` Lennart Borgman
  2011-10-06 15:08                                                 ` Lennart Borgman
  2 siblings, 0 replies; 50+ messages in thread
From: Lennart Borgman @ 2011-10-06 15:08 UTC (permalink / raw)
  To: Jason Rumney; +Cc: Juanma Barranquero, Kevin Rodgers, 6339

On Thu, Oct 6, 2011 at 16:38, Jason Rumney <jasonr@gnu.org> wrote:
> Juanma Barranquero <lekktu@gmail.com> writes:
>
>> On Thu, Oct 6, 2011 at 16:24, Jason Rumney <jasonr@gnu.org> wrote:
>>
>>> This is a general url-parsing function, changing this to not return
>>> the leading / on the file portion of the url will break every other user
>>> of this function.
>>
>> Only the ones that incorrectly assume that the slash is part of the
>> path. The ones that use expand-file-name, as Kevin pointed out, will
>> continue to work.
>
> It is incorrect to assume that the slash is NOT part of the file portion
> of the URL, when actual usage in http, ftp, gopher and file URLs on
> platforms other than Windows and VMS relies on the leading slash being
> preserved.

Didn't we conclude before that the URL style file part does not
include the leading "/"? Or was there any objection to this?

AFAICS the URL style file part simply does not have the same (as *nix
systems) file syntax. So I agree with Juanma here (which is not too
common ;-).





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06 14:38                                               ` Jason Rumney
  2011-10-06 14:49                                                 ` Juanma Barranquero
  2011-10-06 15:08                                                 ` Lennart Borgman
@ 2011-10-06 15:08                                                 ` Lennart Borgman
  2 siblings, 0 replies; 50+ messages in thread
From: Lennart Borgman @ 2011-10-06 15:08 UTC (permalink / raw)
  To: Jason Rumney; +Cc: Juanma Barranquero, Kevin Rodgers, 6339

On Thu, Oct 6, 2011 at 16:38, Jason Rumney <jasonr@gnu.org> wrote:
> Juanma Barranquero <lekktu@gmail.com> writes:
>
>> On Thu, Oct 6, 2011 at 16:24, Jason Rumney <jasonr@gnu.org> wrote:
>>
>>> This is a general url-parsing function, changing this to not return
>>> the leading / on the file portion of the url will break every other user
>>> of this function.
>>
>> Only the ones that incorrectly assume that the slash is part of the
>> path. The ones that use expand-file-name, as Kevin pointed out, will
>> continue to work.
>
> It is incorrect to assume that the slash is NOT part of the file portion
> of the URL, when actual usage in http, ftp, gopher and file URLs on
> platforms other than Windows and VMS relies on the leading slash being
> preserved.

Didn't we conclude before that the URL style file part does not
include the leading "/"? Or was there any objection to this?

AFAICS the URL style file part simply does not have the same (as *nix
systems) file syntax. So I agree with Juanma here (which is not too
common ;-).





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06 13:40                                         ` Juanma Barranquero
  2011-10-06 14:24                                           ` Jason Rumney
@ 2011-10-06 15:31                                           ` Stefan Monnier
  2011-10-06 15:56                                             ` Juanma Barranquero
  1 sibling, 1 reply; 50+ messages in thread
From: Stefan Monnier @ 2011-10-06 15:31 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Kevin Rodgers, 6339

>> Could someone (re)send the proposed patch?
> The proposed patch is this, or something similar to this:

> === modified file 'lisp/url/url-parse.el'
> --- lisp/url/url-parse.el       2010-06-22 16:48:53 +0000
> +++ lisp/url/url-parse.el       2010-07-26 11:46:11 +0000
> @@ -148,4 +148,5 @@
>           ;; 3.3. Path
> +         (when (looking-at "/") (forward-char 1))
>           ;; Gross hack to preserve ';' in data URLs
>           (setq save-pos (point))

> but the gist of it is, make url-generic-parse-url not consider the
> slash separator as part of the path. If we agree in that, we can then
> decide whether that place is the right one to do it or not.

I understand the gist of it.  I'm interested in the actual resulting
code changes: the above sample patch fails to include the corresponding
(expand-file-name (url-filename ...) "/"), for example.


        Stefan





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06 15:31                                           ` Stefan Monnier
@ 2011-10-06 15:56                                             ` Juanma Barranquero
  2011-10-06 16:49                                               ` Stefan Monnier
  0 siblings, 1 reply; 50+ messages in thread
From: Juanma Barranquero @ 2011-10-06 15:56 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Kevin Rodgers, 6339

On Thu, Oct 6, 2011 at 17:31, Stefan Monnier <monnier@iro.umontreal.ca> wrote:

> I understand the gist of it.

I'm sure of it.

> I'm interested in the actual resulting
> code changes: the above sample patch fails to include the corresponding
> (expand-file-name (url-filename ...) "/"), for example.

There are 41 uses of (url-filename ...) in the Emacs sources, all of
them in url\url*.el except two in net/xesam.el.

I'm unwilling to go looking for things to fix and prepare such a patch
unless there's some consensus that removing the slash is the Right
Thing to Do.

If the decision is that no, it isn't, then I suppose things like these:

---- C:\Devel\emacs\repo\trunk\lisp\url\url-handlers.el
        (or (file-name-directory (url-filename url)) "/")

---- C:\Devel\emacs\repo\trunk\lisp\url\url-parse.el
          (or (url-filename urlobj) "/")

---- C:\Devel\emacs\repo\trunk\lisp\url\url-expand.el
    (if (string-match "^/" (url-filename urlobj))

will have to be checked to see whether they are right for Windows.

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06 15:56                                             ` Juanma Barranquero
@ 2011-10-06 16:49                                               ` Stefan Monnier
  2011-10-06 16:54                                                 ` Juanma Barranquero
  0 siblings, 1 reply; 50+ messages in thread
From: Stefan Monnier @ 2011-10-06 16:49 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Kevin Rodgers, 6339

>> I'm interested in the actual resulting
>> code changes: the above sample patch fails to include the corresponding
>> (expand-file-name (url-filename ...) "/"), for example.
> There are 41 uses of (url-filename ...) in the Emacs sources, all of
> them in url\url*.el except two in net/xesam.el.

But the patch you sent changes url-generic-parse-url so it presumably
can affect many more places that just those that call url-filename.

> I'm unwilling to go looking for things to fix and prepare such a patch
> unless there's some consensus that removing the slash is the Right
> Thing to Do.

I think it's the right thing to do.  But maybe the best patch will need
to rename the `filename' slot and to define url-filename to do the
(expand-file-name (url-somethingelse URL) "/") or something like that.


        Stefan





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06 16:49                                               ` Stefan Monnier
@ 2011-10-06 16:54                                                 ` Juanma Barranquero
  2011-10-06 21:08                                                   ` Stefan Monnier
  0 siblings, 1 reply; 50+ messages in thread
From: Juanma Barranquero @ 2011-10-06 16:54 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Kevin Rodgers, 6339

On Thu, Oct 6, 2011 at 18:49, Stefan Monnier <monnier@iro.umontreal.ca> wrote:

> But the patch you sent changes url-generic-parse-url so it presumably
> can affect many more places that just those that call url-filename.

url-generic-parse-url returns a url struct, and url-filename is the
accessor for the slot. If there's code that uses the slot without
going through the accessor, well... I think that's a bug (or, at the
very least, dangerous and ugly) and sooner or later we'll find about
it.

> I think it's the right thing to do.  But maybe the best patch will need
> to rename the `filename' slot and to define url-filename to do the
> (expand-file-name (url-somethingelse URL) "/") or something like that.

I don't think you can do that, because, as explained before in the
thread, splitting the URL and using its parts are independent actions.
It is entirely possible to split a file URL and then use it in
different systems, isn't it?

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2011-10-06 16:54                                                 ` Juanma Barranquero
@ 2011-10-06 21:08                                                   ` Stefan Monnier
  0 siblings, 0 replies; 50+ messages in thread
From: Stefan Monnier @ 2011-10-06 21:08 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: Kevin Rodgers, 6339

>> But the patch you sent changes url-generic-parse-url so it presumably
>> can affect many more places that just those that call url-filename.
> url-generic-parse-url returns a url struct, and url-filename is the
> accessor for the slot. If there's code that uses the slot without
> going through the accessor, well... I think that's a bug (or, at the
> very least, dangerous and ugly) and sooner or later we'll find
> about it.

Sorry, yes, the above paragraph was written before I remembered that
url-filename was an accessor.  I just forgot to erase it before sending.

>> I think it's the right thing to do.  But maybe the best patch will need
>> to rename the `filename' slot and to define url-filename to do the
>> (expand-file-name (url-somethingelse URL) "/") or something like that.
> I don't think you can do that, because, as explained before in the
> thread, splitting the URL and using its parts are independent actions.
> It is entirely possible to split a file URL and then use it in
> different systems, isn't it?

Let's not talk about that for now.  Once there's a working patch
there'll be less chance for confusion.


        Stefan





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2010-07-26 11:50 ` Juanma Barranquero
                     ` (2 preceding siblings ...)
  2011-09-21 20:28   ` Lars Magne Ingebrigtsen
@ 2012-05-09  9:04   ` Chong Yidong
  2012-05-09 11:52     ` Juanma Barranquero
  3 siblings, 1 reply; 50+ messages in thread
From: Chong Yidong @ 2012-05-09  9:04 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: 6339

Ressurrecting this discussion...

I just looked at the relevant code and at RFC 3986, and I think the
problem is that the url object returned by url-generic-parse-url has
badly named slots.  That function ought to be following the RFC, instead
of imposing its own interpretation of things.  So the FILENAME slot,
which is returned by url-filename, should really be two slots, PATH and
QUERY, whose meanings are unambiguously defined in the URI spec.  And
there should be no expectation that the PATH part corresponds to a
filename.

In particular, RFC 3986 explicitly states that

  If a URI contains an authority component, then the path component must
  either be empty or begin with a slash ("/") character.

That is to say, the / is part of the path.

Unfortunately, it's inconvenient to change the contents of the struct
now, since that means changing the arglist of the url-parse-make-urlobj
constructor; that constructor is already called from Tramp, and maybe
other packages.  So I think we should just explicitly state that the
FILENAME slot is really PATH and QUERY together, and wash our hands of
the matter.

This also means that it should be up to callers to convert the FILENAME
slot (i.e. PATH and QUERY) into proper filenames.  The translation from
URIs to filenames is scheme-independent anyway, so it shouldn't be
handled at the level of url-generic-parse-url.





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2012-05-09  9:04   ` Chong Yidong
@ 2012-05-09 11:52     ` Juanma Barranquero
  2012-05-10 14:15       ` Chong Yidong
  0 siblings, 1 reply; 50+ messages in thread
From: Juanma Barranquero @ 2012-05-09 11:52 UTC (permalink / raw)
  To: Chong Yidong; +Cc: 6339

On Wed, May 9, 2012 at 11:04 AM, Chong Yidong <cyd@gnu.org> wrote:

> In particular, RFC 3986 explicitly states that
>
>  If a URI contains an authority component, then the path component must
>  either be empty or begin with a slash ("/") character.
>
> That is to say, the / is part of the path.

This means that it is part of the "path" component of the URI, used to
separate and disambiguate, but does not say anything about how that is
interpreted as a a filesystem path. In this case (with no authority):

  file:///C:/windows/path

"/C:/windows/path" is the "path", but it is obviously not a filesystem path.

> So I think we should just explicitly state that the
> FILENAME slot is really PATH and QUERY together, and wash our hands of
> the matter.
>
> This also means that it should be up to callers to convert the FILENAME
> slot (i.e. PATH and QUERY) into proper filenames.  The translation from
> URIs to filenames is scheme-independent anyway, so it shouldn't be
> handled at the level of url-generic-parse-url.

I don't mind which way we fix it, but I'd be glad if we can avoid
snarky and erroneous "Windows does this wrong" comments in the code
while doing it...

    Juanma





^ permalink raw reply	[flat|nested] 50+ messages in thread

* bug#6339: url-filename => "/c:/some/file.txt"
  2012-05-09 11:52     ` Juanma Barranquero
@ 2012-05-10 14:15       ` Chong Yidong
  0 siblings, 0 replies; 50+ messages in thread
From: Chong Yidong @ 2012-05-10 14:15 UTC (permalink / raw)
  To: Juanma Barranquero; +Cc: 6339

Juanma Barranquero <lekktu@gmail.com> writes:

> I don't mind which way we fix it, but I'd be glad if we can avoid
> snarky and erroneous "Windows does this wrong" comments in the code
> while doing it...

I've committed a fix to ffap to DTRT, and don't see what else to patch.
Closing this bug; feel free to open a new one if there is a specific
example of a caller doing the wrong thing.





^ permalink raw reply	[flat|nested] 50+ messages in thread

end of thread, other threads:[~2012-05-10 14:15 UTC | newest]

Thread overview: 50+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-06-03  2:38 bug#6339: url-filename => "/c:/some/file.txt" Lennart Borgman
2010-06-03 11:13 ` Juanma Barranquero
2010-07-26 11:50 ` Juanma Barranquero
2010-07-26 12:00   ` Lennart Borgman
2010-08-01 18:46   ` Juanma Barranquero
2010-08-02  7:51     ` Michael Albinus
2011-09-21 20:28   ` Lars Magne Ingebrigtsen
2011-09-21 22:21     ` Juanma Barranquero
2011-09-21 22:31       ` Lennart Borgman
2011-09-21 22:45         ` Juanma Barranquero
2011-09-21 22:51           ` Lennart Borgman
2011-09-21 22:59             ` Juanma Barranquero
2011-09-21 23:15               ` Lennart Borgman
2011-09-21 23:18                 ` Juanma Barranquero
2011-09-21 23:32                   ` Lennart Borgman
2011-09-21 23:37                     ` Juanma Barranquero
2011-09-21 23:46                       ` Lennart Borgman
2011-09-22  0:32                         ` Juanma Barranquero
2011-09-22  0:40                           ` Lennart Borgman
2011-09-22  0:59                             ` Juanma Barranquero
2011-09-22  1:07                               ` Lennart Borgman
2011-09-22  1:14                                 ` Juanma Barranquero
2011-09-22  9:52                                   ` Lennart Borgman
2011-10-06  5:09                                   ` Kevin Rodgers
2011-10-06 11:56                                     ` Juanma Barranquero
2011-10-06 12:43                                       ` Stefan Monnier
2011-10-06 13:40                                         ` Juanma Barranquero
2011-10-06 14:24                                           ` Jason Rumney
2011-10-06 14:30                                             ` Juanma Barranquero
2011-10-06 14:38                                               ` Jason Rumney
2011-10-06 14:49                                                 ` Juanma Barranquero
2011-10-06 15:08                                                 ` Lennart Borgman
2011-10-06 15:08                                                 ` Lennart Borgman
2011-10-06 15:31                                           ` Stefan Monnier
2011-10-06 15:56                                             ` Juanma Barranquero
2011-10-06 16:49                                               ` Stefan Monnier
2011-10-06 16:54                                                 ` Juanma Barranquero
2011-10-06 21:08                                                   ` Stefan Monnier
2011-09-24  3:35                           ` Jason Rumney
2011-09-24  8:59                             ` Juanma Barranquero
2011-09-24  9:06                               ` Juanma Barranquero
2011-09-24 11:53                               ` Andreas Schwab
2011-09-24 21:56                                 ` Juanma Barranquero
2011-09-24 23:42                                   ` Andreas Schwab
2011-09-25  0:02                                     ` Juanma Barranquero
2011-09-24  9:46                             ` Lennart Borgman
2011-09-24 12:28                             ` Richard Stallman
2012-05-09  9:04   ` Chong Yidong
2012-05-09 11:52     ` Juanma Barranquero
2012-05-10 14:15       ` Chong Yidong

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).