summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>2013-11-17 20:24:04 +0000
committermichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>2013-11-17 20:24:04 +0000
commitade5b8c1d7df2eeacb7a7796996bc135e8b3c7dd (patch)
treed575a56ea75b97398dbb57487e3fa315facecf6d
parent881c46b56874ce4e654e2c7e42e6a7cbc5d8c8cf (diff)
git-svn-id: svn://svn.ircd-hybrid.org/svnroot/ircd-hybrid/branches/8.1.x@2568 82007160-df01-0410-b94d-b575c5fd34c7
-rw-r--r--src/channel.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/channel.c b/src/channel.c
index dfd8b8b..4994df2 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -684,9 +684,18 @@ find_channel_link(struct Client *client_p, struct Channel *chptr)
if (!IsClient(client_p))
return NULL;
- DLINK_FOREACH(ptr, client_p->channel.head)
- if (((struct Membership *)ptr->data)->chptr == chptr)
- return ptr->data;
+ if (dlink_list_length(&chptr->members) < dlink_list_length(&client_p->channel))
+ {
+ DLINK_FOREACH(ptr, chptr->members.head)
+ if (((struct Membership *)ptr->data)->client_p == client_p)
+ return ptr->data;
+ }
+ else
+ {
+ DLINK_FOREACH(ptr, client_p->channel.head)
+ if (((struct Membership *)ptr->data)->chptr == chptr)
+ return ptr->data;
+ }
return NULL;
}