#include "client.h"
#include "hash.h"
#include "ircd.h"
+#include "ircd_log.h"
#include "ircd_reply.h"
#include "ircd_string.h"
#include "msg.h"
#include "s_user.h"
#include "send.h"
-#include <assert.h>
+/* #include <assert.h> -- Now using assert in ircd_log.h */
#include <string.h>
/*
int showingdelayed = 0;
if (parc > 1 && !ircd_strcmp(parv[1], "-D")) {
- para = (parc > 2) ? parv[2] : 0;
- showingdelayed = 1;
- }
-
- if ((parc - showingdelayed) > 2 && hunt_server_cmd(sptr, CMD_NAMES, cptr, 1, "%s %C", 2+showingdelayed, parc, parv))
- return 0;
+ para = (parc > 2) ? parv[2] : 0;
+ showingdelayed = 1;
+ if (parc > 3 && hunt_server_cmd(sptr, CMD_NAMES, cptr, 1, "%s %s %C", 3, parc, parv))
+ return 0;
+ } else if (parc > 2 && hunt_server_cmd(sptr, CMD_NAMES, cptr, 1, "%s %C", 2, parc, parv))
+ return 0;
if (EmptyString(para)) {
send_reply(sptr, RPL_ENDOFNAMES, "*");
else if (*para == '0')
*para = '\0';
- s = strchr(para, ','); /* Recursively call m_names for each comma-seperated channel. Eww. */
+ s = strchr(para, ','); /* Recursively call m_names for each comma-separated channel. Eww. */
if (s) {
- parv[1+showingdelayed] = ++s;
+ *s++ = '\0';
+ parv[1+showingdelayed] = s;
m_names(cptr, sptr, parc, parv);
}
* (As performed with each /join) - ** High frequency usage **
*/
- clean_channelname(para);
chptr = FindChannel(para);
if (chptr) {
struct Membership* member;
char* s;
char* para = parc > 1 ? parv[1] : 0;
+ int showingdelayed = 0;
- if (parc > 2 && hunt_server_cmd(sptr, CMD_NAMES, cptr, 1, "%s %C", 2, parc, parv))
- return 0;
+ if (parc > 1 && !ircd_strcmp(parv[1], "-D")) {
+ para = (parc > 2) ? parv[2] : 0;
+ showingdelayed = NAMES_DEL;
+ if (parc > 3 && hunt_server_cmd(sptr, CMD_NAMES, cptr, 1, "%s %s %C", 3, parc, parv))
+ return 0;
+ } else if (parc > 2 && hunt_server_cmd(sptr, CMD_NAMES, cptr, 1, "%s %C", 2, parc, parv))
+ return 0;
if (EmptyString(para)) {
send_reply(sptr, RPL_ENDOFNAMES, "*");
else if (*para == '0')
*para = '\0';
- s = strchr(para, ','); /* Recursively call m_names for each comma-seperated channel. */
+ s = strchr(para, ','); /* Recursively call m_names for each comma-separated channel. */
if (s) {
- parv[1] = ++s;
+ *s++ = '\0';
+ parv[1+!!showingdelayed] = s;
m_names(cptr, sptr, parc, parv);
}
if (find_channel_member(sptr, ch2ptr))
{
- do_names(sptr, ch2ptr, NAMES_ALL); /* Full list if we're in this chan. */
+ do_names(sptr, ch2ptr, showingdelayed|NAMES_ALL); /* Full list if we're in this chan. */
} else {
- do_names(sptr, ch2ptr, NAMES_VIS);
+ do_names(sptr, ch2ptr, showingdelayed|NAMES_VIS);
}
}
* (As performed with each /join) - ** High frequency usage **
*/
- clean_channelname(para);
chptr = FindChannel(para);
if (chptr) {
member = find_member_link(chptr, sptr);
if (member)
{
- do_names(sptr, chptr, NAMES_ALL);
+ do_names(sptr, chptr, showingdelayed|NAMES_ALL);
if (!EmptyString(para))
{
send_reply(sptr, RPL_ENDOFNAMES, chptr ? chptr->chname : para);
* Special Case 3: User isn't on this channel, show all visible users, in
* non secret channels.
*/
- do_names(sptr, chptr, NAMES_VIS);
+ do_names(sptr, chptr, showingdelayed|NAMES_VIS);
}
} else { /* Channel doesn't exist. */
send_reply(sptr, RPL_ENDOFNAMES, para);