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

[svn] Handle links to relative "net locations," e.g. <a href="//www.server.com/">.

This commit is contained in:
hniksic 2002-01-13 17:56:40 -08:00
parent cafe798fec
commit 524a1f54dc
2 changed files with 36 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2002-01-07 Ian Abbott <abbotti@mev.co.uk>
* url.c (uri_merge_1): Deal with "net path" relative URL (one that
starts with "//").
2002-01-14 Hrvoje Niksic <hniksic@arsdigita.com>
* http.c (gethttp): Invalidate SOCK if get_contents encountered an

View File

@ -1575,6 +1575,37 @@ uri_merge_1 (const char *base, const char *link, int linklength, int no_scheme)
memcpy (constr + baselength, link, linklength);
constr[baselength + linklength] = '\0';
}
else if (linklength > 1 && *link == '/' && *(link + 1) == '/')
{
/* LINK begins with "//" and so is a net path: we need to
replace everything after (and including) the double slash
with LINK. */
/* uri_merge("foo", "//new/bar") -> "//new/bar" */
/* uri_merge("//old/foo", "//new/bar") -> "//new/bar" */
/* uri_merge("http://old/foo", "//new/bar") -> "http://new/bar" */
int span;
const char *slash;
const char *start_insert;
/* Look for first slash. */
slash = memchr (base, '/', end - base);
/* If found slash and it is a double slash, then replace
from this point, else default to replacing from the
beginning. */
if (slash && *(slash + 1) == '/')
start_insert = slash;
else
start_insert = base;
span = start_insert - base;
constr = (char *)xmalloc (span + linklength + 1);
if (span)
memcpy (constr, base, span);
memcpy (constr + span, link, linklength);
constr[span + linklength] = '\0';
}
else if (*link == '/')
{
/* LINK is an absolute path: we need to replace everything