From 2d7eb2c1b130df05a50d07be6bba0a2c785d45bf Mon Sep 17 00:00:00 2001 From: codemastr Date: Tue, 12 Feb 2002 20:06:20 +0000 Subject: [PATCH] Possibly fixed the /who flags bug --- Changes | 1 + src/modules/m_who.c | 67 ++++++++++++++++++++++----------------------- 2 files changed, 33 insertions(+), 35 deletions(-) diff --git a/Changes b/Changes index a131e4bb3..f44fa0ed0 100644 --- a/Changes +++ b/Changes @@ -1190,3 +1190,4 @@ v- Fixed some bugreport stuff - Fixed an issue with -x and /quit and whowas, found by RaYmAn - Modified the OpenBSD fix to work for all OSes that add an _ - Fixed m_rawto.c problem found by TheDarkOne +- Possibly fixed the /who flags bug reported by sbalmos (#0000063) diff --git a/src/modules/m_who.c b/src/modules/m_who.c index 6a907e0f1..98d5826c6 100644 --- a/src/modules/m_who.c +++ b/src/modules/m_who.c @@ -584,20 +584,18 @@ DLLFUNC int m_who(aClient *cptr, aClient *sptr, int parc, char *parv[]) * * IF they haven't reached the max, or they're an oper */ status[i++] = - (ac->user->away == NULL ? 'H' : 'G'); - - status[i++] = - (IsAnOper(ac) && !(IsHideOper(ac) && !IsOper(ac) && (ac != sptr)) ? '*' : ((IsInvisible(ac) - && IsOper(sptr)) ? '%' : 0)); - /* Little hack */ - i = (!status[i - 1] ? i - 1 : i); + (ac->user->away ? 'G' : 'H'); if (IsARegNick(ac)) status[i++] = 'r'; - - status[((status[i]) ? ++i : i)] = - ((cm->flags & CHFL_CHANOP) ? '@' : ((cm-> - flags & CHFL_VOICE) ? '+' : 0)); - status[++i] = 0; + if (IsAnOper(ac) && (!IsHideOper(ac) || sptr == ac || IsAnOper(sptr))) + status[i++] = '*'; + else if (IsInvisible(ac) && sptr != ac && IsAnOper(sptr)) + status[i++] = '%'; + if (cm->flags & CHFL_CHANOP) + status[i++] = '@'; + else if (cm->flags & CHFL_VOICE) + status[i++]; + status[i] = 0; sendto_one(sptr, getreply(RPL_WHOREPLY), me.name, sptr->name, wsopts.channel->chname, ac->user->username, @@ -627,15 +625,14 @@ DLLFUNC int m_who(aClient *cptr, aClient *sptr, int parc, char *parv[]) } else { i = 0; status[i++] = - (ac->user->away == NULL ? 'H' : 'G'); - status[i++] = - (IsAnOper(ac) && !(IsHideOper(ac) && !IsOper(ac) && (ac != sptr)) ? '*' : ((IsInvisible(ac) - && IsOper(sptr)) ? '%' : 0)); - i = (!status[i - 1] ? i - 1 : i); - + (ac->user->away ? 'G' : 'H'); if (IsARegNick(ac)) status[i++] = 'r'; - status[i++ ] = 0; + if (IsAnOper(ac) && (!IsHideOper(ac) || sptr == ac || IsAnOper(sptr))) + status[i++] = '*'; + else if (IsInvisible(ac) && sptr != ac && IsAnOper(sptr)) + status[i++] = '%'; + status[i] = 0; sendto_one(sptr, getreply(RPL_WHOREPLY), me.name, sptr->name, wsopts.show_chan ? first_visible_channel(ac, @@ -681,18 +678,18 @@ DLLFUNC int m_who(aClient *cptr, aClient *sptr, int parc, char *parv[]) i = 0; status[i++] = - (ac->user->away == NULL ? 'H' : 'G'); - status[i++] = - (IsAnOper(ac) && !(IsHideOper(ac) && !IsOper(ac) && (ac != sptr)) ? '*' : ((IsInvisible(ac) - && IsOper(sptr)) ? '%' : 0)); - i = (!status[i - 1] ? i - 1 : i); + (ac->user->away ? 'G' : 'H'); if (IsARegNick(ac)) status[i++] = 'r'; - status[((status[i]) ? ++i : i)] = - ((cm->flags & CHFL_CHANOP) ? '@' : ((cm-> - flags & CHFL_VOICE) ? '+' : 0)); - - status[++i] = 0; + if (IsAnOper(ac) && (!IsHideOper(ac) || sptr == ac || IsAnOper(sptr))) + status[i++] = '*'; + else if (IsInvisible(ac) && sptr != ac && IsAnOper(sptr)) + status[i++] = '%'; + if (cm->flags & CHFL_CHANOP) + status[i++] = '@'; + else if (cm->flags & CHFL_VOICE) + status[i++]; + status[i] = 0; sendto_one(sptr, getreply(RPL_WHOREPLY), me.name, sptr->name, lp->chptr->chname, ac->user->username, @@ -718,14 +715,14 @@ DLLFUNC int m_who(aClient *cptr, aClient *sptr, int parc, char *parv[]) } i = 0; status[i++] = - (ac->user->away == NULL ? 'H' : 'G'); + (ac->user->away ? 'G' : 'H'); if (IsARegNick(ac)) status[i++] = 'r'; - status[i++] = - (IsAnOper(ac) ? '*' : ((IsInvisible(ac) - && IsOper(sptr)) ? '%' : 0)); - status[i++ ] = 0; - + if (IsAnOper(ac) && (!IsHideOper(ac) || sptr == ac || IsAnOper(sptr))) + status[i++] = '*'; + else if (IsInvisible(ac) && sptr != ac && IsAnOper(sptr)) + status[i++] = '%'; + status[i] = 0; sendto_one(sptr, getreply(RPL_WHOREPLY), me.name, sptr->name, wsopts.show_chan ? first_visible_channel(ac,