summaryrefslogtreecommitdiff
path: root/sys/src/cmd/webfs
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-10-13 18:12:55 +0200
committercinap_lenrek <cinap_lenrek@centraldogma>2011-10-13 18:12:55 +0200
commite02b84087e8151cc221127dc04abfc08132d9093 (patch)
treebdaa81c05568f623c53cac08c245c0f8e7c6879e /sys/src/cmd/webfs
parent46ecc9eff6f237510d6671914a533fa06bdb890e (diff)
webfs: fix url fragment bug, preserve fragment on redirect
Diffstat (limited to 'sys/src/cmd/webfs')
-rw-r--r--sys/src/cmd/webfs/client.c7
-rw-r--r--sys/src/cmd/webfs/url.c2
2 files changed, 7 insertions, 2 deletions
diff --git a/sys/src/cmd/webfs/client.c b/sys/src/cmd/webfs/client.c
index 9cbfbf9f0..f17b2ae90 100644
--- a/sys/src/cmd/webfs/client.c
+++ b/sys/src/cmd/webfs/client.c
@@ -73,7 +73,7 @@ clonectl(Ctl *c)
void
clientbodyopen(Client *c, Req *r)
{
- char e[ERRMAX], *next;
+ char e[ERRMAX], *next, *frag;
int i, nauth;
Url *u;
@@ -116,6 +116,11 @@ clientbodyopen(Client *c, Req *r)
}
if((u = parseurl(next, c->url)) == nil)
goto Error;
+ /* if there was a redirect, carry over the fragment */
+ if((frag = c->url->fragment) && u->fragment == nil){
+ u->fragment = estrdup(frag);
+ rewriteurl(u);
+ }
if(urldebug)
fprint(2, "parseurl %s got scheme %d\n", next, u->ischeme);
if(u->ischeme == USunknown){
diff --git a/sys/src/cmd/webfs/url.c b/sys/src/cmd/webfs/url.c
index d2f01612f..5d808df37 100644
--- a/sys/src/cmd/webfs/url.c
+++ b/sys/src/cmd/webfs/url.c
@@ -434,7 +434,7 @@ resolve_relative(SplitUrl *su, Url *base, Url *u)
if(su->fragment.s){
*purl++ = '#';
- memmove(purl, su->query.s, su->query.e - su->query.s);
+ memmove(purl, su->fragment.s, su->fragment.e - su->fragment.s);
purl += su->fragment.e - su->fragment.s;
}else if(currentdoc && base->fragment){
*purl++ = '#';