A couple more chm_hidden cleanups/fixes.

This commit is contained in:
JD Horelick 2010-03-03 15:16:06 -05:00
parent f428b59fa8
commit 565f4362f2
2 changed files with 52 additions and 14 deletions

View File

@ -67,9 +67,10 @@ static void remove_ban_list(struct Channel *chptr, struct Client *source_p,
rb_dlink_list * list, char c, int mems);
static char modebuf[MODEBUFLEN];
static char omodebuf[MODEBUFLEN];
static char parabuf[MODEBUFLEN];
static const char *para[MAXMODEPARAMS];
static char *mbuf;
static char *mbuf, *ombuf;
static int pargs;
/*
@ -122,6 +123,7 @@ ms_join(struct Client *client_p, struct Client *source_p, int parc, const char *
return 0;
mbuf = modebuf;
ombuf = omodebuf;
mode.key[0] = mode.forward[0] = '\0';
mode.mode = mode.limit = mode.join_num = mode.join_time = 0;
@ -190,7 +192,12 @@ ms_join(struct Client *client_p, struct Client *source_p, int parc, const char *
":%s MODE %s %s %s",
source_p->servptr->name,
chptr->chname, modebuf, parabuf);
*modebuf = *parabuf = '\0';
if(*omodebuf != '\0')
sendto_channel_local(ONLY_OPERS, chptr,
":%s MODE %s %s %s",
source_p->servptr->name,
chptr->chname, modebuf, parabuf);
*omodebuf = *modebuf = *parabuf = '\0';
}
if(!IsMember(source_p, chptr))
@ -249,7 +256,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
if(*parv[2] == '&')
return 0;
modebuf[0] = parabuf[0] = mode.key[0] = mode.forward[0] = '\0';
omodebuf[0] = modebuf[0] = parabuf[0] = mode.key[0] = mode.forward[0] = '\0';
pargs = mode.mode = mode.limit = mode.join_num = mode.join_time = 0;
/* Hide connecting server on netburst -- jilles */
@ -259,6 +266,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
fakesource_p = source_p;
mbuf = modebuf;
ombuf = omodebuf;
newts = atol(parv[1]);
s = parv[3];
@ -457,7 +465,11 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s %s %s",
fakesource_p->name, chptr->chname, modebuf, parabuf);
*modebuf = *parabuf = '\0';
if(*omodebuf != '\0')
sendto_channel_local(ONLY_OPERS, chptr, ":%s MODE %s %s %s",
fakesource_p->name, chptr->chname, omodebuf, parabuf);
*omodebuf = *modebuf = *parabuf = '\0';
if(parv[3][0] != '0' && keep_new_modes)
modes = channel_modes(chptr, source_p);
@ -469,6 +481,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
ptr_uid = buf_uid + mlen_uid;
mbuf = modebuf;
ombuf = omodebuf;
para[0] = para[1] = para[2] = para[3] = empty;
pargs = 0;
len_nick = len_uid = 0;
@ -799,7 +812,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
static void
set_final_mode(struct Mode *mode, struct Mode *oldmode)
{
int dir = MODE_QUERY;
int dir = MODE_QUERY, odir = MODE_QUERY;
char *pbuf = parabuf;
int len;
int i;
@ -808,6 +821,17 @@ set_final_mode(struct Mode *mode, struct Mode *oldmode)
for (i = 0; i < 256; i++)
{
if((mode->mode & chmode_flags[i]) && !(oldmode->mode & chmode_flags[i]))
{
if (chmode_table[i].set_func == chm_hidden)
{
if(odir != MODE_ADD)
{
*ombuf++ = '+';
odir = MODE_ADD;
}
*ombuf++ = i;
}
else
{
if(dir != MODE_ADD)
{
@ -815,6 +839,8 @@ set_final_mode(struct Mode *mode, struct Mode *oldmode)
dir = MODE_ADD;
}
*mbuf++ = i;
}
}
}
@ -822,6 +848,17 @@ set_final_mode(struct Mode *mode, struct Mode *oldmode)
for (i = 0; i < 256; i++)
{
if((oldmode->mode & chmode_flags[i]) && !(mode->mode & chmode_flags[i]))
{
if(chmode_table[i].set_func == chm_hidden)
{
if(odir != MODE_DEL)
{
*ombuf++ = '-';
odir = MODE_DEL;
}
*ombuf++ = i;
}
else
{
if(dir != MODE_DEL)
{
@ -831,6 +868,7 @@ set_final_mode(struct Mode *mode, struct Mode *oldmode)
*mbuf++ = i;
}
}
}
if(oldmode->limit && !mode->limit)
{

View File

@ -1253,7 +1253,7 @@ channel_modes(struct Channel *chptr, struct Client *client_p)
for (i = 0; i < 256; i++)
{
if(chmode_table[i].set_func == chm_hidden && !IsOper(client_p))
if(chmode_table[i].set_func == chm_hidden && !IsOper(client_p) && IsClient(client_p))
continue;
if(chptr->mode.mode & chmode_flags[i])
*mbuf++ = i;