180ee5cbfSDavid du Colombier #include <u.h>
280ee5cbfSDavid du Colombier #include <libc.h>
380ee5cbfSDavid du Colombier #include <httpd.h>
480ee5cbfSDavid du Colombier
580ee5cbfSDavid du Colombier /*
680ee5cbfSDavid du Colombier * parse a search string of the form
780ee5cbfSDavid du Colombier * tag=val&tag1=val1...
880ee5cbfSDavid du Colombier */
980ee5cbfSDavid du Colombier HSPairs*
hparsequery(HConnect * c,char * search)1080ee5cbfSDavid du Colombier hparsequery(HConnect *c, char *search)
1180ee5cbfSDavid du Colombier {
1280ee5cbfSDavid du Colombier HSPairs *q;
1380ee5cbfSDavid du Colombier char *tag, *val, *s;
1480ee5cbfSDavid du Colombier
1580ee5cbfSDavid du Colombier while((s = strchr(search, '?')) != nil)
1680ee5cbfSDavid du Colombier search = s + 1;
17*9a747e4fSDavid du Colombier s = search;
18*9a747e4fSDavid du Colombier while((s = strchr(s, '+')) != nil)
19*9a747e4fSDavid du Colombier *s++ = ' ';
2080ee5cbfSDavid du Colombier q = nil;
2180ee5cbfSDavid du Colombier while(*search){
2280ee5cbfSDavid du Colombier tag = search;
2380ee5cbfSDavid du Colombier while(*search != '='){
2480ee5cbfSDavid du Colombier if(*search == '\0')
2580ee5cbfSDavid du Colombier return q;
2680ee5cbfSDavid du Colombier search++;
2780ee5cbfSDavid du Colombier }
2880ee5cbfSDavid du Colombier *search++ = 0;
2980ee5cbfSDavid du Colombier val = search;
3080ee5cbfSDavid du Colombier while(*search != '&'){
3180ee5cbfSDavid du Colombier if(*search == '\0')
3280ee5cbfSDavid du Colombier return hmkspairs(c, hurlunesc(c, tag), hurlunesc(c, val), q);
3380ee5cbfSDavid du Colombier search++;
3480ee5cbfSDavid du Colombier }
3580ee5cbfSDavid du Colombier *search++ = '\0';
3680ee5cbfSDavid du Colombier q = hmkspairs(c, hurlunesc(c, tag), hurlunesc(c, val), q);
3780ee5cbfSDavid du Colombier }
3880ee5cbfSDavid du Colombier return q;
3980ee5cbfSDavid du Colombier }
40