comparison src/protocols/oscar/locate.c @ 7046:4003419d753b

[gaim-migrate @ 7609] I found my memleak and I made server-stored buddy icons from other people work again (both problems started with my away changes from this morning). committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Tue, 30 Sep 2003 01:50:39 +0000
parents 237ad253dd34
children 7b31e3e22f59
comparison
equal deleted inserted replaced
7045:237ad253dd34 7046:4003419d753b
207 cur->sessionlen = userinfo->sessionlen; 207 cur->sessionlen = userinfo->sessionlen;
208 if (userinfo->capabilities != 0) 208 if (userinfo->capabilities != 0)
209 cur->capabilities = userinfo->capabilities; 209 cur->capabilities = userinfo->capabilities;
210 cur->present |= userinfo->present; 210 cur->present |= userinfo->present;
211 211
212 if (userinfo->iconcsumlen > 0) {
213 free(cur->iconcsum);
214 cur->iconcsum = (fu8_t *)malloc(userinfo->iconcsumlen);
215 memcpy(cur->iconcsum, userinfo->iconcsum, userinfo->iconcsumlen);
216 cur->iconcsumlen = userinfo->iconcsumlen;
217 }
218
219 if ((userinfo->info != NULL) && (userinfo->info_len > 0)) {
220 free(cur->info);
221 free(cur->info_encoding);
222 cur->info = (char *)malloc(userinfo->info_len);
223 memcpy(cur->info, userinfo->info, userinfo->info_len);
224 cur->info_encoding = strdup(userinfo->info_encoding); /* XXX - This seems to leak occasionally */
225 cur->info_len = userinfo->info_len;
226 }
227
212 if ((userinfo->away != NULL) && (userinfo->away_len > 0)) { 228 if ((userinfo->away != NULL) && (userinfo->away_len > 0)) {
213 free(cur->away); 229 free(cur->away);
214 free(cur->away_encoding); 230 free(cur->away_encoding);
215 cur->away = (char *)malloc(userinfo->away_len); 231 cur->away = (char *)malloc(userinfo->away_len);
216 memcpy(cur->away, userinfo->away, userinfo->away_len); 232 memcpy(cur->away, userinfo->away, userinfo->away_len);
217 cur->away_encoding = strdup(userinfo->away_encoding); /* XXX - This seems to leak occasionally */ 233 cur->away_encoding = strdup(userinfo->away_encoding); /* XXX - This seems to leak occasionally */
218 cur->away_len = userinfo->away_len; 234 cur->away_len = userinfo->away_len;
219 }
220
221 if ((userinfo->info != NULL) && (userinfo->info_len > 0)) {
222 free(cur->info);
223 free(cur->info_encoding);
224 cur->info = (char *)malloc(userinfo->info_len);
225 memcpy(cur->info, userinfo->info, userinfo->info_len);
226 cur->info_encoding = strdup(userinfo->info_encoding); /* XXX - This seems to leak occasionally */
227 cur->info_len = userinfo->info_len;
228 } 235 }
229 } 236 }
230 237
231 static void aim_locate_dorequest(aim_session_t *sess) { 238 static void aim_locate_dorequest(aim_session_t *sess) {
232 struct userinfo_node *cur = sess->locate.request_queue; 239 struct userinfo_node *cur = sess->locate.request_queue;
1131 aim_userinfo_t *del; 1138 aim_userinfo_t *del;
1132 1139
1133 while (sess->locate.userinfo) { 1140 while (sess->locate.userinfo) {
1134 del = sess->locate.userinfo; 1141 del = sess->locate.userinfo;
1135 sess->locate.userinfo = sess->locate.userinfo->next; 1142 sess->locate.userinfo = sess->locate.userinfo->next;
1136 free(del->sn); 1143 aim_info_free(del);
1137 free(del->info);
1138 free(del->avail);
1139 free(del->away);
1140 free(del); 1144 free(del);
1141 } 1145 }
1142 } 1146 }
1143 1147
1144 faim_internal int locate_modfirst(aim_session_t *sess, aim_module_t *mod) 1148 faim_internal int locate_modfirst(aim_session_t *sess, aim_module_t *mod)