mothra: handle relative urls in <base> tag

This commit is contained in:
cinap_lenrek 2012-07-17 07:21:22 +02:00
parent 05c11fefe0
commit a78f5f8a3d
3 changed files with 23 additions and 1 deletions

View file

@ -102,5 +102,6 @@ void mkfieldpanel(Rtext *);
void geturl(char *, int, int, int);
int urlpost(Url*, char*);
int urlget(Url*, int);
int urlresolve(Url *);
char version[];
Mouse mouse;

View file

@ -734,8 +734,12 @@ void plrdhtml(char *name, int fd, Www *dst){
g.spacc++;
break;
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));
/* base should be a full url, but it often isnt so have to resolve */
urlresolve(g.dst->url);
}
break;
case Tag_a:
if(str=pl_getattr(g.attr, "name"))

View file

@ -151,3 +151,20 @@ urlget(Url *url, int body)
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;
}