add libhttpd
This commit is contained in:
parent
b6afd33e2f
commit
9df487d720
19 changed files with 2722 additions and 0 deletions
49
src/libhttpd/httpunesc.c
Normal file
49
src/libhttpd/httpunesc.c
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <bin.h>
|
||||
#include <httpd.h>
|
||||
|
||||
/*
|
||||
* go from http with latin1 escapes to utf,
|
||||
* we assume that anything >= Runeself is already in utf
|
||||
*/
|
||||
char *
|
||||
httpunesc(HConnect *cc, char *s)
|
||||
{
|
||||
char *t, *v;
|
||||
int c;
|
||||
Htmlesc *e;
|
||||
|
||||
v = halloc(cc, UTFmax*strlen(s) + 1);
|
||||
for(t = v; c = *s;){
|
||||
if(c == '&'){
|
||||
if(s[1] == '#' && s[2] && s[3] && s[4] && s[5] == ';'){
|
||||
c = atoi(s+2);
|
||||
if(c < Runeself){
|
||||
*t++ = c;
|
||||
s += 6;
|
||||
continue;
|
||||
}
|
||||
if(c < 256 && c >= 161){
|
||||
e = &htmlesc[c-161];
|
||||
t += runetochar(t, &e->value);
|
||||
s += 6;
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
for(e = htmlesc; e->name != nil; e++)
|
||||
if(strncmp(e->name, s, strlen(e->name)) == 0)
|
||||
break;
|
||||
if(e->name != nil){
|
||||
t += runetochar(t, &e->value);
|
||||
s += strlen(e->name);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
*t++ = c;
|
||||
s++;
|
||||
}
|
||||
*t = 0;
|
||||
return v;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue