mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-04 10:18:31 +00:00
parent
da36e7e256
commit
4d21cd315d
20 changed files with 1075 additions and 664 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue