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 {