Move cgit_parse_query() from parsing.c to html.c as http_parse_querystring()
This is a generic http-function. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
		
							
								
								
									
										49
									
								
								parsing.c
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								parsing.c
									
									
									
									
									
								
							@@ -8,55 +8,6 @@
 | 
			
		||||
 | 
			
		||||
#include "cgit.h"
 | 
			
		||||
 | 
			
		||||
char *convert_query_hexchar(char *txt)
 | 
			
		||||
{
 | 
			
		||||
	int d1, d2;
 | 
			
		||||
	if (strlen(txt) < 3) {
 | 
			
		||||
		*txt = '\0';
 | 
			
		||||
		return txt-1;
 | 
			
		||||
	}
 | 
			
		||||
	d1 = hextoint(*(txt+1));
 | 
			
		||||
	d2 = hextoint(*(txt+2));
 | 
			
		||||
	if (d1<0 || d2<0) {
 | 
			
		||||
		strcpy(txt, txt+3);
 | 
			
		||||
		return txt-1;
 | 
			
		||||
	} else {
 | 
			
		||||
		*txt = d1 * 16 + d2;
 | 
			
		||||
		strcpy(txt+1, txt+3);
 | 
			
		||||
		return txt;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int cgit_parse_query(char *txt, configfn fn)
 | 
			
		||||
{
 | 
			
		||||
	char *t, *value = NULL, c;
 | 
			
		||||
 | 
			
		||||
	if (!txt)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	t = txt = xstrdup(txt);
 | 
			
		||||
 | 
			
		||||
	while((c=*t) != '\0') {
 | 
			
		||||
		if (c=='=') {
 | 
			
		||||
			*t = '\0';
 | 
			
		||||
			value = t+1;
 | 
			
		||||
		} else if (c=='+') {
 | 
			
		||||
			*t = ' ';
 | 
			
		||||
		} else if (c=='%') {
 | 
			
		||||
			t = convert_query_hexchar(t);
 | 
			
		||||
		} else if (c=='&') {
 | 
			
		||||
			*t = '\0';
 | 
			
		||||
			(*fn)(txt, value);
 | 
			
		||||
			txt = t+1;
 | 
			
		||||
			value = NULL;
 | 
			
		||||
		}
 | 
			
		||||
		t++;
 | 
			
		||||
	}
 | 
			
		||||
	if (t!=txt)
 | 
			
		||||
		(*fn)(txt, value);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * url syntax: [repo ['/' cmd [ '/' path]]]
 | 
			
		||||
 *   repo: any valid repo url, may contain '/'
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user