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>
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
11 9df487d7 2003-11-23 devnull httpunesc(HConnect *cc, char *s)
13 9df487d7 2003-11-23 devnull char *t, *v;
15 9df487d7 2003-11-23 devnull Htmlesc *e;
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;
25 9df487d7 2003-11-23 devnull continue;
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);
31 9df487d7 2003-11-23 devnull continue;
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)
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;
44 9df487d7 2003-11-23 devnull *t++ = c;
48 9df487d7 2003-11-23 devnull return v;