Blame


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