summaryrefslogtreecommitdiff
path: root/libpurple/protocols/irc
diff options
context:
space:
mode:
Diffstat (limited to 'libpurple/protocols/irc')
-rw-r--r--libpurple/protocols/irc/irc.c2
-rw-r--r--libpurple/protocols/irc/irc.h2
-rw-r--r--libpurple/protocols/irc/msgs.c10
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);