Mercurial > pidgin
diff src/protocols/oscar/locate.c @ 7045:237ad253dd34
[gaim-migrate @ 7608]
This should fix SimGuy's problem and maybe the problem Luke had
earlier. I don't know what I was thinking with the static variables.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 30 Sep 2003 01:32:29 +0000 |
parents | db041f206848 |
children | 4003419d753b |
line wrap: on
line diff
--- a/src/protocols/oscar/locate.c Tue Sep 30 00:39:24 2003 +0000 +++ b/src/protocols/oscar/locate.c Tue Sep 30 01:32:29 2003 +0000 @@ -12,18 +12,6 @@ #include "win32dep.h" #endif -struct node { - char *sn; - struct node *next; -}; - -/** - * Keep an aim_userinfo_t for each user we are aware of. - */ -static aim_userinfo_t *infos = NULL; -static struct node *request_queue = NULL; -static int waiting_for_response = FALSE; - /* * Capability blocks. * @@ -193,16 +181,16 @@ * for this buddy, then just overwrite parts of the old data. * @param userinfo Contains the new information for the buddy. */ -static void aim_locate_adduserinfo(aim_userinfo_t *userinfo) { +static void aim_locate_adduserinfo(aim_session_t *sess, aim_userinfo_t *userinfo) { aim_userinfo_t *cur; - cur = aim_locate_finduserinfo(userinfo->sn); + cur = aim_locate_finduserinfo(sess, userinfo->sn); if (cur == NULL) { cur = (aim_userinfo_t *)calloc(1, sizeof(aim_userinfo_t)); cur->sn = strdup(userinfo->sn); - cur->next = infos; - infos = cur; + cur->next = sess->locate.userinfo; + sess->locate.userinfo = cur; } cur->warnlevel = userinfo->warnlevel; @@ -241,31 +229,31 @@ } static void aim_locate_dorequest(aim_session_t *sess) { - struct node *cur = request_queue; + struct userinfo_node *cur = sess->locate.request_queue; if (cur == NULL) return; - if (waiting_for_response == TRUE) + if (sess->locate.waiting_for_response == TRUE) return; - waiting_for_response = TRUE; + sess->locate.waiting_for_response = TRUE; aim_locate_getinfoshort(sess, cur->sn, 0x00000007); } faim_internal void aim_locate_requestuserinfo(aim_session_t *sess, const char *sn) { - struct node *cur; + struct userinfo_node *cur; - cur = (struct node *)malloc(sizeof(struct node)); + cur = (struct userinfo_node *)malloc(sizeof(struct userinfo_node)); cur->sn = strdup(sn); - cur->next = request_queue; - request_queue = cur; + cur->next = sess->locate.request_queue; + sess->locate.request_queue = cur; aim_locate_dorequest(sess); } -faim_export aim_userinfo_t *aim_locate_finduserinfo(const char *sn) { - aim_userinfo_t *cur = infos; +faim_export aim_userinfo_t *aim_locate_finduserinfo(aim_session_t *sess, const char *sn) { + aim_userinfo_t *cur = sess->locate.userinfo; while (cur != NULL) { if (aim_sncmp(cur->sn, sn) == 0) @@ -663,7 +651,7 @@ aim_bstream_setpos(bs, endpos); } - aim_locate_adduserinfo(outinfo); + aim_locate_adduserinfo(sess, outinfo); return 0; } @@ -892,7 +880,7 @@ aim_tlvlist_t *tlvlist; aim_tlv_t *tlv = NULL; int was_explicit; - struct node *cur, *del; + struct userinfo_node *cur, *del; userinfo = (aim_userinfo_t *)malloc(sizeof(aim_userinfo_t)); aim_info_extract(sess, bs, userinfo); @@ -923,8 +911,8 @@ } aim_freetlvchain(&tlvlist); - aim_locate_adduserinfo(userinfo); - userinfo2 = aim_locate_finduserinfo(userinfo->sn); + aim_locate_adduserinfo(sess, userinfo); + userinfo2 = aim_locate_finduserinfo(sess, userinfo->sn); aim_info_free(userinfo); free(userinfo); @@ -934,14 +922,14 @@ * for this buddy. */ was_explicit = TRUE; - while ((request_queue != NULL) && (aim_sncmp(userinfo2->sn, request_queue->sn) == 0)) { - del = request_queue; - request_queue = del->next; + while ((sess->locate.request_queue != NULL) && (aim_sncmp(userinfo2->sn, sess->locate.request_queue->sn) == 0)) { + del = sess->locate.request_queue; + sess->locate.request_queue = del->next; was_explicit = FALSE; free(del->sn); free(del); } - cur = request_queue; + cur = sess->locate.request_queue; while ((cur != NULL) && (cur->next != NULL)) { if (aim_sncmp(userinfo2->sn, cur->next->sn) == 0) { del = cur->next; @@ -957,7 +945,7 @@ if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype))) ret = userfunc(sess, rx, userinfo2); } else { - waiting_for_response = FALSE; + sess->locate.waiting_for_response = FALSE; aim_locate_dorequest(sess); } @@ -1142,9 +1130,9 @@ { aim_userinfo_t *del; - while (infos) { - del = infos; - infos = infos->next; + while (sess->locate.userinfo) { + del = sess->locate.userinfo; + sess->locate.userinfo = sess->locate.userinfo->next; free(del->sn); free(del->info); free(del->avail);