From f1e35c19a7db8d6b4e207a287097712b13ed5995 Mon Sep 17 00:00:00 2001 From: jilles Date: Thu, 26 Apr 2007 16:01:16 -0700 Subject: [PATCH] [svn] Merge old trunk r2065,r2067: channel_modes(): get rid of the trailing space also make the *pbuf check work like it should (don't call IsMember another time if we already gave one parameter) simplify a bit more, update comments --- ChangeLog | 9 +++++++++ include/serno.h | 2 +- src/channel.c | 28 ++++++++++++++-------------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1066dec..15e4795 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +jilles 2007/04/25 15:22:28 UTC (20070425-3426) + Log: + webirc bugfix + + + Changes: Modified: + +1 -1 trunk/extensions/m_webirc.c (File Modified) + + jilles 2007/04/25 15:21:34 UTC (20070425-3424) Log: chghost: refuse spoofs which are empty or start with a colon diff --git a/include/serno.h b/include/serno.h index 1130667..4203227 100644 --- a/include/serno.h +++ b/include/serno.h @@ -1 +1 @@ -#define SERNO "20070425-3424" +#define SERNO "20070425-3426" diff --git a/src/channel.c b/src/channel.c index 9be36d2..5bcf29e 100644 --- a/src/channel.c +++ b/src/channel.c @@ -21,7 +21,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: channel.c 3259 2007-03-15 18:09:08Z jilles $ + * $Id: channel.c 3432 2007-04-26 23:01:16Z jilles $ */ #include "stdinc.h" @@ -1110,9 +1110,8 @@ static const struct mode_letter * * inputs - pointer to channel * - pointer to client - * output - NONE - * side effects - write the "simple" list of channel modes for channel - * chptr onto buffer mbuf with the parameters in pbuf. + * output - string with simple modes + * side effects - result from previous calls overwritten * * Stolen from ShadowIRCd 4 --nenolod */ @@ -1137,38 +1136,39 @@ channel_modes(struct Channel *chptr, struct Client *client_p) { *mbuf++ = 'l'; - if(IsMember(client_p, chptr) || IsServer(client_p) || IsMe(client_p)) - pbuf += ircsprintf(pbuf, "%d ", chptr->mode.limit); + if(!IsClient(client_p) || IsMember(client_p, chptr)) + pbuf += ircsprintf(pbuf, " %d", chptr->mode.limit); } if(*chptr->mode.key) { *mbuf++ = 'k'; - if(*pbuf || IsMember(client_p, chptr) || IsServer(client_p) || IsMe(client_p)) - pbuf += ircsprintf(pbuf, "%s ", chptr->mode.key); + if(pbuf > buf2 || !IsClient(client_p) || IsMember(client_p, chptr)) + pbuf += ircsprintf(pbuf, " %s", chptr->mode.key); } if(chptr->mode.join_num) { *mbuf++ = 'j'; - if(*pbuf || IsMember(client_p, chptr) || IsServer(client_p) || IsMe(client_p)) - pbuf += ircsprintf(pbuf, "%d:%d ", chptr->mode.join_num, + if(pbuf > buf2 || !IsClient(client_p) || IsMember(client_p, chptr)) + pbuf += ircsprintf(pbuf, " %d:%d", chptr->mode.join_num, chptr->mode.join_time); } - if(*chptr->mode.forward && (ConfigChannel.use_forward || IsServer(client_p) || IsMe(client_p))) + if(*chptr->mode.forward && (ConfigChannel.use_forward || !IsClient(client_p))) { *mbuf++ = 'f'; - if(*pbuf || IsMember(client_p, chptr) || IsServer(client_p) || IsMe(client_p)) - pbuf += ircsprintf(pbuf, "%s ", chptr->mode.forward); + if(pbuf > buf2 || !IsClient(client_p) || IsMember(client_p, chptr)) + pbuf += ircsprintf(pbuf, " %s", chptr->mode.forward); } *mbuf = '\0'; - ircsprintf(final, "%s %s", buf1, buf2); + strlcpy(final, buf1, sizeof final); + strlcat(final, buf2, sizeof final); return final; }