Support encoding UTF-8 characters

There's no loss doing it so, as FF = 255 and the upper half of the
unsigned char range is exactly where we feel at home with UTF-8.
This commit is contained in:
FRIGN 2016-09-05 20:10:16 +02:00
parent 5ecd11fa3d
commit 29d53f65b7

View file

@ -172,7 +172,7 @@ decode(char src[PATH_MAX], char dest[PATH_MAX])
if (*s == '+') { if (*s == '+') {
dest[i] = ' '; dest[i] = ' ';
} else if (*s == '%' && (sscanf(s + 1, "%2hhx", &n) == 1)) { } else if (*s == '%' && (sscanf(s + 1, "%2hhx", &n) == 1)) {
dest[i] = (char)(n & 255); dest[i] = n;
s += 2; s += 2;
} else { } else {
dest[i] = *s; dest[i] = *s;
@ -191,7 +191,7 @@ encode(char src[PATH_MAX], char dest[PATH_MAX])
for (s = src, i = 0; *s; s++) { for (s = src, i = 0; *s; s++) {
if (isalnum(*s) || *s == '~' || *s == '-' || *s == '.' || if (isalnum(*s) || *s == '~' || *s == '-' || *s == '.' ||
*s == '_') { *s == '_' || *s > 127) {
i += snprintf(dest + i, PATH_MAX - i, "%%%02X", *s); i += snprintf(dest + i, PATH_MAX - i, "%%%02X", *s);
} else { } else {
dest[i] = *s; dest[i] = *s;