From 3d4dd494b56aee7be0749b323ef7993b88139974 Mon Sep 17 00:00:00 2001 From: dolphin6k Date: Sun, 13 Feb 2022 18:51:08 +0900 Subject: [PATCH] WIN32: Use WideCharToMultiByte() insted of iconv() for label embeddiing. --- src/tuxpaint.c | 46 ++++++++++++++-------------------------------- 1 file changed, 14 insertions(+), 32 deletions(-) diff --git a/src/tuxpaint.c b/src/tuxpaint.c index d79bf0363..c1b72235a 100644 --- a/src/tuxpaint.c +++ b/src/tuxpaint.c @@ -335,7 +335,6 @@ typedef struct safer_dirent #include "win32_print.h" #include #include -#include #undef min #undef max @@ -14748,7 +14747,11 @@ static void do_png_embed_data(png_structp png_ptr) struct label_node *current_node; char *char_stream, *line; size_t dat_size, char_stream_sz, line_sz; - +#ifdef WIN32 + wchar_t wtmpchar; + char tmpstr[16]; + size_t nbtmpstr; +#endif /* Starter foreground */ if (img_starter) @@ -14975,41 +14978,20 @@ static void do_png_embed_data(png_structp png_ptr) { if (current_node->is_enabled == TRUE && current_node->save_texttool_len > 0) { - + fprintf(lfi, "%u\n", current_node->save_texttool_len); + for (i = 0; i < current_node->save_texttool_len; i++) + { #ifdef WIN32 - iconv_t trans; - wchar_t *wch; - char *ch; - char *conv, *conv2; - size_t in, out; - - conv = malloc(255); - trans = iconv_open("UTF-8", "WCHAR_T"); - - fprintf(lfi, "%u\n", current_node->save_texttool_len); - for (i = 0; i < current_node->save_texttool_len; i++) - { - conv2 = conv; - in = 2; - out = 10; - wch = ¤t_node->save_texttool_str[i]; - ch = (char *)wch; - iconv(trans, &ch, &in, &conv, &out); - conv[0] = '\0'; - fprintf(lfi, "%s", conv2); - } + wtmpchar = current_node->save_texttool_str[i]; + nbtmpstr = WideCharToMultiByte(CP_UTF8, 0, &wtmpchar, 1, tmpstr, 16, NULL, NULL); + tmpstr[nbtmpstr] = '\0'; + fprintf(lfi, "%s", tmpstr); #else - fprintf(lfi, "%u\n", current_node->save_texttool_len); - - for (i = 0; i < current_node->save_texttool_len; i++) - { - fprintf(lfi, "%lc", (wint_t) current_node->save_texttool_str[i]); - } + fprintf(lfi, "%lc", (wint_t) current_node->save_texttool_str[i]); #endif - + } fprintf(lfi, "\n"); - fprintf(lfi, "%u\n", current_node->save_color.r); fprintf(lfi, "%u\n", current_node->save_color.g); fprintf(lfi, "%u\n", current_node->save_color.b);