Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
#include <bin.h>
4
#include <httpd.h>
5
 
6
/*
7
 *  go from http with latin1 escapes to utf,
8
 *  we assume that anything >= Runeself is already in utf
9
 */
10
char *
11
httpunesc(HConnect *cc, char *s)
12
{
13
	char *t, *v;
14
	int c;
15
	Htmlesc *e;
16
 
17
	v = halloc(cc, UTFmax*strlen(s) + 1);
18
	for(t = v; c = *s;){
19
		if(c == '&'){
20
			if(s[1] == '#' && s[2] && s[3] && s[4] && s[5] == ';'){
21
				c = atoi(s+2);
22
				if(c < Runeself){
23
					*t++ = c;
24
					s += 6;
25
					continue;
26
				}
27
				if(c < 256 && c >= 161){
28
					e = &htmlesc[c-161];
29
					t += runetochar(t, &e->value);
30
					s += 6;
31
					continue;
32
				}
33
			} else {
34
				for(e = htmlesc; e->name != nil; e++)
35
					if(strncmp(e->name, s, strlen(e->name)) == 0)
36
						break;
37
				if(e->name != nil){
38
					t += runetochar(t, &e->value);
39
					s += strlen(e->name);
40
					continue;
41
				}
42
			}
43
		}
44
		*t++ = c;
45
		s++;
46
	}
47
	*t = 0;
48
	return v;
49
}