diff options
Diffstat (limited to 'libpurple/protocols/irc')
-rw-r--r-- | libpurple/protocols/irc/irc.c | 2 | ||||
-rw-r--r-- | libpurple/protocols/irc/irc.h | 2 | ||||
-rw-r--r-- | libpurple/protocols/irc/msgs.c | 10 |
3 files changed, 9 insertions, 5 deletions
diff --git a/libpurple/protocols/irc/irc.c b/libpurple/protocols/irc/irc.c index 9721536931..7efd6622bb 100644 --- a/libpurple/protocols/irc/irc.c +++ b/libpurple/protocols/irc/irc.c @@ -565,7 +565,7 @@ static void irc_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup struct irc_conn *irc = (struct irc_conn *)gc->proto_data; struct irc_buddy *ib = g_new0(struct irc_buddy, 1); ib->name = g_strdup(purple_buddy_get_name(buddy)); - g_hash_table_insert(irc->buddies, ib->name, ib); + g_hash_table_replace(irc->buddies, ib->name, ib); /* if the timer isn't set, this is during signon, so we don't want to flood * ourself off with ISON's, so we don't, but after that we want to know when diff --git a/libpurple/protocols/irc/irc.h b/libpurple/protocols/irc/irc.h index 522405c246..09189c64fa 100644 --- a/libpurple/protocols/irc/irc.h +++ b/libpurple/protocols/irc/irc.h @@ -72,7 +72,7 @@ struct irc_conn { char *name; char *server; char *serverinfo; - char *channels; + GString *channels; int ircop; int identified; int idle; diff --git a/libpurple/protocols/irc/msgs.c b/libpurple/protocols/irc/msgs.c index 81e107d0b1..dec148f9e7 100644 --- a/libpurple/protocols/irc/msgs.c +++ b/libpurple/protocols/irc/msgs.c @@ -336,7 +336,11 @@ void irc_msg_whois(struct irc_conn *irc, const char *name, const char *from, cha if (args[3]) irc->whois.signon = (time_t)atoi(args[3]); } else if (!strcmp(name, "319")) { - irc->whois.channels = g_strdup(args[2]); + if (irc->whois.channels == NULL) { + irc->whois.channels = g_string_new(args[2]); + } else { + irc->whois.channels = g_string_append(irc->whois.channels, args[2]); + } } else if (!strcmp(name, "320")) { irc->whois.identified = 1; } @@ -391,8 +395,8 @@ void irc_msg_endwhois(struct irc_conn *irc, const char *name, const char *from, g_free(irc->whois.serverinfo); } if (irc->whois.channels) { - purple_notify_user_info_add_pair(user_info, _("Currently on"), irc->whois.channels); - g_free(irc->whois.channels); + purple_notify_user_info_add_pair(user_info, _("Currently on"), irc->whois.channels->str); + g_string_free(irc->whois.channels, TRUE); } if (irc->whois.idle) { gchar *timex = purple_str_seconds_to_string(irc->whois.idle); |