diff options
author | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-09-05 03:30:07 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-09-05 03:30:07 +0200 |
commit | 5371b6ff15fc864ac5eeb041ab20827231d2e44b (patch) | |
tree | 4a9116f195d7fbcfc9e51c188d5f24ed0f2620b7 /sys/src/cmd/webfs | |
parent | aa9097b4bbf566504c80689fa45b2e82aad56c36 (diff) |
webfs: fix broken baseurl handling
Diffstat (limited to 'sys/src/cmd/webfs')
-rw-r--r-- | sys/src/cmd/webfs/client.c | 10 | ||||
-rw-r--r-- | sys/src/cmd/webfs/dat.h | 1 |
2 files changed, 8 insertions, 3 deletions
diff --git a/sys/src/cmd/webfs/client.c b/sys/src/cmd/webfs/client.c index c133adbc2..9cbfbf9f0 100644 --- a/sys/src/cmd/webfs/client.c +++ b/sys/src/cmd/webfs/client.c @@ -225,6 +225,7 @@ enum Bool, Int, String, + XRel, XUrl, Fn, }; @@ -253,7 +254,7 @@ Ctab globaltab[] = { Ctab clienttab[] = { "baseurl", XUrl, (void*)offsetof(Client, baseurl), - "url", XUrl, (void*)offsetof(Client, url), + "url", XRel, (void*)offsetof(Client, url), }; static Ctab* @@ -270,9 +271,10 @@ findcmd(char *cmd, Ctab *tab, int ntab) static void parseas(Req *r, char *arg, int type, void *a) { - Url *u; + Url *u, *base; char e[ERRMAX]; + base = nil; switch(type){ case Bool: if(strcmp(arg, "on")==0 || strcmp(arg, "1")==0) @@ -284,8 +286,10 @@ parseas(Req *r, char *arg, int type, void *a) free(*(char**)a); *(char**)a = estrdup(arg); break; + case XRel: + base = ((Client*)a)->baseurl; case XUrl: - u = parseurl(arg, nil); + u = parseurl(arg, base); if(u == nil){ snprint(e, sizeof e, "parseurl: %r"); respond(r, e); diff --git a/sys/src/cmd/webfs/dat.h b/sys/src/cmd/webfs/dat.h index cde79c3ff..fde326317 100644 --- a/sys/src/cmd/webfs/dat.h +++ b/sys/src/cmd/webfs/dat.h @@ -24,6 +24,7 @@ struct Client { Url *url; Url *baseurl; + Ctl ctl; Channel *creq; /* chan(Req*) */ int num; |