summaryrefslogtreecommitdiff
path: root/sys/src/cmd/webfs/url.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-11-19 04:31:24 +0100
committercinap_lenrek <cinap_lenrek@centraldogma>2011-11-19 04:31:24 +0100
commit15380244133d7b6f4f3ca84032e147ed460e5c22 (patch)
tree7a8128d5d46122aa4925f9c2f192bdd468d8fd31 /sys/src/cmd/webfs/url.c
parent79172e71e6be93d7902f9dd58ae5beb527cf52a6 (diff)
webfs: leave ; and / in url-query alone, add space + subsitution
Diffstat (limited to 'sys/src/cmd/webfs/url.c')
-rw-r--r--sys/src/cmd/webfs/url.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/src/cmd/webfs/url.c b/sys/src/cmd/webfs/url.c
index 0e00b7d2b..c6c5695f0 100644
--- a/sys/src/cmd/webfs/url.c
+++ b/sys/src/cmd/webfs/url.c
@@ -671,7 +671,7 @@ parse_query(SplitUrl *su, Url *u)
if(su->query.s == nil)
return 0;
s = estredup(su->query.s, su->query.e);
- u->query = unescapeurl(s, "&=");
+ u->query = unescapeurl(s, "&;=/");
free(s);
return 0;
}
@@ -713,7 +713,7 @@ postparse_http(Url *u)
}
p = escapeurl(u->path, "/");
if(u->query){
- q = escapeurl(u->query, "&=");
+ q = escapeurl(u->query, "&;=/");
u->http.page_spec = emalloc(strlen(p)+1+strlen(q)+1);
strcpy(u->http.page_spec, p);
strcat(u->http.page_spec, "?");
@@ -929,7 +929,7 @@ seturlquery(Url *u, char *query)
return 0;
}
free(u->query);
- u->query = unescapeurl(query, "&=");
+ u->query = unescapeurl(query, "&;=/");
return 0;
}
@@ -998,6 +998,8 @@ escapeurl(char *s, char *special)
(*s >= 'A' && *s <= 'Z') ||
strchr(".-_~", *s) || strchr(special, *s))
*u++ = *s;
+ else if(s[0] == ' ')
+ *u++ = '+';
else {
*u++ = '%';
*u++ = hex[(*s>>4)&0xF];
@@ -1022,7 +1024,8 @@ unescapeurl(char *s, char *special)
x = *r;
else
r += 2;
- }
+ } else if(x=='+')
+ x = ' ';
*w++ = x;
}
*w = '\0';