summaryrefslogtreecommitdiff
path: root/sys/src/cmd/webfs
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-09-05 03:30:07 +0200
committercinap_lenrek <cinap_lenrek@centraldogma>2011-09-05 03:30:07 +0200
commit5371b6ff15fc864ac5eeb041ab20827231d2e44b (patch)
tree4a9116f195d7fbcfc9e51c188d5f24ed0f2620b7 /sys/src/cmd/webfs
parentaa9097b4bbf566504c80689fa45b2e82aad56c36 (diff)
webfs: fix broken baseurl handling
Diffstat (limited to 'sys/src/cmd/webfs')
-rw-r--r--sys/src/cmd/webfs/client.c10
-rw-r--r--sys/src/cmd/webfs/dat.h1
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;