diff options
| author | rsc <devnull@localhost> | 2003-11-23 18:19:35 +0000 |
|---|---|---|
| committer | rsc <devnull@localhost> | 2003-11-23 18:19:35 +0000 |
| commit | 9df487d720a59bf8cb0dc4ccffc30ad8eb48256a (patch) | |
| tree | 9267054a81cefbb9a8ae3847ae0ddfc1567bd961 /src/libhttpd/query.c | |
| parent | b6afd33e2f23953f00c6fac6b5d45946a9113654 (diff) | |
add libhttpd
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; +} |