X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Firc-info.c;h=f87714fc90187927db3caf3d4e7e7024aa7642fd;hb=8f5cbe51a79c786be30ebc93466988cf67a825e1;hp=3769beff78124b2f65ac28ffbf09b1ca27dc246f;hpb=646a97de5fea240f8e06e1b38aa9e72ea50e0c8c;p=ngircd-alex.git diff --git a/src/ngircd/irc-info.c b/src/ngircd/irc-info.c index 3769beff..f87714fc 100644 --- a/src/ngircd/irc-info.c +++ b/src/ngircd/irc-info.c @@ -87,14 +87,6 @@ write_whoreply(CLIENT *Client, CLIENT *c, const char *channelname, const char *f 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). * @@ -152,7 +144,6 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps) { bool is_visible, is_member, is_ircop; CL2CHAN *cl2chan; - const char *client_modes; char flags[10]; CLIENT *c; int count = 0; @@ -165,7 +156,7 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps) 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)); @@ -173,17 +164,21 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps) 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)); @@ -218,7 +213,7 @@ IRC_WHO_Mask(CLIENT *Client, char *Mask, bool OnlyOps) CL2CHAN *cl2chan; CHANNEL *chan; bool client_match, is_visible; - char flags[4]; + char flags[3]; int count = 0; assert (Client != NULL); @@ -274,9 +269,15 @@ IRC_WHO_Mask(CLIENT *Client, char *Mask, bool OnlyOps) 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; @@ -330,7 +331,7 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c) cl2chan = Channel_NextChannelOf(c, cl2chan); /* Secret channel? */ - if (strchr(Channel_Modes(chan), 's') + if (Channel_HasMode(chan, 's') && !Channel_IsMemberOf(chan, Client)) continue; @@ -833,7 +834,7 @@ IRC_NAMES( CLIENT *Client, REQUEST *Req ) 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] != ':') @@ -1404,7 +1405,7 @@ IRC_Send_LUSERS(CLIENT *Client) assert(Client != NULL); - /* Users, services and serevers in the network */ + /* Users, services and servers in the network */ if (!IRC_WriteStrClient(Client, RPL_LUSERCLIENT_MSG, Client_ID(Client), Client_UserCount(), Client_ServiceCount(), Client_ServerCount())) @@ -1530,7 +1531,7 @@ IRC_Send_NAMES(CLIENT * Client, CHANNEL * Chan) 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), "=", @@ -1539,7 +1540,7 @@ IRC_Send_NAMES(CLIENT * Client, CHANNEL * Chan) while (cl2chan) { cl = Channel_GetClient(cl2chan); - if (strchr(Client_Modes(cl), 'i')) + if (Client_HasMode(cl, 'i')) is_visible = false; else is_visible = true; @@ -1580,7 +1581,7 @@ GLOBAL bool 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,