6 struct ChanUser* addChanUser(struct ChanNode *chan, struct UserNode *user) {
7 struct ChanUser *chanuser = malloc(sizeof(*chan));
10 perror("malloc() failed");
13 chanuser->user = user;
14 chanuser->chan = chan;
16 chanuser->next_user = chan->user;
17 chan->user = chanuser;
19 chanuser->next_chan = user->channel;
20 user->channel = chanuser;
25 int isUserOnChan(struct UserNode *user, struct ChanNode *chan) {
26 struct ChanUser *chanuser;
27 for(chanuser = user->channel; chanuser; chanuser = chanuser->next_chan) {
28 if(chanuser->chan == chan)
34 struct ChanUser* getChanUser(struct UserNode *user, struct ChanNode *chan) {
35 struct ChanUser *chanuser;
36 for(chanuser = user->channel; chanuser; chanuser = chanuser->next_chan) {
37 if(chanuser->chan == chan)
43 struct ChanUser* getChannelUsers(struct ChanNode *chan, struct ChanUser *last) {
47 return last->next_user;
50 struct ChanUser* getUserChannels(struct UserNode *user, struct ChanUser *last) {
54 return last->next_chan;
57 void delChanUser(struct ChanUser *chanuser, int freeChanUser) {
58 struct ChanUser *cchanuser, *last;
59 //remove it from the user's channel-list
61 for(cchanuser = chanuser->user->channel; cchanuser; cchanuser = cchanuser->next_chan) {
62 if(cchanuser == chanuser) {
64 last->next_chan = chanuser->next_chan;
66 chanuser->user->channel = chanuser->next_chan;
72 //remove it from the channel's user-list
74 for(cchanuser = chanuser->chan->user; cchanuser; cchanuser = cchanuser->next_user) {
75 if(cchanuser == chanuser) {
77 last->next_user = chanuser->next_user;
79 chanuser->chan->user = chanuser->next_user;
88 chanuser->next_chan = NULL;
89 chanuser->next_user = NULL;
93 void removeChanUserFromLists(struct ChanUser *chanuser, int remove_from_userlist, int remove_from_channellist int freeChanUser) {
94 struct ChanUser *cchanuser, *last;
95 if(remove_from_userlist) {
96 //remove it from the channel's user-list
98 for(cchanuser = chanuser->chan->user; cchanuser; cchanuser = cchanuser->next_user) {
99 if(cchanuser == chanuser) {
101 last->next_user = chanuser->next_user;
103 chanuser->chan->user = chanuser->next_user;
108 chanuser->next_user = NULL;
110 if(remove_from_channellist) {
111 //remove it from the user's channel-list
113 for(cchanuser = chanuser->user->channel; cchanuser; cchanuser = cchanuser->next_chan) {
114 if(cchanuser == chanuser) {
116 last->next_chan = chanuser->next_chan;
118 chanuser->user->channel = chanuser->next_chan;
123 chanuser->next_chan = NULL;