1 /* $Id: parsetag.c,v 1.4 2001/11/20 17:49:23 ukai Exp $ */
2 #include "myctype.h"
3 #include "indep.h"
4 #include "Str.h"
5 #include "parsetag.h"
6 
7 char *
tag_get_value(struct parsed_tagarg * t,char * arg)8 tag_get_value(struct parsed_tagarg *t, char *arg)
9 {
10     for (; t; t = t->next) {
11 	if (!strcasecmp(t->arg, arg))
12 	    return t->value;
13     }
14     return NULL;
15 }
16 
17 int
tag_exists(struct parsed_tagarg * t,char * arg)18 tag_exists(struct parsed_tagarg *t, char *arg)
19 {
20     for (; t; t = t->next) {
21 	if (!strcasecmp(t->arg, arg))
22 	    return 1;
23     }
24     return 0;
25 }
26 
27 struct parsed_tagarg *
cgistr2tagarg(char * cgistr)28 cgistr2tagarg(char *cgistr)
29 {
30     Str tag;
31     Str value;
32     struct parsed_tagarg *t0, *t;
33 
34     t = t0 = NULL;
35     do {
36 	t = New(struct parsed_tagarg);
37 	t->next = t0;
38 	t0 = t;
39 	tag = Strnew();
40 	while (*cgistr && *cgistr != '=' && *cgistr != '&')
41 	    Strcat_char(tag, *cgistr++);
42 	t->arg = Str_form_unquote(tag)->ptr;
43 	t->value = NULL;
44 	if (*cgistr == '\0')
45 	    return t;
46 	else if (*cgistr == '=') {
47 	    cgistr++;
48 	    value = Strnew();
49 	    while (*cgistr && *cgistr != '&')
50 		Strcat_char(value, *cgistr++);
51 	    t->value = Str_form_unquote(value)->ptr;
52 	}
53 	else if (*cgistr == '&')
54 	    cgistr++;
55     } while (*cgistr);
56     return t;
57 }
58