diff options
Diffstat (limited to 'src/libhttpd/query.c')
| -rw-r--r-- | src/libhttpd/query.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/libhttpd/query.c b/src/libhttpd/query.c new file mode 100644 index 00000000..47768da2 --- /dev/null +++ b/src/libhttpd/query.c @@ -0,0 +1,39 @@ +#include <u.h> +#include <libc.h> +#include <httpd.h> + +/* + * parse a search string of the form + * tag=val&tag1=val1... + */ +HSPairs* +hparsequery(HConnect *c, char *search) +{ + HSPairs *q; + char *tag, *val, *s; + + while((s = strchr(search, '?')) != nil) + search = s + 1; + s = search; + while((s = strchr(s, '+')) != nil) + *s++ = ' '; + q = nil; + while(*search){ + tag = search; + while(*search != '='){ + if(*search == '\0') + return q; + search++; + } + *search++ = 0; + val = search; + while(*search != '&'){ + if(*search == '\0') + return hmkspairs(c, hurlunesc(c, tag), hurlunesc(c, val), q); + search++; + } + *search++ = '\0'; + q = hmkspairs(c, hurlunesc(c, tag), hurlunesc(c, val), q); + } + return q; +} |