aboutsummaryrefslogtreecommitdiff
path: root/src/system/utf8.c
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2021-11-08 16:03:02 +0100
committerdec05eba <dec05eba@protonmail.com>2021-11-08 16:03:02 +0100
commitc4f84e1969f4c856a5bf0352e99fcb73a4cf56cf (patch)
tree989fbe845a051d10f750bb6baeb0b58823a611bd /src/system/utf8.c
parente3c90b41386986ef53e512994d6e2f7ceadfc177 (diff)
Do not check for valid utf8 in set text, render the invalid utf8 instead. Mmap fonts instead of loading the whole font
Diffstat (limited to 'src/system/utf8.c')
-rw-r--r--src/system/utf8.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/system/utf8.c b/src/system/utf8.c
index 35b0f2f..201fedf 100644
--- a/src/system/utf8.c
+++ b/src/system/utf8.c
@@ -20,19 +20,31 @@ static inline bool utf8_get_codepoint_length(unsigned char b, size_t *codepoint_
/* TODO: Optimize (remove branching, etc) */
bool mgl_utf8_decode(const unsigned char *str, size_t size, uint32_t *decoded_codepoint, size_t *codepoint_length) {
- if(size == 0)
+ if(size == 0) {
+ *decoded_codepoint = 0;
+ *codepoint_length = 0;
return false;
+ }
size_t clen;
- if(!utf8_get_codepoint_length(str[0], &clen))
+ if(!utf8_get_codepoint_length(str[0], &clen)) {
+ *decoded_codepoint = str[0];
+ *codepoint_length = 1;
return false;
+ }
- if(size < clen)
+ if(size < clen) {
+ *decoded_codepoint = str[0];
+ *codepoint_length = 1;
return false;
+ }
for(size_t i = 1; i < clen; ++i) {
- if((str[i] & 0xC0) != 0x80)
+ if((str[i] & 0xC0) != 0x80) {
+ *decoded_codepoint = str[0];
+ *codepoint_length = 1;
return false;
+ }
}
uint32_t codepoint;