Mercurial > hg
changeset 981:553b8ecf901f
Fixes truncating of utf-8 buddy names (again)
This patch fixes the problem with utf-8 buddy names,
which include multibyte characters. This patch version
(maybe) fixes issue for utf-8 locales too.
author | Myhailo Danylenko <isbear@ukrpost.net> |
---|---|
date | Sun, 22 Oct 2006 20:27:28 +0200 |
parents | 023891f99732 |
children | 9cd7d00812f9 |
files | mcabber/src/screen.c |
diffstat | 1 files changed, 8 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/mcabber/src/screen.c Sat Oct 21 15:00:41 2006 +0200 +++ b/mcabber/src/screen.c Sun Oct 22 20:27:28 2006 +0200 @@ -1135,8 +1135,6 @@ return; } - name = g_new0(char, Roster_Width); - // Update offset if necessary // a) Try to show as many buddylist items as possible i = g_list_length(buddylist) - maxy; @@ -1148,7 +1146,6 @@ i = g_list_position(buddylist, current_buddy); if (i == -1) { // This is bad scr_LogPrint(LPRINT_NORMAL, "Doh! Can't find current selected buddy!!"); - g_free(name); curs_set(cursor_backup); return; } else if (i < offset) { @@ -1162,14 +1159,15 @@ else x_pos = 0; - rline = g_new0(char, Roster_Width+1); + name = g_new0(char, 4*Roster_Width); + rline = g_new0(char, 4*Roster_Width+1); buddy = buddylist; rOffset = offset; for (i=0; i<maxy && buddy; buddy = g_list_next(buddy)) { unsigned short bflags, btype, ismsg, isgrp, ismuc, ishid, isspe; - gchar *name_locale; + gchar *rline_locale; bflags = buddy_getflags(BUDDATA(buddy)); btype = buddy_gettype(BUDDATA(buddy)); @@ -1221,9 +1219,8 @@ wattrset(rosterWnd, get_color(COLOR_ROSTER)); } - name_locale = from_utf8(buddy_getname(BUDDATA(buddy))); if (Roster_Width > 7) - strncpy(name, name_locale, Roster_Width-7); + g_utf8_strncpy(name, buddy_getname(BUDDATA(buddy)), Roster_Width-7); else name[0] = 0; @@ -1249,12 +1246,13 @@ } } - snprintf(rline, Roster_Width, + snprintf(rline, 4*Roster_Width, " %c%c%c%c %s", pending, sepleft, status, sepright, name); } - mvwprintw(rosterWnd, i, x_pos, "%s", rline); - g_free(name_locale); + rline_locale = from_utf8(rline); + mvwprintw(rosterWnd, i, x_pos, "%s", rline_locale); + g_free(rline_locale); i++; }