flags, Client_Hops(c), Client_Info(c));
}
-static const char *
-who_flags_status(const char *client_modes)
-{
- if (strchr(client_modes, 'a'))
- return "G"; /* away */
- return "H";
-}
-
/**
* Return channel user mode prefix(es).
*
{
bool is_visible, is_member, is_ircop;
CL2CHAN *cl2chan;
- const char *client_modes;
char flags[10];
CLIENT *c;
int count = 0;
is_member = Channel_IsMemberOf(Chan, Client);
/* Secret channel? */
- if (!is_member && strchr(Channel_Modes(Chan), 's'))
+ if (!is_member && Channel_HasMode(Chan, 's'))
return IRC_WriteStrClient(Client, RPL_ENDOFWHO_MSG,
Client_ID(Client), Channel_Name(Chan));
for (; cl2chan ; cl2chan = Channel_NextMember(Chan, cl2chan)) {
c = Channel_GetClient(cl2chan);
- client_modes = Client_Modes(c);
- is_ircop = strchr(client_modes, 'o') != NULL;
+ is_ircop = Client_HasMode(c, 'o');
if (OnlyOps && !is_ircop)
continue;
- is_visible = strchr(client_modes, 'i') == NULL;
+ is_visible = Client_HasMode(c, 'i');
if (is_member || is_visible) {
- strlcpy(flags, who_flags_status(client_modes),
- sizeof(flags));
+ memset(flags, 0, sizeof(flags));
+
+ if (Client_HasMode(c, 'a'))
+ flags[0] = 'G'; /* away */
+ else
+ flags[0] = 'H';
+
if (is_ircop)
- strlcat(flags, "*", sizeof(flags));
+ flags[1] = '*';
who_flags_qualifier(Client, Channel_UserModes(Chan, c),
flags, sizeof(flags));
CL2CHAN *cl2chan;
CHANNEL *chan;
bool client_match, is_visible;
- char flags[4];
+ char flags[3];
int count = 0;
assert (Client != NULL);
if (IRC_CheckListTooBig(Client, count, MAX_RPL_WHO, "WHO"))
break;
- strlcpy(flags, who_flags_status(Client_Modes(c)), sizeof(flags));
- if (strchr(Client_Modes(c), 'o'))
- strlcat(flags, "*", sizeof(flags));
+ memset(flags, 0, sizeof(flags));
+
+ if (Client_HasMode(c, 'a'))
+ flags[0] = 'G'; /* away */
+ else
+ flags[0] = 'H';
+
+ if (Client_HasMode(c, 'o'))
+ flags[1] = '*';
if (!write_whoreply(Client, c, "*", flags))
return DISCONNECTED;
cl2chan = Channel_NextChannelOf(c, cl2chan);
/* Secret channel? */
- if (strchr(Channel_Modes(chan), 's')
+ if (Channel_HasMode(chan, 's')
&& !Channel_IsMemberOf(chan, Client))
continue;
while (c) {
if (Client_Type(c) == CLIENT_USER
&& Channel_FirstChannelOf(c) == NULL
- && !strchr(Client_Modes(c), 'i'))
+ && !Client_HasMode(c, 'i'))
{
/* its a user, concatenate ... */
if (rpl[strlen(rpl) - 1] != ':')
return CONNECTED;
/* Secret channel? */
- if (!is_member && strchr(Channel_Modes(Chan), 's'))
+ if (!is_member && Channel_HasMode(Chan, 's'))
return CONNECTED;
snprintf(str, sizeof(str), RPL_NAMREPLY_MSG, Client_ID(Client), "=",
while (cl2chan) {
cl = Channel_GetClient(cl2chan);
- if (strchr(Client_Modes(cl), 'i'))
+ if (Client_HasMode(cl, 'i'))
is_visible = false;
else
is_visible = true;
IRC_Send_ISUPPORT(CLIENT * Client)
{
if (!IRC_WriteStrClient(Client, RPL_ISUPPORT1_MSG, Client_ID(Client),
- Conf_MaxJoins))
+ CHANTYPES, CHANTYPES, Conf_MaxJoins))
return DISCONNECTED;
return IRC_WriteStrClient(Client, RPL_ISUPPORT2_MSG, Client_ID(Client),
CHANNEL_NAME_LEN - 1, Conf_MaxNickLength - 1,