mothra: handle relative urls in <base> tag
This commit is contained in:
parent
05c11fefe0
commit
a78f5f8a3d
3 changed files with 23 additions and 1 deletions
|
@ -102,5 +102,6 @@ void mkfieldpanel(Rtext *);
|
||||||
void geturl(char *, int, int, int);
|
void geturl(char *, int, int, int);
|
||||||
int urlpost(Url*, char*);
|
int urlpost(Url*, char*);
|
||||||
int urlget(Url*, int);
|
int urlget(Url*, int);
|
||||||
|
int urlresolve(Url *);
|
||||||
char version[];
|
char version[];
|
||||||
Mouse mouse;
|
Mouse mouse;
|
||||||
|
|
|
@ -734,8 +734,12 @@ void plrdhtml(char *name, int fd, Www *dst){
|
||||||
g.spacc++;
|
g.spacc++;
|
||||||
break;
|
break;
|
||||||
case Tag_base:
|
case Tag_base:
|
||||||
if(str=pl_getattr(g.attr, "href"))
|
if(str=pl_getattr(g.attr, "href")){
|
||||||
|
seturl(g.dst->url, str, g.dst->url->fullname);
|
||||||
nstrcpy(g.dst->url->fullname, str, sizeof(g.dst->url->fullname));
|
nstrcpy(g.dst->url->fullname, str, sizeof(g.dst->url->fullname));
|
||||||
|
/* base should be a full url, but it often isnt so have to resolve */
|
||||||
|
urlresolve(g.dst->url);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Tag_a:
|
case Tag_a:
|
||||||
if(str=pl_getattr(g.attr, "name"))
|
if(str=pl_getattr(g.attr, "name"))
|
||||||
|
|
|
@ -151,3 +151,20 @@ urlget(Url *url, int body)
|
||||||
|
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
urlresolve(Url *url)
|
||||||
|
{
|
||||||
|
char buf[1024];
|
||||||
|
int n, fd;
|
||||||
|
|
||||||
|
if((fd = webclone(url, buf, sizeof(buf))) < 0)
|
||||||
|
return -1;
|
||||||
|
n = strlen(buf);
|
||||||
|
snprint(buf+n, sizeof(buf)-n, "/parsed/url");
|
||||||
|
readstr(buf, url->fullname, sizeof(url->fullname));
|
||||||
|
snprint(buf+n, sizeof(buf)-n, "/parsed/fragment");
|
||||||
|
readstr(buf, url->tag, sizeof(url->tag));
|
||||||
|
close(fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue