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;
21 chanuser->next_chan = user->channel;
22 user->channel = chanuser;
27 int isUserOnChan(struct UserNode *user, struct ChanNode *chan) {
28 struct ChanUser *chanuser;
29 for(chanuser = user->channel; chanuser; chanuser = chanuser->next_chan) {
30 if(chanuser->chan == chan)
36 struct ChanUser* getChanUser(struct UserNode *user, struct ChanNode *chan) {
37 struct ChanUser *chanuser;
38 for(chanuser = user->channel; chanuser; chanuser = chanuser->next_chan) {
39 if(chanuser->chan == chan)
45 struct ChanUser* getChannelUsers(struct ChanNode *chan, struct ChanUser *last) {
49 return last->next_user;
52 struct ChanUser* getUserChannels(struct UserNode *user, struct ChanUser *last) {
56 return last->next_chan;
59 void delChanUser(struct ChanUser *chanuser, int freeChanUser) {
60 struct ChanUser *cchanuser, *last;
61 //remove it from the user's channel-list
63 for(cchanuser = chanuser->user->channel; cchanuser; cchanuser = cchanuser->next_chan) {
64 if(cchanuser == chanuser) {
66 last->next_chan = chanuser->next_chan;
68 chanuser->user->channel = chanuser->next_chan;
74 //remove it from the channel's user-list
76 for(cchanuser = chanuser->chan->user; cchanuser; cchanuser = cchanuser->next_user) {
77 if(cchanuser == chanuser) {
78 chanuser->chan->usercount--;
80 last->next_user = chanuser->next_user;
82 chanuser->chan->user = chanuser->next_user;
91 chanuser->next_chan = NULL;
92 chanuser->next_user = NULL;
96 void removeChanUserFromLists(struct ChanUser *chanuser, int remove_from_userlist, int remove_from_channellist, int freeChanUser) {
97 struct ChanUser *cchanuser, *last;
98 if(remove_from_userlist) {
99 //remove it from the channel's user-list
101 for(cchanuser = chanuser->chan->user; cchanuser; cchanuser = cchanuser->next_user) {
102 if(cchanuser == chanuser) {
103 chanuser->chan->usercount--;
105 last->next_user = chanuser->next_user;
107 chanuser->chan->user = chanuser->next_user;
112 chanuser->next_user = NULL;
114 if(remove_from_channellist) {
115 //remove it from the user's channel-list
117 for(cchanuser = chanuser->user->channel; cchanuser; cchanuser = cchanuser->next_chan) {
118 if(cchanuser == chanuser) {
120 last->next_chan = chanuser->next_chan;
122 chanuser->user->channel = chanuser->next_chan;
127 chanuser->next_chan = NULL;