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->next_user = chan->user;
18 chan->user = chanuser;
20 chanuser->next_chan = user->channel;
21 user->channel = chanuser;
26 int isUserOnChan(struct UserNode *user, struct ChanNode *chan) {
27 struct ChanUser *chanuser;
28 for(chanuser = user->channel; chanuser; chanuser = chanuser->next_chan) {
29 if(chanuser->chan == chan)
35 struct ChanUser* getChanUser(struct UserNode *user, struct ChanNode *chan) {
36 struct ChanUser *chanuser;
37 for(chanuser = user->channel; chanuser; chanuser = chanuser->next_chan) {
38 if(chanuser->chan == chan)
44 struct ChanUser* getChannelUsers(struct ChanNode *chan, struct ChanUser *last) {
48 return last->next_user;
51 struct ChanUser* getUserChannels(struct UserNode *user, struct ChanUser *last) {
55 return last->next_chan;
58 void delChanUser(struct ChanUser *chanuser, int freeChanUser) {
59 struct ChanUser *cchanuser, *last;
60 //remove it from the user's channel-list
62 for(cchanuser = chanuser->user->channel; cchanuser; cchanuser = cchanuser->next_chan) {
63 if(cchanuser == chanuser) {
65 last->next_chan = chanuser->next_chan;
67 chanuser->user->channel = chanuser->next_chan;
73 //remove it from the channel's user-list
75 for(cchanuser = chanuser->chan->user; cchanuser; cchanuser = cchanuser->next_user) {
76 if(cchanuser == chanuser) {
78 last->next_user = chanuser->next_user;
80 chanuser->chan->user = chanuser->next_user;
89 chanuser->next_chan = NULL;
90 chanuser->next_user = NULL;
94 void removeChanUserFromLists(struct ChanUser *chanuser, int remove_from_userlist, int remove_from_channellist, int freeChanUser) {
95 struct ChanUser *cchanuser, *last;
96 if(remove_from_userlist) {
97 //remove it from the channel's user-list
99 for(cchanuser = chanuser->chan->user; cchanuser; cchanuser = cchanuser->next_user) {
100 if(cchanuser == chanuser) {
102 last->next_user = chanuser->next_user;
104 chanuser->chan->user = chanuser->next_user;
109 chanuser->next_user = NULL;
111 if(remove_from_channellist) {
112 //remove it from the user's channel-list
114 for(cchanuser = chanuser->user->channel; cchanuser; cchanuser = cchanuser->next_chan) {
115 if(cchanuser == chanuser) {
117 last->next_chan = chanuser->next_chan;
119 chanuser->user->channel = chanuser->next_chan;
124 chanuser->next_chan = NULL;