diff options
-rw-r--r-- | src/channel.c | 15 |
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; } |