6 struct ChanUser* addChanUser(struct ChanNode *chan, struct UserNode *user) {
7 struct ChanUser *chanuser = malloc(sizeof(*chan));
10 perror("malloc() failed");
14 chanuser->user = user;
15 chanuser->chan = chan;
17 chanuser->changeTime = 0;
19 chanuser->next_user = chan->user;
20 chan->user = chanuser;
23 chanuser->next_chan = user->channel;
24 user->channel = chanuser;
29 struct ChanUser* addInvisibleChanUser(struct ChanNode *chan, struct UserNode *user) {
30 struct ChanUser *chanuser = malloc(sizeof(*chan));
33 perror("malloc() failed");
36 chanuser->flags = CHANUSERFLAG_INVISIBLE;
37 chanuser->user = user;
38 chanuser->chan = chan;
40 chanuser->changeTime = 0;
42 chanuser->next_user = chan->user;
43 chan->user = chanuser;
49 int isUserOnChan(struct UserNode *user, struct ChanNode *chan) {
50 struct ChanUser *chanuser;
51 for(chanuser = user->channel; chanuser; chanuser = chanuser->next_chan) {
52 if(chanuser->chan == chan)
58 struct ChanUser* getChanUser(struct UserNode *user, struct ChanNode *chan) {
59 struct ChanUser *chanuser;
60 for(chanuser = user->channel; chanuser; chanuser = chanuser->next_chan) {
61 if(chanuser->chan == chan)
67 struct ChanUser* getChannelUsers(struct ChanNode *chan, struct ChanUser *last) {
71 return last->next_user;
74 struct ChanUser* getUserChannels(struct UserNode *user, struct ChanUser *last) {
78 return last->next_chan;
81 void delChanUser(struct ChanUser *chanuser, int freeChanUser) {
82 struct ChanUser *cchanuser, *last;
83 //remove it from the user's channel-list
84 if(!(chanuser->flags & CHANUSERFLAG_INVISIBLE)) {
86 for(cchanuser = chanuser->user->channel; cchanuser; cchanuser = cchanuser->next_chan) {
87 if(cchanuser == chanuser) {
89 last->next_chan = chanuser->next_chan;
91 chanuser->user->channel = chanuser->next_chan;
98 //remove it from the channel's user-list
100 for(cchanuser = chanuser->chan->user; cchanuser; cchanuser = cchanuser->next_user) {
101 if(cchanuser == chanuser) {
102 chanuser->chan->usercount--;
104 last->next_user = chanuser->next_user;
106 chanuser->chan->user = chanuser->next_user;
115 chanuser->next_chan = NULL;
116 chanuser->next_user = NULL;
120 void removeChanUserFromLists(struct ChanUser *chanuser, int remove_from_userlist, int remove_from_channellist, int freeChanUser) {
121 struct ChanUser *cchanuser, *last;
122 if(remove_from_userlist) {
123 //remove it from the channel's user-list
125 for(cchanuser = chanuser->chan->user; cchanuser; cchanuser = cchanuser->next_user) {
126 if(cchanuser == chanuser) {
127 chanuser->chan->usercount--;
129 last->next_user = chanuser->next_user;
131 chanuser->chan->user = chanuser->next_user;
136 chanuser->next_user = NULL;
138 if(remove_from_channellist) {
139 //remove it from the user's channel-list
141 for(cchanuser = chanuser->user->channel; cchanuser; cchanuser = cchanuser->next_chan) {
142 if(cchanuser == chanuser) {
144 last->next_chan = chanuser->next_chan;
146 chanuser->user->channel = chanuser->next_chan;
151 chanuser->next_chan = NULL;