xref: /plan9/sys/src/libhttpd/query.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1 #include <u.h>
2 #include <libc.h>
3 #include <httpd.h>
4 
5 /*
6  * parse a search string of the form
7  * tag=val&tag1=val1...
8  */
9 HSPairs*
hparsequery(HConnect * c,char * search)10 hparsequery(HConnect *c, char *search)
11 {
12 	HSPairs *q;
13 	char *tag, *val, *s;
14 
15 	while((s = strchr(search, '?')) != nil)
16 		search = s + 1;
17 	s = search;
18 	while((s = strchr(s, '+')) != nil)
19 		*s++ = ' ';
20 	q = nil;
21 	while(*search){
22 		tag = search;
23 		while(*search != '='){
24 			if(*search == '\0')
25 				return q;
26 			search++;
27 		}
28 		*search++ = 0;
29 		val = search;
30 		while(*search != '&'){
31 			if(*search == '\0')
32 				return hmkspairs(c, hurlunesc(c, tag), hurlunesc(c, val), q);
33 			search++;
34 		}
35 		*search++ = '\0';
36 		q = hmkspairs(c, hurlunesc(c, tag), hurlunesc(c, val), q);
37 	}
38 	return q;
39 }
40