From a1e9de877c3a74abe97d26b46e1575c0e75b07fe Mon Sep 17 00:00:00 2001 From: Liu Date: Sun, 3 Mar 2024 20:57:14 +0800 Subject: [PATCH] feat: replace `decode_utf8` with `mbstowcs` --- lib/i18n/src/i18n.c | 2 +- lib/i18n/src/yaml.c | 2 +- lib/platform/src/clipboard.c | 2 +- lib/platform/src/linux/linux_x11clipboard.c | 2 +- lib/ui-widgets/src/text.c | 2 +- lib/ui-widgets/src/textinput.c | 4 ++-- lib/ui/src/ui_text_style.c | 4 ++-- src/lcui.c | 2 ++ 8 files changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/i18n/src/i18n.c b/lib/i18n/src/i18n.c index 485680c09..0b068a113 100644 --- a/lib/i18n/src/i18n.c +++ b/lib/i18n/src/i18n.c @@ -148,7 +148,7 @@ size_t i18n_detect_language(wchar_t *lang, size_t max_len) const char *str = getenv("LANG"); if (str) { - len = decode_utf8(lang, str, max_len); + len = mbstowcs(lang, str, max_len); // zh_CN -> zh-CN if (len > 3 && max_len > 3) { lang[2] = '-'; diff --git a/lib/i18n/src/yaml.c b/lib/i18n/src/yaml.c index 3354b9a3d..c368a2736 100644 --- a/lib/i18n/src/yaml.c +++ b/lib/i18n/src/yaml.c @@ -21,7 +21,7 @@ static wchar_t *yaml_token_getwcs(yaml_token_t *token) char *str = (char *)token->data.scalar.value; size_t len = token->data.scalar.length; wchar_t *wcs = malloc(sizeof(wchar_t) * (len + 1)); - len = decode_utf8(wcs, str, len); + len = mbstowcs(wcs, str, len); if (len < 1) { abort(); } diff --git a/lib/platform/src/clipboard.c b/lib/platform/src/clipboard.c index 89e4ffbc2..d804e2956 100644 --- a/lib/platform/src/clipboard.c +++ b/lib/platform/src/clipboard.c @@ -29,7 +29,7 @@ int clipboard_request_text(clipboard_callback_t callback, void *arg) wchar_t *wstr = malloc(sizeof(wchar_t) * len); clipboard_t clipboard_data = { 0 }; - len = decode_utf8(wstr, clipboard.text, len); + len = mbstowcs(wstr, clipboard.text, len); wstr[len] = 0; // Assign the data clipboard_data.text = wstr; diff --git a/lib/platform/src/linux/linux_x11clipboard.c b/lib/platform/src/linux/linux_x11clipboard.c index 7a78eeef4..ef82c2072 100644 --- a/lib/platform/src/linux/linux_x11clipboard.c +++ b/lib/platform/src/linux/linux_x11clipboard.c @@ -77,7 +77,7 @@ void x11_clipboard_execute_action(bool timed_out) } else { size_t len = x11_clipboard.text_len + 1; wstr = malloc(sizeof(wchar_t) * len); - len = decode_utf8(wstr, x11_clipboard.text, len); + len = mbstowcs(wstr, x11_clipboard.text, len); wstr[len] = 0; // Assign the data clipboard_data.text = wstr; diff --git a/lib/ui-widgets/src/text.c b/lib/ui-widgets/src/text.c index 5197d8a95..e06e2082f 100644 --- a/lib/ui-widgets/src/text.c +++ b/lib/ui-widgets/src/text.c @@ -313,7 +313,7 @@ int ui_text_set_content(ui_widget_t *w, const char *utf8_text) size_t len = strlen(utf8_text) + 1; wstr = malloc(sizeof(wchar_t) * len); - decode_utf8(wstr, utf8_text, len); + mbstowcs(wstr, utf8_text, len); ret = ui_text_set_content_w(w, wstr); if (wstr) { free(wstr); diff --git a/lib/ui-widgets/src/textinput.c b/lib/ui-widgets/src/textinput.c index cc96e24be..51ae8885e 100644 --- a/lib/ui-widgets/src/textinput.c +++ b/lib/ui-widgets/src/textinput.c @@ -523,7 +523,7 @@ int ui_textinput_set_text(ui_widget_t *widget, const char *utf8_str) if (!wstr) { return -ENOMEM; } - len = decode_utf8(wstr, utf8_str, len); + len = mbstowcs(wstr, utf8_str, len); wstr[len] = 0; ret = ui_textinput_set_text_w(widget, wstr); free(wstr); @@ -587,7 +587,7 @@ int ui_textinput_set_placeholder(ui_widget_t *w, const char *str) if (!wstr) { return -ENOMEM; } - len = decode_utf8(wstr, str, len); + len = mbstowcs(wstr, str, len); wstr[len] = 0; ret = ui_textinput_set_placeholder_w(w, wstr); free(wstr); diff --git a/lib/ui/src/ui_text_style.c b/lib/ui/src/ui_text_style.c index 25cf80d37..35d6dfc46 100644 --- a/lib/ui/src/ui_text_style.c +++ b/lib/ui/src/ui_text_style.c @@ -61,9 +61,9 @@ static void ui_compute_content(ui_text_style_t *fs, const char *str) if (!str) { return; } - len = decode_utf8(NULL, str, 0); + len = mbstowcs(NULL, str, 0); content = malloc((len + 1) * sizeof(wchar_t)); - len = decode_utf8(content, str, len); + len = mbstowcs(content, str, len); content[len] = 0; if (content[0] == '"') { for (i = 0; content[i + 1]; ++i) { diff --git a/src/lcui.c b/src/lcui.c index 75a0f135f..ce4b76cf0 100644 --- a/src/lcui.c +++ b/src/lcui.c @@ -10,6 +10,7 @@ */ #include +#include #include #include #include @@ -149,6 +150,7 @@ void lcui_destroy_app(void) void lcui_init(void) { lcui_init_app(); + setlocale(LC_CTYPE, ""); if (app_init(L"LCUI Application") != 0) { abort(); }