Mercurial > pidgin.yaz
comparison libpurple/protocols/jabber/google.c @ 18491:8f172a8b8cce
Various leak fixes.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Thu, 12 Jul 2007 00:49:04 +0000 |
parents | 3a1a9e8c1506 |
children | 94c23019a864 |
comparison
equal
deleted
inserted
replaced
18490:095718d51209 | 18491:8f172a8b8cce |
---|---|
33 jabber_gmail_parse(JabberStream *js, xmlnode *packet, gpointer nul) | 33 jabber_gmail_parse(JabberStream *js, xmlnode *packet, gpointer nul) |
34 { | 34 { |
35 const char *type = xmlnode_get_attrib(packet, "type"); | 35 const char *type = xmlnode_get_attrib(packet, "type"); |
36 xmlnode *child; | 36 xmlnode *child; |
37 xmlnode *message, *sender_node, *subject_node; | 37 xmlnode *message, *sender_node, *subject_node; |
38 const char *from, *to, *subject, *url, *tid; | 38 const char *from, *to, *url, *tid; |
39 char *subject; | |
39 const char *in_str; | 40 const char *in_str; |
40 char *to_name; | 41 char *to_name; |
41 int i, count = 1, returned_count; | 42 int i, count = 1, returned_count; |
42 | 43 |
43 const char **tos, **froms, **subjects, **urls; | 44 const char **tos, **froms, **urls; |
45 char **subjects; | |
44 | 46 |
45 if (strcmp(type, "result")) | 47 if (strcmp(type, "result")) |
46 return; | 48 return; |
47 | 49 |
48 child = xmlnode_get_child(packet, "mailbox"); | 50 child = xmlnode_get_child(packet, "mailbox"); |
64 return; | 66 return; |
65 for (returned_count = 0; message; returned_count++, message=xmlnode_get_next_twin(message)); | 67 for (returned_count = 0; message; returned_count++, message=xmlnode_get_next_twin(message)); |
66 | 68 |
67 froms = g_new0(const char* , returned_count); | 69 froms = g_new0(const char* , returned_count); |
68 tos = g_new0(const char* , returned_count); | 70 tos = g_new0(const char* , returned_count); |
69 subjects = g_new0(const char* , returned_count); | 71 subjects = g_new0(char* , returned_count); |
70 urls = g_new0(const char* , returned_count); | 72 urls = g_new0(const char* , returned_count); |
71 | 73 |
72 to = xmlnode_get_attrib(packet, "to"); | 74 to = xmlnode_get_attrib(packet, "to"); |
73 to_name = jabber_get_bare_jid(to); | 75 to_name = jabber_get_bare_jid(to); |
74 url = xmlnode_get_attrib(child, "url"); | 76 url = xmlnode_get_attrib(child, "url"); |
97 /* | 99 /* |
98 * url = xmlnode_get_attrib(message, "url"); | 100 * url = xmlnode_get_attrib(message, "url"); |
99 */ | 101 */ |
100 tos[i] = (to_name != NULL ? to_name : ""); | 102 tos[i] = (to_name != NULL ? to_name : ""); |
101 froms[i] = (from != NULL ? from : ""); | 103 froms[i] = (from != NULL ? from : ""); |
102 subjects[i] = (subject != NULL ? subject : ""); | 104 subjects[i] = (subject != NULL ? subject : g_strdup("")); |
103 urls[i] = (url != NULL ? url : ""); | 105 urls[i] = (url != NULL ? url : ""); |
104 | 106 |
105 tid = xmlnode_get_attrib(message, "tid"); | 107 tid = xmlnode_get_attrib(message, "tid"); |
106 if (tid && | 108 if (tid && |
107 (js->gmail_last_tid == NULL || strcmp(tid, js->gmail_last_tid) > 0)) { | 109 (js->gmail_last_tid == NULL || strcmp(tid, js->gmail_last_tid) > 0)) { |
109 js->gmail_last_tid = g_strdup(tid); | 111 js->gmail_last_tid = g_strdup(tid); |
110 } | 112 } |
111 } | 113 } |
112 | 114 |
113 if (i>0) | 115 if (i>0) |
114 purple_notify_emails(js->gc, count, count == returned_count, subjects, froms, tos, | 116 purple_notify_emails(js->gc, count, count == returned_count, (const char**) subjects, froms, tos, |
115 urls, NULL, NULL); | 117 urls, NULL, NULL); |
116 | 118 |
117 g_free(to_name); | 119 g_free(to_name); |
118 g_free(tos); | 120 g_free(tos); |
119 g_free(froms); | 121 g_free(froms); |
122 for (; i >= 0; i--) | |
123 g_free(subjects[i]); | |
120 g_free(subjects); | 124 g_free(subjects); |
121 g_free(urls); | 125 g_free(urls); |
122 | 126 |
123 in_str = xmlnode_get_attrib(child, "result-time"); | 127 in_str = xmlnode_get_attrib(child, "result-time"); |
124 if (in_str && *in_str) { | 128 if (in_str && *in_str) { |
202 return; | 206 return; |
203 } | 207 } |
204 list = list->next; | 208 list = list->next; |
205 } | 209 } |
206 | 210 |
211 g_free(jid_norm); | |
212 | |
207 } | 213 } |
208 | 214 |
209 gboolean jabber_google_roster_incoming(JabberStream *js, xmlnode *item) | 215 gboolean jabber_google_roster_incoming(JabberStream *js, xmlnode *item) |
210 { | 216 { |
211 PurpleAccount *account = purple_connection_get_account(js->gc); | 217 PurpleAccount *account = purple_connection_get_account(js->gc); |
234 } | 240 } |
235 | 241 |
236 if (grt && (*grt == 'H' || *grt == 'h')) { | 242 if (grt && (*grt == 'H' || *grt == 'h')) { |
237 PurpleBuddy *buddy = purple_find_buddy(account, jid_norm); | 243 PurpleBuddy *buddy = purple_find_buddy(account, jid_norm); |
238 purple_blist_remove_buddy(buddy); | 244 purple_blist_remove_buddy(buddy); |
245 g_free(jid_norm); | |
239 return FALSE; | 246 return FALSE; |
240 } | 247 } |
241 | 248 |
242 if (!on_block_list && (grt && (*grt == 'B' || *grt == 'b'))) { | 249 if (!on_block_list && (grt && (*grt == 'B' || *grt == 'b'))) { |
243 purple_debug_info("jabber", "Blocking %s\n", jid_norm); | 250 purple_debug_info("jabber", "Blocking %s\n", jid_norm); |
244 purple_privacy_deny_add(account, jid_norm, TRUE); | 251 purple_privacy_deny_add(account, jid_norm, TRUE); |
245 } else if (on_block_list && (!grt || (*grt != 'B' && *grt != 'b' ))){ | 252 } else if (on_block_list && (!grt || (*grt != 'B' && *grt != 'b' ))){ |
246 purple_debug_info("jabber", "Unblocking %s\n", jid_norm); | 253 purple_debug_info("jabber", "Unblocking %s\n", jid_norm); |
247 purple_privacy_deny_remove(account, jid_norm, TRUE); | 254 purple_privacy_deny_remove(account, jid_norm, TRUE); |
248 } | 255 } |
256 | |
257 g_free(jid_norm); | |
249 return TRUE; | 258 return TRUE; |
250 } | 259 } |
251 | 260 |
252 void jabber_google_roster_add_deny(PurpleConnection *gc, const char *who) | 261 void jabber_google_roster_add_deny(PurpleConnection *gc, const char *who) |
253 { | 262 { |