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); rb_dlink_list * list, char c, int mems);
static char modebuf[MODEBUFLEN]; static char modebuf[MODEBUFLEN];
static char omodebuf[MODEBUFLEN];
static char parabuf[MODEBUFLEN]; static char parabuf[MODEBUFLEN];
static const char *para[MAXMODEPARAMS]; static const char *para[MAXMODEPARAMS];
static char *mbuf; static char *mbuf, *ombuf;
static int pargs; static int pargs;
/* /*
@ -122,6 +123,7 @@ ms_join(struct Client *client_p, struct Client *source_p, int parc, const char *
return 0; return 0;
mbuf = modebuf; mbuf = modebuf;
ombuf = omodebuf;
mode.key[0] = mode.forward[0] = '\0'; mode.key[0] = mode.forward[0] = '\0';
mode.mode = mode.limit = mode.join_num = mode.join_time = 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", ":%s MODE %s %s %s",
source_p->servptr->name, source_p->servptr->name,
chptr->chname, modebuf, parabuf); 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)) 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] == '&') if(*parv[2] == '&')
return 0; 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; pargs = mode.mode = mode.limit = mode.join_num = mode.join_time = 0;
/* Hide connecting server on netburst -- jilles */ /* 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; fakesource_p = source_p;
mbuf = modebuf; mbuf = modebuf;
ombuf = omodebuf;
newts = atol(parv[1]); newts = atol(parv[1]);
s = parv[3]; 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", sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s %s %s",
fakesource_p->name, chptr->chname, modebuf, parabuf); 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) if(parv[3][0] != '0' && keep_new_modes)
modes = channel_modes(chptr, source_p); 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; ptr_uid = buf_uid + mlen_uid;
mbuf = modebuf; mbuf = modebuf;
ombuf = omodebuf;
para[0] = para[1] = para[2] = para[3] = empty; para[0] = para[1] = para[2] = para[3] = empty;
pargs = 0; pargs = 0;
len_nick = len_uid = 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 static void
set_final_mode(struct Mode *mode, struct Mode *oldmode) set_final_mode(struct Mode *mode, struct Mode *oldmode)
{ {
int dir = MODE_QUERY; int dir = MODE_QUERY, odir = MODE_QUERY;
char *pbuf = parabuf; char *pbuf = parabuf;
int len; int len;
int i; int i;
@ -809,12 +822,25 @@ set_final_mode(struct Mode *mode, struct Mode *oldmode)
{ {
if((mode->mode & chmode_flags[i]) && !(oldmode->mode & chmode_flags[i])) if((mode->mode & chmode_flags[i]) && !(oldmode->mode & chmode_flags[i]))
{ {
if(dir != MODE_ADD) if (chmode_table[i].set_func == chm_hidden)
{ {
*mbuf++ = '+'; if(odir != MODE_ADD)
dir = MODE_ADD; {
*ombuf++ = '+';
odir = MODE_ADD;
}
*ombuf++ = i;
}
else
{
if(dir != MODE_ADD)
{
*mbuf++ = '+';
dir = MODE_ADD;
}
*mbuf++ = i;
} }
*mbuf++ = i;
} }
} }
@ -823,12 +849,24 @@ set_final_mode(struct Mode *mode, struct Mode *oldmode)
{ {
if((oldmode->mode & chmode_flags[i]) && !(mode->mode & chmode_flags[i])) if((oldmode->mode & chmode_flags[i]) && !(mode->mode & chmode_flags[i]))
{ {
if(dir != MODE_DEL) if(chmode_table[i].set_func == chm_hidden)
{ {
*mbuf++ = '-'; if(odir != MODE_DEL)
dir = MODE_DEL; {
*ombuf++ = '-';
odir = MODE_DEL;
}
*ombuf++ = i;
}
else
{
if(dir != MODE_DEL)
{
*mbuf++ = '-';
dir = MODE_DEL;
}
*mbuf++ = i;
} }
*mbuf++ = i;
} }
} }

View File

@ -1253,7 +1253,7 @@ channel_modes(struct Channel *chptr, struct Client *client_p)
for (i = 0; i < 256; i++) 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; continue;
if(chptr->mode.mode & chmode_flags[i]) if(chptr->mode.mode & chmode_flags[i])
*mbuf++ = i; *mbuf++ = i;