Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_fixcpp/sys/src/libhttpd/urlunesc.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | 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
/* go from url with escaped utf to utf */
7
char *
8
hurlunesc(HConnect *cc, char *s)
9
{
10
	char *t, *v, *u;
11
	Rune r;
12
	int c, n;
13
 
14
	/* unescape */
15
	u = halloc(cc, strlen(s)+1);
16
	for(t = u; c = *s; s++){
17
		if(c == '%'){
18
			n = s[1];
19
			if(n >= '0' && n <= '9')
20
				n = n - '0';
21
			else if(n >= 'A' && n <= 'F')
22
				n = n - 'A' + 10;
23
			else if(n >= 'a' && n <= 'f')
24
				n = n - 'a' + 10;
25
			else
26
				break;
27
			r = n;
28
			n = s[2];
29
			if(n >= '0' && n <= '9')
30
				n = n - '0';
31
			else if(n >= 'A' && n <= 'F')
32
				n = n - 'A' + 10;
33
			else if(n >= 'a' && n <= 'f')
34
				n = n - 'a' + 10;
35
			else
36
				break;
37
			s += 2;
38
			c = (r<<4)+n;
39
		}
40
		*t++ = c;
41
	}
42
	*t = '\0';
43
 
44
	/* convert to valid utf */
45
	v = halloc(cc, UTFmax*strlen(u) + 1);
46
	s = u;
47
	t = v;
48
	while(*s){
49
		/* in decoding error, assume latin1 */
50
		if((n=chartorune(&r, s)) == 1 && r == Runeerror)
51
			r = (uchar)*s;
52
		s += n;
53
		t += runetochar(t, &r);
54
	}
55
	*t = '\0';
56
 
57
	return v;
58
}