perror("malloc() failed");
return NULL;
}
+ chanuser->flags = 0;
chanuser->user = user;
chanuser->chan = chan;
}
}
-void quitChanUser(struct ChanUser *chanuser, int freeChanUser) {
- struct ChanUser *cchanuser, *last = NULL;
- last = NULL;
- for(cchanuser = chanuser->chan->user; cchanuser; cchanuser = cchanuser->next_user) {
- if(cchanuser == chanuser) {
- if(last)
- last->next_user = chanuser->next_user;
- else
- chanuser->chan->user = chanuser->next_user;
- break;
- } else
- last = cchanuser;
+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) {
+ 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);
- else
- chanuser->next_user = NULL;
}