diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/libhttpd/query.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/libhttpd/query.c')
-rwxr-xr-x | sys/src/libhttpd/query.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/sys/src/libhttpd/query.c b/sys/src/libhttpd/query.c new file mode 100755 index 000000000..47768da2f --- /dev/null +++ b/sys/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; +} |