X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2FChanUser.c;h=d82fc1de2c3aecc50378da431d2bf075aaee762d;hb=78e040af3fcc36ab684611c0f98b4381ff420878;hp=9ac06912ef0683039cd2bb1accc4cf529e09365f;hpb=55831bf424312a6908ca07a904f288fba0919a9a;p=NeonServV5.git diff --git a/src/ChanUser.c b/src/ChanUser.c index 9ac0691..d82fc1d 100644 --- a/src/ChanUser.c +++ b/src/ChanUser.c @@ -1,4 +1,4 @@ -/* ChanUser.c - NeonServ v5.3 +/* ChanUser.c - NeonServ v5.5 * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -17,10 +17,11 @@ #include "ChanUser.h" #include "ChanNode.h" +#include "ModeNode.h" #include "UserNode.h" struct ChanUser* addChanUser(struct ChanNode *chan, struct UserNode *user) { - struct ChanUser *chanuser = malloc(sizeof(*chan)); + struct ChanUser *chanuser = malloc(sizeof(*chanuser)); if (!chanuser) { perror("malloc() failed"); @@ -29,6 +30,7 @@ struct ChanUser* addChanUser(struct ChanNode *chan, struct UserNode *user) { chanuser->flags = 0; chanuser->user = user; chanuser->chan = chan; + chanuser->visCount = 0; chanuser->changeTime = 0; chanuser->spamnode = NULL; @@ -48,7 +50,7 @@ struct ChanUser* addChanUser(struct ChanNode *chan, struct UserNode *user) { } struct ChanUser* addInvisibleChanUser(struct ChanNode *chan, struct UserNode *user) { - struct ChanUser *chanuser = malloc(sizeof(*chan)); + struct ChanUser *chanuser = malloc(sizeof(*chanuser)); if (!chanuser) { perror("malloc() failed"); @@ -57,6 +59,7 @@ struct ChanUser* addInvisibleChanUser(struct ChanNode *chan, struct UserNode *us chanuser->flags = CHANUSERFLAG_INVISIBLE; chanuser->user = user; chanuser->chan = chan; + chanuser->visCount = 0; chanuser->changeTime = 0; chanuser->spamnode = NULL; @@ -72,18 +75,32 @@ struct ChanUser* addInvisibleChanUser(struct ChanNode *chan, struct UserNode *us int isUserOnChan(struct UserNode *user, struct ChanNode *chan) { struct ChanUser *chanuser; - for(chanuser = user->channel; chanuser; chanuser = chanuser->next_chan) { - if(chanuser->chan == chan) - return 1; + if(isModeSet(chan->modes, 'd') || isModeSet(chan->modes, 'D')) { + for(chanuser = chan->user; chanuser; chanuser = chanuser->next_user) { + if(chanuser->user == user) + return 1; + } + } else { + for(chanuser = user->channel; chanuser; chanuser = chanuser->next_chan) { + if(chanuser->chan == chan) + return 1; + } } return 0; } struct ChanUser* getChanUser(struct UserNode *user, struct ChanNode *chan) { struct ChanUser *chanuser; - for(chanuser = user->channel; chanuser; chanuser = chanuser->next_chan) { - if(chanuser->chan == chan) - return chanuser; + if(isModeSet(chan->modes, 'd') || isModeSet(chan->modes, 'D')) { + for(chanuser = chan->user; chanuser; chanuser = chanuser->next_user) { + if(chanuser->user == user) + return chanuser; + } + } else { + for(chanuser = user->channel; chanuser; chanuser = chanuser->next_chan) { + if(chanuser->chan == chan) + return chanuser; + } } return NULL; }