[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: lynx-dev Improper ~/ expansion in file://
From: |
Klaus Weide |
Subject: |
Re: lynx-dev Improper ~/ expansion in file:// |
Date: |
Sun, 22 Nov 1998 16:33:45 -0600 (CST) |
On Fri, 20 Nov 1998, Ryan Hung wrote:
> On Fri, 20 Nov 1998, Klaus Weide wrote:
> > The problem
> > should be solved where it is generated, which is where the /~ is replaced
> > by something else.
>
> Hmm, I see. But where would "//" in a real pathname be appropriate?
A good question. I don't know the real answer, but "\\" in Windows (which
probably would be translated into "//") has a specific meaning, and I seem
to recall that POSIX or some similar spec for Unix says something like
"a // at the beginning may have system-defined meaning". (Can anyone
confirm?)
Maybe it is only at the beginning of a pathname that "//" should be
preserved, but a function like LYTrimRelFromAbsPath() may get called
in many places and doesn't generally know if the string is a full
path. So the safest thing may be to leave it alone once a "//" somehow
got into a path. That is what lynx does, for the most part. If a user
enters a path like that, he gets what he deserves (or maybe has a good
reason).
A complication is that URL paths and (at least Unux) filesystem paths
act differently w.r.t. "". For files, a ".." steps back over multiple
slashes, but if I read the URL syntax correctly a ".." should step "in
between" the two slashes, there is a path segment between them that just
happens to be empty. THe HTSimplify() function in Lynx refuses to step
back over "//" segments anyway, probably because it things that may be
the "//" occurring before the host in a URL.
[ ... ]
(I see the same things described by Ryan with 2.8.1rel2.)
> Hmm. To clarify, what I'm getting with 2.8.2.dev.4 is that retrieving
> "file://localhost/~" or "file://localhost/~/" gets the correct home
> directory.
Well what you are getting is actually the //home/username. It just
happens that your OS regards that as the same as /home/username.
> However, the directory is listed as "/username" rather than
> "/home/username".
An earlier version (around 2.7.1ac-0.91) shows this as
Current directory is //home/username
as expected, even if I explicitly give "file://localhost//home/username".
(I have to give it explicitly because that version does not insert
an extra slash when expanding ~).
> When one does an "=" to look at the links there, the
> full path of the current page is listed as "//home/username".
Earlier version shows
Name: //home/lynxdev
URL: file://localhost//home/lynxdev
as expected. So it seems there also has been a change in HTFile.c.
-----
This change (untested) should prevent generation of the duplicate
slash from /~ in file URL, but doesn't do anything about the other
problems.
When /~ appears in something in "file syntax", i.e. a file without
"file:", it is normally handled in LYConvertToURL() in LYUtils.c
which doesn't introduce a double slash.
Klaus
--- lynx2-8-1-orig/src/LYGetFile.c Wed Oct 14 07:23:56 1998
+++ lynx2-8-1/src/LYGetFile.c Sun Nov 22 16:24:13 1998
@@ -605,8 +605,10 @@
*cp1 = '\0';
cp1 += 2;
StrAllocCopy(temp, doc->address);
- LYAddHtmlSep(&temp);
- StrAllocCat(temp, wwwName(Home_Dir()));
+ StrAllocCopy(cp, wwwName(Home_Dir()));
+ if (!LYIsHtmlSep(cp))
+ LYAddHtmlSep(&temp);
+ StrAllocCat(temp, cp);
if ((cp2 = strchr(cp1, '/')) != NULL) {
LYTrimRelFromAbsPath(cp2);
StrAllocCat(temp, cp2);