1
0
mirror of https://github.com/moparisthebest/wget synced 2024-07-03 16:38:41 -04:00

[svn] Don't let absolute path specified by -P introduce absolute file names

to links converted by -k.
This commit is contained in:
hniksic 2003-10-16 08:48:24 -07:00
parent 799e51d8fb
commit 168f03d21d
2 changed files with 14 additions and 14 deletions

View File

@ -1,3 +1,9 @@
2003-10-16 Hrvoje Niksic <hniksic@xemacs.org>
* convert.c (construct_relative): Don't handle absolute files
specially -- for example, -P/tmp/foo shouldn't imply that
converted files must refer to "/tmp/foo/..."!
2003-10-15 Hrvoje Niksic <hniksic@xemacs.org> 2003-10-15 Hrvoje Niksic <hniksic@xemacs.org>
* http.c: Consider status 307 a valid redirect. * http.c: Consider status 307 a valid redirect.

View File

@ -327,33 +327,27 @@ convert_links (const char *file, struct urlpos *links)
logprintf (LOG_VERBOSE, "%d-%d\n", to_file_count, to_url_count); logprintf (LOG_VERBOSE, "%d-%d\n", to_file_count, to_url_count);
} }
/* Construct and return a malloced copy of the relative link from two /* Construct and return a link that points from S1's position to S2.
pieces of information: local name S1 of the referring file and Both files should be local file names, S1 of the referrering file,
local name S2 of the referred file. and S2 of the referred file.
So, if S1 is "jagor.srce.hr/index.html" and S2 is So, if S1 is "H/index.html" and S2 is "H/images/news.gif", this
"jagor.srce.hr/images/news.gif", the function will return function will return "images/news.gif". On the other hand, if S1
"images/news.gif". is "H/ioccc/index.html", and S2 is "H/images/fly.gif", it will
return "../images/fly.gif".
Alternately, if S1 is "fly.cc.fer.hr/ioccc/index.html", and S2 is
"fly.cc.fer.hr/images/fly.gif", the function will return
"../images/fly.gif".
Caveats: S1 should not begin with `/', unless S2 also begins with Caveats: S1 should not begin with `/', unless S2 also begins with
'/'. S1 should not contain things like ".." and such -- '/'. S1 should not contain things like ".." and such --
construct_relative ("fly/ioccc/../index.html", construct_relative ("fly/ioccc/../index.html",
"fly/images/fly.gif") will fail. (A workaround is to call "fly/images/fly.gif") will fail. (A workaround is to call
something like path_simplify() on S1). */ something like path_simplify() on S1). */
static char * static char *
construct_relative (const char *s1, const char *s2) construct_relative (const char *s1, const char *s2)
{ {
int i, cnt, sepdirs1; int i, cnt, sepdirs1;
char *res; char *res;
if (*s2 == '/')
return xstrdup (s2);
/* S1 should *not* be absolute, if S2 wasn't. */
assert (*s1 != '/');
i = cnt = 0; i = cnt = 0;
/* Skip the directories common to both strings. */ /* Skip the directories common to both strings. */
while (1) while (1)