58 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* $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;
 | |
| }
 |