65 static const unsigned char hexval[0x100] = {
67 __,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
68 __,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
69 __,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
70 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
__,
__,
__,
__,
__,
__,
71 __,10,11,12,13,14,15,
__,
__,
__,
__,
__,
__,
__,
__,
__,
72 __,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
73 __,10,11,12,13,14,15,
__,
__,
__,
__,
__,
__,
__,
__,
__,
74 __,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
75 __,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
76 __,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
77 __,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
78 __,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
79 __,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
80 __,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
81 __,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
82 __,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__,
__
89 static const unsigned char uri_encode_tbl[ (2 * 0x100) + 1 ] = {
91 "00" "01" "02" "03" "04" "05" "06" "07" "08" "09" "0A" "0B" "0C" "0D" "0E" "0F"
92 "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "1A" "1B" "1C" "1D" "1E" "1F"
93 "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "2A" "2B" "2C" ____ ____ "2F"
99 "80" "81" "82" "83" "84" "85" "86" "87" "88" "89" "8A" "8B" "8C" "8D" "8E" "8F"
100 "90" "91" "92" "93" "94" "95" "96" "97" "98" "99" "9A" "9B" "9C" "9D" "9E" "9F"
101 "A0" "A1" "A2" "A3" "A4" "A5" "A6" "A7" "A8" "A9" "AA" "AB" "AC" "AD" "AE" "AF"
102 "B0" "B1" "B2" "B3" "B4" "B5" "B6" "B7" "B8" "B9" "BA" "BB" "BC" "BD" "BE" "BF"
103 "C0" "C1" "C2" "C3" "C4" "C5" "C6" "C7" "C8" "C9" "CA" "CB" "CC" "CD" "CE" "CF"
104 "D0" "D1" "D2" "D3" "D4" "D5" "D6" "D7" "D8" "D9" "DA" "DB" "DC" "DD" "DE" "DF"
105 "E0" "E1" "E2" "E3" "E4" "E5" "E6" "E7" "E8" "E9" "EA" "EB" "EC" "ED" "EE" "EF"
106 "F0" "F1" "F2" "F3" "F4" "F5" "F6" "F7" "F8" "F9" "FA" "FB" "FC" "FD" "FE" "FF"
119 unsigned char v1, v2;
124 {
if(src[i] ==
'%' && i + 2 < len)
125 {v1 = hexval[ (
unsigned char)src[i+1] ];
126 v2 = hexval[ (
unsigned char)src[i+2] ];
129 if ((v1 | v2) == 0xFF) dst[j++] = src[i++];
130 else {dst[j++] = (v1 << 4) | v2;
133 }
else dst[j++] = src[i++];
155 if (!(*dst = (
char *)malloc(n)))
return 0;
159 return Encode(src, len, *dst);
166 const unsigned char *code;
171 for(
int i = 0; i < len; i++)
172 {code = &uri_encode_tbl[((
unsigned int)((
unsigned char)src[i])) << 1];
175 memcpy(&dst[j], code, 2);
177 }
else dst[j++] = src[i];
196 for(
int i = 0; i < len; i++)
197 {totlen += (uri_encode_tbl[((
unsigned int)src[i]) << 1] ? 3 : 1);}
static int Decode(const char *src, int len, char *dst)
static int Encode(const char *src, int len, char **dst)
static int Encoded(const char *src, int len)