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;
 | 
						|
}
 |