--- src/encoding.c | 5 +---- src/message.c | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/src/encoding.c b/src/encoding.c index ef2ff5c..41822df 100644 --- a/src/encoding.c +++ b/src/encoding.c @@ -136,11 +136,8 @@ static char *gg_encoding_convert_utf8_cp1250(const char *src, int src_length, in uint32_t uc = 0, uc_min = 0; for (i = 0, len = 0; (src[i] != 0) && (i < src_length); i++) { - if ((src[i] & 0xc0) == 0xc0) { + if ((src[i] & 0xc0) != 0x80) len++; - } else if ((src[i] & 0x80) == 0x00) { - len++; - } } if ((dst_length != -1) && (len > dst_length)) diff --git a/src/message.c b/src/message.c index d06da5f..d849750 100644 --- a/src/message.c +++ b/src/message.c @@ -415,11 +415,21 @@ size_t gg_message_text_to_html(char *dst, const char *src, gg_encoding_t encodin * na końcu tekstu. */ for (i = 0; ; i++) { + int in_char = 0; + + /* Sprawdź, czy bajt jest kontynuacją znaku UTF-8. */ + if (encoding == GG_ENCODING_UTF8 && (src[i] & 0xc0) == 0x80) + in_char = 1; + /* Analizuj atrybuty tak długo jak dotyczą aktualnego znaku. */ for (;;) { unsigned char attr; size_t attr_pos; + /* Nie wstawiamy niczego wewnątrz wielobajtowego znaku UTF-8. */ + if (in_char) + break; + if (format_idx + 3 > format_len) break; @@ -529,13 +539,11 @@ size_t gg_message_text_to_html(char *dst, const char *src, gg_encoding_t encodin len++; } - /* Sprawdź, czy bajt nie jest kontynuacją znaku unikodowego. */ - - if (encoding != GG_ENCODING_UTF8 || (src[i] & 0xc0) != 0xc0) - char_pos++; - if (src[i] == 0) break; + + if (!in_char) + char_pos++; } /* Zamknij tagi. */ -- 1.7.6.1 _______________________________________________ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel