diff options
author | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-10-13 18:12:55 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-10-13 18:12:55 +0200 |
commit | e02b84087e8151cc221127dc04abfc08132d9093 (patch) | |
tree | bdaa81c05568f623c53cac08c245c0f8e7c6879e /sys/src/cmd/webfs | |
parent | 46ecc9eff6f237510d6671914a533fa06bdb890e (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.c | 7 | ||||
-rw-r--r-- | sys/src/cmd/webfs/url.c | 2 |
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++ = '#'; |