Example #1
0
/* Completely removes a channel.
 *
 * This includes the removal of all channel-bans, -exempts and -invites, as
 * well as all user flags related to the channel.
 */
static void remove_channel(struct chanset_t *chan)
{
  int i;
  module_entry *me;

  /* Remove the channel from the list, so that noone can pull it
   * away from under our feet during the check_tcl_part() call. */
  (void) chanset_unlink(chan);

  if ((me = module_find("irc", 1, 3)) != NULL)
    (me->funcs[IRC_DO_CHANNEL_PART]) (chan);

  clear_channel(chan, 0);
  noshare = 1;
  /* Remove channel-bans */
  while (chan->bans)
    u_delban(chan, chan->bans->mask, 1);
  /* Remove channel-exempts */
  while (chan->exempts)
    u_delexempt(chan, chan->exempts->mask, 1);
  /* Remove channel-invites */
  while (chan->invites)
    u_delinvite(chan, chan->invites->mask, 1);
  /* Remove channel specific user flags */
  user_del_chan(chan->dname);
  noshare = 0;
  nfree(chan->channel.key);
  for (i = 0; i < MODES_PER_LINE_MAX && chan->cmode[i].op; i++)
    nfree(chan->cmode[i].op);
  if (chan->key)
    nfree(chan->key);
  if (chan->rmkey)
    nfree(chan->rmkey);
  nfree(chan);
}
Example #2
0
/* Completely removes a channel.
 *
 * This includes the removal of all channel-bans, -exempts and -invites, as
 * well as all user flags related to the channel.
 */
void remove_channel(struct chanset_t *chan)
{
   if (chan != chanset_default) {
     irc_log(chan, "Parting");
     /* Remove the channel from the list, so that noone can pull it
        away from under our feet during the check_part() call. */
     chanset_unlink(chan);

    /* Using chan->name is important here, especially for !chans <cybah> */
    if (!conf.bot->hub && shouldjoin(chan) && chan->name[0])
      dprintf(DP_SERVER, "PART %s\n", chan->name);

     clear_channel(chan, 0);
     noshare = 1;
     /* Remove channel-bans */
     while (chan->bans)
       u_delmask('b', chan, chan->bans->mask, 1);
     /* Remove channel-exempts */
     while (chan->exempts)
       u_delmask('e', chan, chan->exempts->mask, 1);
     /* Remove channel-invites */
     while (chan->invites)
       u_delmask('I', chan, chan->invites->mask, 1);
     /* Remove channel specific user flags */
     user_del_chan(chan->dname);
     noshare = 0;
   }
   free(chan->channel.key);
   if (chan->key)
     free(chan->key);
   if (chan->rmkey)
     free(chan->rmkey);
   free(chan);
}