summaryrefslogtreecommitdiff
path: root/core/string
diff options
context:
space:
mode:
authorHaoyu Qiu <timothyqiu32@gmail.com>2022-06-03 13:58:57 +0800
committerHaoyu Qiu <timothyqiu32@gmail.com>2022-06-03 13:58:57 +0800
commit83990c2161f1e2f4235c0775fa276e26bf3ecae9 (patch)
tree3c5cc0a3f9894a76e191e28bd67f09dcfbf82bdc /core/string
parent1baee2189c21ae36c852ddff10f769b1134509ca (diff)
Fix `String.uri_encode` on Windows
Diffstat (limited to 'core/string')
-rw-r--r--core/string/ustring.cpp15
1 files changed, 6 insertions, 9 deletions
diff --git a/core/string/ustring.cpp b/core/string/ustring.cpp
index 44df349613..d189f3224b 100644
--- a/core/string/ustring.cpp
+++ b/core/string/ustring.cpp
@@ -3712,18 +3712,15 @@ String String::uri_encode() const {
const CharString temp = utf8();
String res;
for (int i = 0; i < temp.length(); ++i) {
- char ord = temp[i];
+ uint8_t ord = temp[i];
if (ord == '.' || ord == '-' || ord == '~' || is_ascii_identifier_char(ord)) {
res += ord;
} else {
- char h_Val[3];
-#if defined(__GNUC__) || defined(_MSC_VER)
- snprintf(h_Val, 3, "%02hhX", ord);
-#else
- sprintf(h_Val, "%02hhX", ord);
-#endif
- res += "%";
- res += h_Val;
+ char p[4] = { '%', 0, 0, 0 };
+ static const char hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+ p[1] = hex[ord >> 4];
+ p[2] = hex[ord & 0xF];
+ res += p;
}
}
return res;