@ -37,21 +37,13 @@ struct EscapeResult EscapeUrl(const char *data, size_t size,
|
||||
struct EscapeResult r;
|
||||
p = r.data = xmalloc(size * 6 + 1);
|
||||
for (i = 0; i < size; ++i) {
|
||||
switch (xlat[(c = data[i] & 0xff)]) {
|
||||
case 0:
|
||||
*p++ = c;
|
||||
break;
|
||||
case 1:
|
||||
*p++ = '+';
|
||||
break;
|
||||
case 2:
|
||||
p[0] = '%';
|
||||
p[1] = "0123456789ABCDEF"[(c & 0xF0) >> 4];
|
||||
p[2] = "0123456789ABCDEF"[(c & 0x0F) >> 0];
|
||||
p += 3;
|
||||
break;
|
||||
default:
|
||||
unreachable;
|
||||
if (!xlat[(c = data[i] & 0xff)]) {
|
||||
*p++ = c;
|
||||
} else {
|
||||
p[0] = '%';
|
||||
p[1] = "0123456789ABCDEF"[(c & 0xF0) >> 4];
|
||||
p[2] = "0123456789ABCDEF"[(c & 0x0F) >> 0];
|
||||
p += 3;
|
||||
}
|
||||
}
|
||||
r.size = p - r.data;
|
||||
|
||||
Reference in New Issue
Block a user