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