---
 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

Reply via email to