From: Nathan W. <fac...@us...> - 2003-03-22 16:43:44
|
Update of /cvsroot/gaim/gaim/src In directory sc8-pr-cvs1:/tmp/cvs-serv1010/src Modified Files: buddy.c Log Message: the real solution is to count string length better ;-) Index: buddy.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/buddy.c,v retrieving revision 1.458 retrieving revision 1.459 diff -u -d -r1.458 -r1.459 --- buddy.c 22 Mar 2003 06:11:12 -0000 1.458 +++ buddy.c 22 Mar 2003 16:43:41 -0000 1.459 @@ -894,37 +894,29 @@ } if(tmp) { - char *temp; - + char buf[32]; + char *c = tmp; + int length = 0, vis=0; + gboolean inside = FALSE; g_strdelimit(tmp, "\n", ' '); - if(strlen(tmp) > 20) { - char *c1, *c2; - - statustext = g_strdup_printf("%.20s... ", tmp); - - if ((c1 = strrchr(statustext, '&')) != NULL) { - if ((c2 = strrchr(statustext, ';')) == NULL || - c2 < c1) { - - char *new_statustext; - - /* We must escape this broken entity. */ - new_statustext = g_new0(char, strlen(statustext) + 5); - - strncpy(new_statustext, statustext, c1 - statustext); - sprintf(new_statustext + (c1 - statustext), - "&%s", c1 + 1); - - g_free(statustext); - - statustext = new_statustext; - } - } - + while(*c && vis < 20) { + if(*c == '&') + inside = TRUE; + if(!inside) + vis++; + if(*c == ';') + inside = FALSE; + length++; + c++; /* this is fun */ } + + if(vis == 20) + g_snprintf(buf, sizeof(buf), "%%.%ds...", length); else - statustext = g_strdup_printf("%s ", tmp); + g_snprintf(buf, sizeof(buf), "%%s "); + + statustext = g_strdup_printf(buf, tmp); g_free(tmp); } |