From: Eric W. <war...@us...> - 2001-10-27 21:45:21
|
Update of /cvsroot/gaim/gaim/src In directory usw-pr-cvs1:/tmp/cvs-serv10093 Modified Files: buddy_chat.c Log Message: better ignoring Index: buddy_chat.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/buddy_chat.c,v retrieving revision 1.124 retrieving revision 1.125 diff -u -d -r1.124 -r1.125 --- buddy_chat.c 2001/10/27 00:12:14 1.124 +++ buddy_chat.c 2001/10/27 21:45:17 1.125 @@ -678,8 +678,18 @@ } while (ignore) { - if (!g_strcasecmp(who, ignore->data)) + char *ign = ignore->data; + if (!g_strcasecmp(who, ign)) + return; + if (*ign == '+' && !g_strcasecmp(who, ign + 1)) return; + if (*ign == '@') { + ign++; + if (*ign == '+' && !g_strcasecmp(who, ign + 1)) + return; + if (*ign != '+' && !g_strcasecmp(who, ign)) + return; + } ignore = ignore->next; } @@ -888,6 +898,15 @@ char tmp[BUF_LONG]; + /* we need to check to see if they're ignored before we remove them from the list, + * because otherwise the name is free'd (ignored and in_room point to the same char*'s) + * and we can't search through ignored reliably anymore */ + while (ignored) { + if (!g_strcasecmp(old, ignored->data)) + break; + ignored = ignored->next; + } + while (names) { if (!g_strcasecmp((char *)names->data, old)) { char *tmp2 = names->data; @@ -906,17 +925,13 @@ names = names->next; } - if (!names) + if (!names) { + g_free(name); return; + } b->in_room = g_list_insert_sorted(b->in_room, name, insertname); pos = g_list_index(b->in_room, name); - - while (ignored) { - if (!g_strcasecmp(old, ignored->data)) - break; - ignored = ignored->next; - } if (ignored) { b->ignored = g_list_remove(b->ignored, ignored->data); |