summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSadrul Habib Chowdhury <sadrul@pidgin.im>2008-05-04 02:49:29 +0000
committerSadrul Habib Chowdhury <sadrul@pidgin.im>2008-05-04 02:49:29 +0000
commit77f141075c49ed8c3cd56ff470f868a01c7209b5 (patch)
tree68597fa21f91f3420ea471ed8b5c221643ed786d
parentbdb1b8ed1e1f74dc0650cbba389e3e8dfe1953a6 (diff)
parent103b7b544bfadb065b8f9f21d98d74e74d2c6bf9 (diff)
downloadpidgin-77f141075c49ed8c3cd56ff470f868a01c7209b5.tar.gz
merge of '0242b0a1e444ba616771d01feca14ec2647c60d0'
and 'df744a1b1bbef7125e0f726caa7594f986c1b6c4'
-rw-r--r--ChangeLog2
-rw-r--r--libpurple/log.c12
-rw-r--r--libpurple/plugins/log_reader.c20
-rw-r--r--libpurple/protocols/irc/msgs.c12
-rw-r--r--libpurple/protocols/msn/contact.c30
-rw-r--r--libpurple/protocols/msn/dialog.c2
-rw-r--r--libpurple/protocols/msn/nexus.c14
-rw-r--r--libpurple/protocols/msn/notification.c11
-rw-r--r--libpurple/protocols/msn/oim.c20
-rw-r--r--libpurple/protocols/msn/page.c11
-rw-r--r--libpurple/protocols/msn/slp.c1
-rw-r--r--libpurple/protocols/msn/slpcall.c11
-rw-r--r--libpurple/protocols/msn/slplink.c7
-rw-r--r--libpurple/protocols/msn/slpmsg.c1
-rw-r--r--libpurple/protocols/msn/soap2.c15
-rw-r--r--libpurple/protocols/msn/sync.c7
-rw-r--r--libpurple/protocols/msn/userlist.c3
-rw-r--r--libpurple/protocols/yahoo/yahoo.c10
-rw-r--r--libpurple/protocols/yahoo/yahoo_aliases.c33
-rw-r--r--libpurple/protocols/yahoo/yahoo_aliases.h14
-rw-r--r--libpurple/protocols/yahoo/yahoo_friend.c30
-rw-r--r--libpurple/protocols/yahoo/yahoo_friend.h10
-rw-r--r--pidgin/gtkaccount.c8
-rw-r--r--pidgin/gtkprefs.c2
24 files changed, 153 insertions, 133 deletions
diff --git a/ChangeLog b/ChangeLog
index 9a7fc6559a..abd35bf86f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,8 @@ version 2.x.x:
* IRC now displays ban lists in-channel for joined channels.
* Fixed a bug where the list of loaded plugins would get removed when
switching between different operating systems.
+ * Fix reception of IRC PART without a part message on Undernet
+ (fixes a problem with litter in the channel user list).
Pidgin:
* The typing notification in the conversation history can be disabled or
diff --git a/libpurple/log.c b/libpurple/log.c
index e9727d2b90..c5a6557283 100644
--- a/libpurple/log.c
+++ b/libpurple/log.c
@@ -667,6 +667,18 @@ void
purple_log_uninit(void)
{
purple_signals_unregister_by_instance(purple_log_get_handle());
+
+ purple_log_logger_remove(html_logger);
+ purple_log_logger_free(html_logger);
+ html_logger = NULL;
+
+ purple_log_logger_remove(txt_logger);
+ purple_log_logger_free(txt_logger);
+ txt_logger = NULL;
+
+ purple_log_logger_remove(old_logger);
+ purple_log_logger_free(old_logger);
+ old_logger = NULL;
}
/****************************************************************************
diff --git a/libpurple/plugins/log_reader.c b/libpurple/plugins/log_reader.c
index bb5057bb36..9663a27037 100644
--- a/libpurple/plugins/log_reader.c
+++ b/libpurple/plugins/log_reader.c
@@ -2789,14 +2789,34 @@ plugin_unload(PurplePlugin *plugin)
g_return_val_if_fail(plugin != NULL, FALSE);
purple_log_logger_remove(adium_logger);
+ purple_log_logger_free(adium_logger);
+ adium_logger = NULL;
+
#if 0
purple_log_logger_remove(fire_logger);
+ purple_log_logger_free(fire_logger);
+ fire_logger = NULL;
+
purple_log_logger_remove(messenger_plus_logger);
+ purple_log_logger_free(messenger_plus_logger);
+ messenger_plus_logger = NULL;
#endif
+
purple_log_logger_remove(msn_logger);
+ purple_log_logger_free(msn_logger);
+ msn_logger = NULL;
+
purple_log_logger_remove(trillian_logger);
+ purple_log_logger_free(trillian_logger);
+ trillian_logger = NULL;
+
purple_log_logger_remove(qip_logger);
+ purple_log_logger_free(qip_logger);
+ qip_logger = NULL;
+
purple_log_logger_remove(amsn_logger);
+ purple_log_logger_free(amsn_logger);
+ amsn_logger = NULL;
return TRUE;
}
diff --git a/libpurple/protocols/irc/msgs.c b/libpurple/protocols/irc/msgs.c
index dc5ffbd0c8..510fd247cc 100644
--- a/libpurple/protocols/irc/msgs.c
+++ b/libpurple/protocols/irc/msgs.c
@@ -1015,14 +1015,18 @@ void irc_msg_part(struct irc_conn *irc, const char *name, const char *from, char
{
PurpleConnection *gc = purple_account_get_connection(irc->account);
PurpleConversation *convo;
- char *nick, *msg;
+ char *nick, *msg, *channel;
if (!args || !args[0] || !gc)
return;
- convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[0], irc->account);
+ /* Undernet likes to :-quote the channel name, for no good reason
+ * that I can see. This catches that. */
+ channel = (args[0][0] == ':') ? &args[0][1] : args[0];
+
+ convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, channel, irc->account);
if (!convo) {
- purple_debug(PURPLE_DEBUG_INFO, "irc", "Got a PART on %s, which doesn't exist -- probably closed\n", args[0]);
+ purple_debug(PURPLE_DEBUG_INFO, "irc", "Got a PART on %s, which doesn't exist -- probably closed\n", channel);
return;
}
@@ -1033,7 +1037,7 @@ void irc_msg_part(struct irc_conn *irc, const char *name, const char *from, char
(args[1] && *args[1]) ? ": " : "",
(escaped && *escaped) ? escaped : "");
g_free(escaped);
- purple_conv_chat_write(PURPLE_CONV_CHAT(convo), args[0], msg, PURPLE_MESSAGE_SYSTEM, time(NULL));
+ purple_conv_chat_write(PURPLE_CONV_CHAT(convo), channel, msg, PURPLE_MESSAGE_SYSTEM, time(NULL));
g_free(msg);
serv_got_chat_left(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(convo)));
} else {
diff --git a/libpurple/protocols/msn/contact.c b/libpurple/protocols/msn/contact.c
index 0d548aeae3..61e1f2067d 100644
--- a/libpurple/protocols/msn/contact.c
+++ b/libpurple/protocols/msn/contact.c
@@ -100,56 +100,46 @@ msn_callback_state_free(MsnCallbackState *state)
void
msn_callback_state_set_who(MsnCallbackState *state, const gchar *who)
{
- gchar *nval;
g_return_if_fail(state != NULL);
- nval = g_strdup(who);
g_free(state->who);
- state->who = nval;
+ state->who = g_strdup(who);
}
void
msn_callback_state_set_uid(MsnCallbackState *state, const gchar *uid)
{
- gchar *nval;
g_return_if_fail(state != NULL);
- nval = g_strdup(uid);
g_free(state->uid);
- state->uid = nval;
+ state->uid = g_strdup(uid);
}
void
msn_callback_state_set_old_group_name(MsnCallbackState *state, const gchar *old_group_name)
{
- gchar *nval;
g_return_if_fail(state != NULL);
- nval = g_strdup(old_group_name);
g_free(state->old_group_name);
- state->old_group_name = nval;
+ state->old_group_name = g_strdup(old_group_name);
}
void
msn_callback_state_set_new_group_name(MsnCallbackState *state, const gchar *new_group_name)
{
- gchar *nval;
g_return_if_fail(state != NULL);
- nval = g_strdup(new_group_name);
g_free(state->new_group_name);
- state->new_group_name = nval;
+ state->new_group_name = g_strdup(new_group_name);
}
void
msn_callback_state_set_guid(MsnCallbackState *state, const gchar *guid)
{
- gchar *nval;
g_return_if_fail(state != NULL);
- nval = g_strdup(guid);
g_free(state->guid);
- state->guid = nval;
+ state->guid = g_strdup(guid);
}
@@ -495,12 +485,13 @@ msn_parse_addressbook_mobile(xmlnode *contactInfo, char **inout_mobile_number)
xmlnode *messenger_enabled;
char *is_messenger_enabled = NULL;
+ g_free(mobile_number);
mobile_number = xmlnode_get_data(number);
if (mobile_number &&
- (messenger_enabled = xmlnode_get_child(contact_phone, "isMessengerEnabled"))
- && (is_messenger_enabled = xmlnode_get_data(messenger_enabled))
- && !strcmp(is_messenger_enabled, "true"))
+ (messenger_enabled = xmlnode_get_child(contact_phone, "isMessengerEnabled"))
+ && (is_messenger_enabled = xmlnode_get_data(messenger_enabled))
+ && !strcmp(is_messenger_enabled, "true"))
mobile = TRUE;
g_free(is_messenger_enabled);
@@ -538,6 +529,7 @@ msn_parse_addressbook_contacts(MsnContact *contact, xmlnode *node)
g_free(Name);
g_free(uid);
g_free(type);
+ g_free(mobile_number);
passport = Name = uid = type = mobile_number = NULL;
mobile = FALSE;
@@ -659,6 +651,7 @@ msn_parse_addressbook_contacts(MsnContact *contact, xmlnode *node)
g_free(Name);
g_free(uid);
g_free(type);
+ g_free(mobile_number);
}
static gboolean
@@ -691,6 +684,7 @@ msn_parse_addressbook(MsnContact * contact, xmlnode *node)
g_free(errorcode);
return TRUE;
}
+ g_free(errorcode);
}
return FALSE;
diff --git a/libpurple/protocols/msn/dialog.c b/libpurple/protocols/msn/dialog.c
index 1b5ff3c540..013491315a 100644
--- a/libpurple/protocols/msn/dialog.c
+++ b/libpurple/protocols/msn/dialog.c
@@ -112,7 +112,7 @@ msn_show_sync_issue(MsnSession *session, const char *passport,
data = g_new0(MsnAddRemData, 1);
data->who = g_strdup(passport);
- data->group = group_name != NULL ? g_strdup(group_name) : NULL;
+ data->group = g_strdup(group_name);
data->gc = gc;
msg = g_strdup_printf(_("Buddy list synchronization issue in %s (%s)"),
diff --git a/libpurple/protocols/msn/nexus.c b/libpurple/protocols/msn/nexus.c
index 58d553ac7f..56293ebd8b 100644
--- a/libpurple/protocols/msn/nexus.c
+++ b/libpurple/protocols/msn/nexus.c
@@ -52,6 +52,7 @@ msn_nexus_destroy(MsnNexus *nexus)
if (nexus->challenge_data != NULL)
g_hash_table_destroy(nexus->challenge_data);
+ g_free(nexus->challenge_data_str);
g_free(nexus);
}
@@ -101,13 +102,10 @@ nexus_got_response_cb(MsnSoapMessage *req, MsnSoapMessage *resp, gpointer data)
msn_twn_p = g_hash_table_lookup(nexus->challenge_data, "p");
/*setup the t and p parameter for session*/
- if (session->passport_info.t != NULL){
- g_free(session->passport_info.t);
- }
+ g_free(session->passport_info.t);
session->passport_info.t = g_strdup(msn_twn_t);
- if (session->passport_info.p != NULL)
- g_free(session->passport_info.p);
+ g_free(session->passport_info.p);
session->passport_info.p = g_strdup(msn_twn_p);
cert_str = g_strdup_printf("t=%s&p=%s",msn_twn_t,msn_twn_p);
@@ -133,7 +131,8 @@ msn_nexus_connect(MsnNexus *nexus)
MsnSession *session = nexus->session;
char *ru,*lc,*id,*tw,*ct,*kpp,*kv,*ver,*rn,*tpf;
char *fs0,*fs;
- char *username, *password;
+ const char *username;
+ char *password;
char *tail;
#ifdef NEXUS_LOGIN_TWN
char *challenge_str;
@@ -147,7 +146,7 @@ msn_nexus_connect(MsnNexus *nexus)
msn_session_set_login_step(session, MSN_LOGIN_STEP_GET_COOKIE);
/*prepare the Windows Live ID authentication token*/
- username = g_strdup(purple_account_get_username(session->account));
+ username = purple_account_get_username(session->account);
password = g_strndup(purple_connection_get_password(session->account->gc), 16);
lc = (char *)g_hash_table_lookup(nexus->challenge_data, "lc");
@@ -170,7 +169,6 @@ msn_nexus_connect(MsnNexus *nexus)
if(!(lc && id && tw && ru && ct && kpp && kv && ver && tpf)){
purple_debug_error("MSN Nexus","WLM Authenticate Key Error!\n");
msn_session_set_error(session, MSN_ERROR_AUTH, _("Windows Live ID authentication Failed"));
- g_free(username);
g_free(password);
msn_nexus_destroy(nexus);
session->nexus = NULL;
diff --git a/libpurple/protocols/msn/notification.c b/libpurple/protocols/msn/notification.c
index 15dbb1b83f..92c62d58f3 100644
--- a/libpurple/protocols/msn/notification.c
+++ b/libpurple/protocols/msn/notification.c
@@ -414,7 +414,9 @@ msg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
{
g_return_if_fail(cmd->payload_cb != NULL);
- purple_debug_info("MSNP14", "MSG payload:{%.*s}\n", (guint)(cmd->payload_len), cmd->payload);
+#if 0 /* glib on win32 doesn't correctly support precision modifiers for a string */
+ purple_debug_info("MSNP14", "MSG payload:{%.*s}\n", cmd->payload_len, cmd->payload);
+#endif
cmd->payload_cb(cmdproc, cmd, cmd->payload, cmd->payload_len);
}
}
@@ -647,8 +649,8 @@ msn_notification_post_adl(MsnCmdProc *cmdproc, const char *payload, int payload_
{
MsnTransaction *trans;
purple_debug_info("MSN Notification","Sending ADL with payload: %s\n", payload);
- trans = msn_transaction_new(cmdproc, "ADL","%" G_GSIZE_FORMAT, strlen(payload));
- msn_transaction_set_payload(trans, payload, strlen(payload));
+ trans = msn_transaction_new(cmdproc, "ADL","%" G_GSIZE_FORMAT, payload_len);
+ msn_transaction_set_payload(trans, payload, payload_len);
msn_cmdproc_send_trans(cmdproc, trans);
}
@@ -1705,6 +1707,9 @@ ubx_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload,
msn_user_set_currentmedia(user, &media);
else
msn_user_set_currentmedia(user, NULL);
+ g_free(media.title);
+ g_free(media.album);
+ g_free(media.artist);
g_free(str);
msn_user_update(user);
diff --git a/libpurple/protocols/msn/oim.c b/libpurple/protocols/msn/oim.c
index 5b90f1f6f9..3fb9348337 100644
--- a/libpurple/protocols/msn/oim.c
+++ b/libpurple/protocols/msn/oim.c
@@ -58,7 +58,7 @@ msn_oim_new(MsnSession *session)
oim = g_new0(MsnOim, 1);
oim->session = session;
- oim->oim_list = NULL;
+ oim->oim_list = NULL;
oim->run_id = rand_guid();
oim->challenge = NULL;
oim->send_queue = g_queue_new();
@@ -71,16 +71,18 @@ void
msn_oim_destroy(MsnOim *oim)
{
MsnOimSendReq *request;
-
- purple_debug_info("OIM","destroy the OIM \n");
+
+ purple_debug_info("OIM", "destroy the OIM %p\n", oim);
g_free(oim->run_id);
g_free(oim->challenge);
-
+
while((request = g_queue_pop_head(oim->send_queue)) != NULL){
msn_oim_free_send_req(request);
}
+
g_queue_free(oim->send_queue);
-
+ g_list_free(oim->oim_list);
+
g_free(oim);
}
@@ -91,7 +93,7 @@ msn_oim_new_send_req(const char *from_member, const char*friendname,
MsnOimSendReq *request;
request = g_new0(MsnOimSendReq, 1);
- request->from_member =g_strdup(from_member);
+ request->from_member = g_strdup(from_member);
request->friendname = g_strdup(friendname);
request->to_member = g_strdup(to_member);
request->oim_msg = g_strdup(msg);
@@ -170,7 +172,6 @@ msn_oim_send_read_cb(MsnSoapMessage *request, MsnSoapMessage *response,
msg->oim_msg);
g_queue_push_head(oim->send_queue, msg);
msn_oim_send_msg(oim);
- return;
} else {
purple_debug_info("msnoim",
"can't find lock key for OIM: %s\n",
@@ -191,9 +192,10 @@ msn_oim_send_read_cb(MsnSoapMessage *request, MsnSoapMessage *response,
purple_debug_info("MSNP14","resending OIM: %s\n", msg->oim_msg);
g_queue_push_head(oim->send_queue, msg);
msn_oim_send_msg(oim);
- return;
}
}
+
+ g_free(faultcode_str);
}
}
}
@@ -472,7 +474,7 @@ msn_parse_oim_msg(MsnOim *oim,const char *xmlmsg)
xmlnode *iu_node;
MsnSession *session = oim->session;
- purple_debug_info("MSNP14:OIM", "%s", xmlmsg);
+ purple_debug_info("MSNP14:OIM", "%s\n", xmlmsg);
node = xmlnode_from_str(xmlmsg, -1);
if (strcmp(node->name, "MD") != 0) {
diff --git a/libpurple/protocols/msn/page.c b/libpurple/protocols/msn/page.c
index 6d4d0d5c80..250a7221c3 100644
--- a/libpurple/protocols/msn/page.c
+++ b/libpurple/protocols/msn/page.c
@@ -39,14 +39,9 @@ msn_page_destroy(MsnPage *page)
{
g_return_if_fail(page != NULL);
- if (page->body != NULL)
- g_free(page->body);
-
- if (page->from_location != NULL)
- g_free(page->from_location);
-
- if (page->from_phone != NULL)
- g_free(page->from_phone);
+ g_free(page->body);
+ g_free(page->from_location);
+ g_free(page->from_phone);
g_free(page);
}
diff --git a/libpurple/protocols/msn/slp.c b/libpurple/protocols/msn/slp.c
index b77db86ed1..f72db11ef4 100644
--- a/libpurple/protocols/msn/slp.c
+++ b/libpurple/protocols/msn/slp.c
@@ -359,6 +359,7 @@ got_sessionreq(MsnSlpCall *slpcall, const char *branch,
g_free(bin);
purple_xfer_set_filename(xfer, file_name);
+ g_free(file_name);
purple_xfer_set_size(xfer, file_size);
purple_xfer_set_init_fnc(xfer, msn_xfer_init);
purple_xfer_set_request_denied_fnc(xfer, msn_xfer_cancel);
diff --git a/libpurple/protocols/msn/slpcall.c b/libpurple/protocols/msn/slpcall.c
index 4dcf4c2ead..9c9fc5ea70 100644
--- a/libpurple/protocols/msn/slpcall.c
+++ b/libpurple/protocols/msn/slpcall.c
@@ -71,14 +71,9 @@ msn_slp_call_destroy(MsnSlpCall *slpcall)
if (slpcall->timer)
purple_timeout_remove(slpcall->timer);
- if (slpcall->id != NULL)
- g_free(slpcall->id);
-
- if (slpcall->branch != NULL)
- g_free(slpcall->branch);
-
- if (slpcall->data_info != NULL)
- g_free(slpcall->data_info);
+ g_free(slpcall->id);
+ g_free(slpcall->branch);
+ g_free(slpcall->data_info);
for (e = slpcall->slplink->slp_msgs; e != NULL; )
{
diff --git a/libpurple/protocols/msn/slplink.c b/libpurple/protocols/msn/slplink.c
index 753ef5d5cc..7975725e25 100644
--- a/libpurple/protocols/msn/slplink.c
+++ b/libpurple/protocols/msn/slplink.c
@@ -101,11 +101,8 @@ msn_slplink_destroy(MsnSlpLink *slplink)
session = slplink->session;
- if (slplink->local_user != NULL)
- g_free(slplink->local_user);
-
- if (slplink->remote_user != NULL)
- g_free(slplink->remote_user);
+ g_free(slplink->local_user);
+ g_free(slplink->remote_user);
#if 0
if (slplink->directconn != NULL)
diff --git a/libpurple/protocols/msn/slpmsg.c b/libpurple/protocols/msn/slpmsg.c
index 9bade7d224..462efb937a 100644
--- a/libpurple/protocols/msn/slpmsg.c
+++ b/libpurple/protocols/msn/slpmsg.c
@@ -95,6 +95,7 @@ msn_slpmsg_destroy(MsnSlpMessage *slpmsg)
msg->nak_cb = NULL;
msg->ack_data = NULL;
}
+ g_list_free(slpmsg->msgs);
slplink->slp_msgs = g_list_remove(slplink->slp_msgs, slpmsg);
diff --git a/libpurple/protocols/msn/soap2.c b/libpurple/protocols/msn/soap2.c
index 850d21604f..45efcdcf32 100644
--- a/libpurple/protocols/msn/soap2.c
+++ b/libpurple/protocols/msn/soap2.c
@@ -261,7 +261,7 @@ msn_soap_handle_body(MsnSoapConnection *conn, MsnSoapMessage *response)
static void
msn_soap_read_cb(gpointer data, gint fd, PurpleInputCondition cond)
{
- MsnSoapConnection *conn = data;
+ MsnSoapConnection *conn = data;
int count = 0, cnt;
char buf[8192];
char *linebreak;
@@ -382,7 +382,7 @@ msn_soap_read_cb(gpointer data, gint fd, PurpleInputCondition cond)
}
if (!handled && conn->headers_done) {
- if (conn->buf->len - conn->handled_len >=
+ if (conn->buf->len - conn->handled_len >=
conn->body_len) {
xmlnode *node = xmlnode_from_str(cursor, conn->body_len);
@@ -394,8 +394,11 @@ msn_soap_read_cb(gpointer data, gint fd, PurpleInputCondition cond)
conn->message = NULL;
message->xml = node;
- if (!msn_soap_handle_body(conn, message))
+ if (!msn_soap_handle_body(conn, message)) {
+ msn_soap_message_destroy(message);
return;
+ }
+ msn_soap_message_destroy(message);
}
msn_soap_connection_handle_next(conn);
@@ -508,7 +511,7 @@ msn_soap_connection_run(gpointer data)
g_free(authstr);
g_free(body);
- }
+ }
}
return FALSE;
@@ -643,12 +646,12 @@ msn_soap_message_destroy(MsnSoapMessage *message)
}
void
-msn_soap_message_add_header(MsnSoapMessage *req,
+msn_soap_message_add_header(MsnSoapMessage *message,
const char *name, const char *value)
{
char *header = g_strdup_printf("%s: %s\r\n", name, value);
- req->headers = g_slist_prepend(req->headers, header);
+ message->headers = g_slist_prepend(message->headers, header);
}
static void
diff --git a/libpurple/protocols/msn/sync.c b/libpurple/protocols/msn/sync.c
index 77ed063ef5..7f727fc2b7 100644
--- a/libpurple/protocols/msn/sync.c
+++ b/libpurple/protocols/msn/sync.c
@@ -156,16 +156,13 @@ lst_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
for (c = tokens; *c != NULL; c++)
{
- char *id;
-
- id = *c;
- group_ids = g_slist_append(group_ids, g_strdup(id));
+ group_ids = g_slist_append(group_ids, *c);
}
- g_strfreev(tokens);
msn_got_lst_user(session, user, list_op, group_ids);
+ g_strfreev(tokens);
g_slist_free(group_ids);
}
else
diff --git a/libpurple/protocols/msn/userlist.c b/libpurple/protocols/msn/userlist.c
index 2fdb283a97..e867c173c1 100644
--- a/libpurple/protocols/msn/userlist.c
+++ b/libpurple/protocols/msn/userlist.c
@@ -349,8 +349,7 @@ msn_got_lst_user(MsnSession *session, MsnUser *user,
GSList *c;
for (c = group_ids; c != NULL; c = g_slist_next(c))
{
- char *group_id;
- group_id = c->data;
+ char *group_id = c->data;
msn_user_add_group_id(user, group_id);
}
diff --git a/libpurple/protocols/yahoo/yahoo.c b/libpurple/protocols/yahoo/yahoo.c
index aafa7ccf44..a4c818ad72 100644
--- a/libpurple/protocols/yahoo/yahoo.c
+++ b/libpurple/protocols/yahoo/yahoo.c
@@ -3483,9 +3483,12 @@ yahoo_get_inbox_token_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,
{
PurpleConnection *gc = user_data;
gboolean set_cookie = FALSE;
- char *url;
+ gchar *url;
+ struct yahoo_data *yd = gc->proto_data;
g_return_if_fail(PURPLE_CONNECTION_IS_VALID(gc));
+
+ yd->url_datas = g_slist_remove(yd->url_datas, url_data);
if (error_message != NULL)
purple_debug_error("yahoo", "Requesting mail login token failed: %s\n", error_message);
@@ -3500,7 +3503,6 @@ yahoo_get_inbox_token_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,
}
if (!set_cookie) {
- struct yahoo_data *yd = gc->proto_data;
purple_debug_error("yahoo", "No mail login token; forwarding to login screen.\n");
url = g_strdup(yd->jp ? YAHOOJP_MAIL_URL : YAHOO_MAIL_URL);
}
@@ -3541,7 +3543,9 @@ static void yahoo_show_inbox(PurplePluginAction *action)
g_free(request);
- if (url_data == NULL) {
+ if (url_data != NULL)
+ yd->url_datas = g_slist_prepend(yd->url_datas, url_data);
+ else {
const char *yahoo_mail_url = (yd->jp ? YAHOOJP_MAIL_URL : YAHOO_MAIL_URL);
purple_debug_error("yahoo",
"Unable to request mail login token; forwarding to login screen.");
diff --git a/libpurple/protocols/yahoo/yahoo_aliases.c b/libpurple/protocols/yahoo/yahoo_aliases.c
index bd117551a4..70f84b9be1 100644
--- a/libpurple/protocols/yahoo/yahoo_aliases.c
+++ b/libpurple/protocols/yahoo/yahoo_aliases.c
@@ -32,6 +32,7 @@
#include "version.h"
#include "yahoo.h"
#include "yahoo_aliases.h"
+#include "yahoo_friend.h"
#include "yahoo_packet.h"
/* I hate hardcoding this stuff, but Yahoo never sends us anything to use. Someone in the know may be able to tweak this URL */
@@ -70,7 +71,8 @@ yahoo_fetch_aliases_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,cons
} else {
gchar *full_name, *nick_name, *alias;
const char *yid, *id, *fn, *ln, *nn;
- PurpleBuddy *b = NULL;
+ YahooFriend *f;
+ PurpleBuddy *b;
xmlnode *item, *contacts;
/* Put our web response into a xmlnode for easy management */
@@ -108,19 +110,12 @@ yahoo_fetch_aliases_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data,cons
alias = full_name; /* If no Yahoo nickname, we can use the full_name created above */
/* Find the local buddy that matches */
+ f = yahoo_friend_find(cb->gc, yid);
b = purple_find_buddy(cb->gc->account, yid);
/* If we don't find a matching buddy, ignore the alias !! */
- if (b != NULL) {
- /* Create an object that we can attach to the buddies proto_data pointer */
- struct YahooUser *yu;
- yu = g_new0(struct YahooUser, 1);
- yu->id = g_strdup(id);
- yu->firstname = g_strdup(fn);
- yu->lastname = g_strdup(ln);
- yu->nickname = g_strdup(nn);
- /* TODO: Isn't there a possiblity that b->proto_data is already set? */
- b->proto_data=yu;
+ if (f != NULL && b != NULL) {
+ yahoo_friend_set_alias_id(f, id);
/* Finally, if we received an alias, we better update the buddy list */
if (alias != NULL) {
@@ -237,14 +232,13 @@ void
yahoo_update_alias(PurpleConnection *gc, const char *who, const char *alias)
{
struct yahoo_data *yd;
- struct YahooUser *yu;
char *content, *url, *request, *webpage, *webaddress, *strtmp;
char *escaped_alias, *alias_jp, *converted_alias_jp;
int inttmp;
struct callback_data *cb;
- PurpleBuddy *buddy;
PurpleUtilFetchUrlData *url_data;
gboolean use_whole_url = FALSE;
+ YahooFriend *f;
/* use whole URL if using HTTP Proxy */
if ((gc->account->proxy_info) && (gc->account->proxy_info->type == PURPLE_PROXY_HTTP))
@@ -254,20 +248,19 @@ yahoo_update_alias(PurpleConnection *gc, const char *who, const char *alias)
g_return_if_fail(who != NULL);
g_return_if_fail(gc != NULL);
- purple_debug_info("yahoo", "Sending '%s' as new alias for user '%s'.\n",alias, who);
+ purple_debug_info("yahoo", "Sending '%s' as new alias for user '%s'.\n", alias, who);
- buddy = purple_find_buddy(gc->account, who);
- if (buddy == NULL || buddy->proto_data == NULL) {
+ f = yahoo_friend_find(gc, who);
+ if (f == NULL) {
purple_debug_info("yahoo", "Missing proto_data (get_yahoo_aliases must have failed), bailing out\n");
return;
}
yd = gc->proto_data;
- yu = buddy->proto_data;
/* Using callback_data so I have access to gc in the callback function */
cb = g_new0(struct callback_data, 1);
- cb->id = g_strdup(yu->id);
+ cb->id = g_strdup(yahoo_friend_get_alias_id(f));
cb->gc = gc;
/* Build all the info to make the web request */
@@ -279,7 +272,7 @@ yahoo_update_alias(PurpleConnection *gc, const char *who, const char *alias)
converted_alias_jp = yahoo_convert_to_numeric(alias_jp);
content = g_strdup_printf("<ab k=\"%s\" cc=\"1\">\n"
"<ct e=\"1\" yi='%s' id='%s' nn='%s' pr='0' />\n</ab>\r\n",
- gc->account->username, who, yu->id, converted_alias_jp);
+ gc->account->username, who, yahoo_friend_get_alias_id(f), converted_alias_jp);
free(converted_alias_jp);
g_free(alias_jp);
}
@@ -287,7 +280,7 @@ yahoo_update_alias(PurpleConnection *gc, const char *who, const char *alias)
escaped_alias = g_markup_escape_text(alias, strlen(alias));
content = g_strdup_printf("<?xml version=\"1.0\" encoding=\"utf-8\"?><ab k=\"%s\" cc=\"1\">\n"
"<ct e=\"1\" yi='%s' id='%s' nn='%s' pr='0' />\n</ab>\r\n",
- gc->account->username, who, yu->id, escaped_alias);
+ gc->account->username, who, yahoo_friend_get_alias_id(f), escaped_alias);
g_free(escaped_alias);
}
diff --git a/libpurple/protocols/yahoo/yahoo_aliases.h b/libpurple/protocols/yahoo/yahoo_aliases.h
index 024f8fc995..049a23345f 100644
--- a/libpurple/protocols/yahoo/yahoo_aliases.h
+++ b/libpurple/protocols/yahoo/yahoo_aliases.h
@@ -33,18 +33,6 @@
#include "yahoo.h"
#include "yahoo_packet.h"
-
-/**
- * The additional protocol specific info attached to each buddy. We need
- * to store the unique numeric id number to allow us to push alias changes.
- */
-struct YahooUser
-{
- const char *id; /* The yahoo accountid for this buddy (not YahooID but numeric value) */
- char *firstname; /* Storing this information for no real reason, just because */
- char *lastname; /* Storing this information for no real reason, just because */
- char *nickname; /* Storing this information for no real reason, just because */
-};
-
void yahoo_update_alias(PurpleConnection *gc, const char *who, const char *alias);
void yahoo_fetch_aliases(PurpleConnection *gc);
+
diff --git a/libpurple/protocols/yahoo/yahoo_friend.c b/libpurple/protocols/yahoo/yahoo_friend.c
index 01ef10bf81..d0e348da52 100644
--- a/libpurple/protocols/yahoo/yahoo_friend.c
+++ b/libpurple/protocols/yahoo/yahoo_friend.c
@@ -76,8 +76,7 @@ YahooFriend *yahoo_friend_find_or_new(PurpleConnection *gc, const char *name)
void yahoo_friend_set_ip(YahooFriend *f, const char *ip)
{
- if (f->ip)
- g_free(f->ip);
+ g_free(f->ip);
f->ip = g_strdup(ip);
}
@@ -88,8 +87,7 @@ const char *yahoo_friend_get_ip(YahooFriend *f)
void yahoo_friend_set_game(YahooFriend *f, const char *game)
{
- if (f->game)
- g_free(f->game);
+ g_free(f->game);
if (game)
f->game = g_strdup(game);
@@ -104,8 +102,7 @@ const char *yahoo_friend_get_game(YahooFriend *f)
void yahoo_friend_set_status_message(YahooFriend *f, char *msg)
{
- if (f->msg)
- g_free(f->msg);
+ g_free(f->msg);
f->msg = msg;
}
@@ -125,15 +122,24 @@ gboolean yahoo_friend_get_buddy_icon_need_request(YahooFriend *f)
return !f->bicon_sent_request;
}
+void yahoo_friend_set_alias_id(YahooFriend *f, const char *alias_id)
+{
+ g_free(f->alias_id);
+ f->alias_id = g_strdup(alias_id);
+}
+
+const char *yahoo_friend_get_alias_id(YahooFriend *f)
+{
+ return f->alias_id;
+}
+
void yahoo_friend_free(gpointer p)
{
YahooFriend *f = p;
- if (f->msg)
- g_free(f->msg);
- if (f->game)
- g_free(f->game);
- if (f->ip)
- g_free(f->ip);
+ g_free(f->msg);
+ g_free(f->game);
+ g_free(f->ip);
+ g_free(f->alias_id);
g_free(f);
}
diff --git a/libpurple/protocols/yahoo/yahoo_friend.h b/libpurple/protocols/yahoo/yahoo_friend.h
index 93b16b85e8..6aa103f682 100644
--- a/libpurple/protocols/yahoo/yahoo_friend.h
+++ b/libpurple/protocols/yahoo/yahoo_friend.h
@@ -39,16 +39,17 @@ typedef enum {
*/
typedef struct _YahooFriend {
enum yahoo_status status;
- char *msg;
- char *game;
+ gchar *msg;
+ gchar *game;
int idle;
int away;
gboolean sms;
- char *ip;
+ gchar *ip;
gboolean bicon_sent_request;
YahooPresenceVisibility presence;
int protocol; /* 1=LCS, 2=MSN*/
long int version_id;
+ gchar *alias_id;
} YahooFriend;
YahooFriend *yahoo_friend_find(PurpleConnection *gc, const char *name);
@@ -63,6 +64,9 @@ const char *yahoo_friend_get_game(YahooFriend *f);
void yahoo_friend_set_status_message(YahooFriend *f, char *msg);
const char *yahoo_friend_get_status_message(YahooFriend *f);
+void yahoo_friend_set_alias_id(YahooFriend *f, const char *alias_id);
+const char *yahoo_friend_get_alias_id(YahooFriend *f);
+
void yahoo_friend_set_buddy_icon_need_request(YahooFriend *f, gboolean needs);
gboolean yahoo_friend_get_buddy_icon_need_request(YahooFriend *f);
diff --git a/pidgin/gtkaccount.c b/pidgin/gtkaccount.c
index 7087526940..83307b0828 100644
--- a/pidgin/gtkaccount.c
+++ b/pidgin/gtkaccount.c
@@ -511,10 +511,6 @@ add_login_options(AccountPrefsDialog *dialog, GtkWidget *parent)
gtk_entry_set_text(GTK_ENTRY(dialog->password_entry),
purple_account_get_password(dialog->account));
- if (purple_account_get_alias(dialog->account))
- gtk_entry_set_text(GTK_ENTRY(dialog->alias_entry),
- purple_account_get_alias(dialog->account));
-
gtk_toggle_button_set_active(
GTK_TOGGLE_BUTTON(dialog->remember_pass_check),
purple_account_get_remember_password(dialog->account));
@@ -635,6 +631,10 @@ add_user_options(AccountPrefsDialog *dialog, GtkWidget *parent)
gpointer data = NULL;
size_t len = 0;
+ if (purple_account_get_alias(dialog->account))
+ gtk_entry_set_text(GTK_ENTRY(dialog->alias_entry),
+ purple_account_get_alias(dialog->account));
+
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->new_mail_check),
purple_account_get_check_mail(dialog->account));
diff --git a/pidgin/gtkprefs.c b/pidgin/gtkprefs.c
index 253ea52175..7af4abdf8b 100644
--- a/pidgin/gtkprefs.c
+++ b/pidgin/gtkprefs.c
@@ -1075,7 +1075,7 @@ conv_page(void)
#endif
pidgin_prefs_labeled_spin_button(vbox,
- _("Minimum lines of text to show in message input"),
+ _("Minimum input area height in lines:"),
PIDGIN_PREFS_ROOT "/conversations/minimum_entry_lines",
1, 8, NULL);