+++ /dev/null
-
-#include "ChanUser.h"
-#include "ChanNode.h"
-#include "UserNode.h"
-
-struct ChanUser* addChanUser(struct ChanNode *chan, struct UserNode *user) {
- struct ChanUser *chanuser = malloc(sizeof(*chan));
- if (!chanuser)
- {
- perror("malloc() failed");
- return NULL;
- }
- chanuser->flags = 0;
- chanuser->user = user;
- chanuser->chan = chan;
-
- chanuser->changeTime = 0;
-
- chanuser->next_user = chan->user;
- chan->user = chanuser;
- chan->usercount++;
-
- chanuser->next_chan = user->channel;
- user->channel = chanuser;
-
- return chanuser;
-}
-
-struct ChanUser* addInvisibleChanUser(struct ChanNode *chan, struct UserNode *user) {
- struct ChanUser *chanuser = malloc(sizeof(*chan));
- if (!chanuser)
- {
- perror("malloc() failed");
- return NULL;
- }
- chanuser->flags = CHANUSERFLAG_INVISIBLE;
- chanuser->user = user;
- chanuser->chan = chan;
-
- chanuser->changeTime = 0;
-
- chanuser->next_user = chan->user;
- chan->user = chanuser;
- chan->usercount++;
-
- return chanuser;
-}
-
-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;
- }
- 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;
- }
- return NULL;
-}
-
-struct ChanUser* getChannelUsers(struct ChanNode *chan, struct ChanUser *last) {
- if(last == NULL)
- return chan->user;
- else
- return last->next_user;
-}
-
-struct ChanUser* getUserChannels(struct UserNode *user, struct ChanUser *last) {
- if(last == NULL)
- return user->channel;
- else
- return last->next_chan;
-}
-
-void delChanUser(struct ChanUser *chanuser, int freeChanUser) {
- struct ChanUser *cchanuser, *last;
- //remove it from the user's channel-list
- if(!(chanuser->flags & CHANUSERFLAG_INVISIBLE)) {
- last = NULL;
- for(cchanuser = chanuser->user->channel; cchanuser; cchanuser = cchanuser->next_chan) {
- if(cchanuser == chanuser) {
- if(last)
- last->next_chan = chanuser->next_chan;
- else
- chanuser->user->channel = chanuser->next_chan;
- break;
- } else
- last = cchanuser;
- }
- }
-
- //remove it from the channel's user-list
- last = NULL;
- for(cchanuser = chanuser->chan->user; cchanuser; cchanuser = cchanuser->next_user) {
- if(cchanuser == chanuser) {
- chanuser->chan->usercount--;
- if(last)
- last->next_user = chanuser->next_user;
- else
- chanuser->chan->user = chanuser->next_user;
- break;
- } else
- last = cchanuser;
- }
-
- if(freeChanUser)
- free(chanuser);
- else {
- chanuser->next_chan = NULL;
- chanuser->next_user = NULL;
- }
-}
-
-void removeChanUserFromLists(struct ChanUser *chanuser, int remove_from_userlist, int remove_from_channellist, int freeChanUser) {
- struct ChanUser *cchanuser, *last;
- if(remove_from_userlist) {
- //remove it from the channel's user-list
- last = NULL;
- for(cchanuser = chanuser->chan->user; cchanuser; cchanuser = cchanuser->next_user) {
- if(cchanuser == chanuser) {
- chanuser->chan->usercount--;
- if(last)
- last->next_user = chanuser->next_user;
- else
- chanuser->chan->user = chanuser->next_user;
- break;
- } else
- last = cchanuser;
- }
- chanuser->next_user = NULL;
- }
- if(remove_from_channellist) {
- //remove it from the user's channel-list
- last = NULL;
- for(cchanuser = chanuser->user->channel; cchanuser; cchanuser = cchanuser->next_chan) {
- if(cchanuser == chanuser) {
- if(last)
- last->next_chan = chanuser->next_chan;
- else
- chanuser->user->channel = chanuser->next_chan;
- break;
- } else
- last = cchanuser;
- }
- chanuser->next_chan = NULL;
- }
-
- if(freeChanUser)
- free(chanuser);
-}
-