m_whois: refactor channel list to use multiline

This commit is contained in:
Doug Freed 2020-11-08 00:39:11 +00:00
parent e51d9a67be
commit d901e969a3

View file

@ -224,12 +224,7 @@ static void
single_whois(struct Client *source_p, struct Client *target_p, int operspy) single_whois(struct Client *source_p, struct Client *target_p, int operspy)
{ {
char buf[BUFSIZE]; char buf[BUFSIZE];
int cur_len = 0;
int mlen;
char *t;
int tlen;
hook_data_client hdata; hook_data_client hdata;
int extra_space = 0;
struct sockaddr_in ip4; struct sockaddr_in ip4;
if(target_p->user == NULL) if(target_p->user == NULL)
@ -242,7 +237,7 @@ single_whois(struct Client *source_p, struct Client *target_p, int operspy)
target_p->name, target_p->username, target_p->name, target_p->username,
target_p->host, target_p->info); target_p->host, target_p->info);
cur_len = mlen = sprintf(buf, form_str(RPL_WHOISCHANNELS), send_multiline_init(source_p, " ", form_str(RPL_WHOISCHANNELS),
get_id(&me, source_p), get_id(source_p, source_p), get_id(&me, source_p), get_id(source_p, source_p),
target_p->name); target_p->name);
@ -250,16 +245,8 @@ single_whois(struct Client *source_p, struct Client *target_p, int operspy)
* in full names; note that serverhiding may require more space * in full names; note that serverhiding may require more space
* for a different server name (not done here) -- jilles * for a different server name (not done here) -- jilles
*/ */
if (!MyConnect(source_p)) send_multiline_remote_pad(source_p, &me);
{ send_multiline_remote_pad(source_p, source_p);
extra_space = strlen(source_p->name) - 9;
if (extra_space < 0)
extra_space = 0;
extra_space += strlen(me.name) - 2; /* make sure >= 0 */
cur_len += extra_space;
}
t = buf + mlen;
hdata.client = source_p; hdata.client = source_p;
hdata.target = target_p; hdata.target = target_p;
@ -288,25 +275,15 @@ single_whois(struct Client *source_p, struct Client *target_p, int operspy)
if(hdata_vis.approved || operspy) if(hdata_vis.approved || operspy)
{ {
if((cur_len + strlen(chptr->chname) + strlen("!@+ ")) > (BUFSIZE - strlen("\r\n"))) send_multiline_item(source_p, "%s%s%s",
{
sendto_one(source_p, "%s", buf);
cur_len = mlen + extra_space;
t = buf + mlen;
}
tlen = sprintf(t, "%s%s%s ",
hdata_vis.approved ? "" : "!", hdata_vis.approved ? "" : "!",
find_channel_status(mt, 1), find_channel_status(mt, 1),
chptr->chname); chptr->chname);
t += tlen;
cur_len += tlen;
} }
} }
} }
if(cur_len > mlen + extra_space) send_multiline_fini(source_p, NULL);
sendto_one(source_p, "%s", buf);
sendto_one_numeric(source_p, RPL_WHOISSERVER, form_str(RPL_WHOISSERVER), sendto_one_numeric(source_p, RPL_WHOISSERVER, form_str(RPL_WHOISSERVER),
target_p->name, target_p->servptr->name, target_p->name, target_p->servptr->name,