Fix typos in various comments.
[ircu2.10.12-pk.git] / ircd / m_list.c
index 3cb9ef93e094bb19ffb2a2d056b15331370c4549..28755b03c40c7afa75e1e036f1ac253612a373b8 100644 (file)
@@ -97,7 +97,7 @@
 #include "s_bsd.h"
 #include "send.h"
 
-#include <assert.h>
+/* #include <assert.h> -- Now using assert in ircd_log.h */
 #include <stdlib.h>
 #include <string.h>
 
@@ -138,7 +138,7 @@ show_usage(struct Client *sptr)
   send_reply(sptr, RPL_LISTUSAGE,
             "Usage: \002/QUOTE LIST\002 \037parameters\037");
   send_reply(sptr, RPL_LISTUSAGE,
-            "Where \037parameters\037 is a space or comma seperated "
+            "Where \037parameters\037 is a space or comma separated "
             "list of one or more of:");
   send_reply(sptr, RPL_LISTUSAGE,
             " \002<\002\037max_users\037    ; Show all channels with less "
@@ -238,13 +238,13 @@ param_parse(struct Client *sptr, const char *param, struct ListingArgs *args,
 
     case 'S':
     case 's':
-      if (!IsAnOper(sptr))
+      if (!IsAnOper(sptr) || !HasPriv(sptr, PRIV_LIST_CHAN))
         return show_usage(sptr);
 
       args->flags |= LISTARG_SHOWSECRET;
       param++;
 
-      if (*param != ',' && *param != ' ' && *param !+ '\0') /* check syntax */
+      if (*param != ',' && *param != ' ' && *param != '\0') /* check syntax */
         return show_usage(sptr);
       break;
 
@@ -291,7 +291,6 @@ int m_list(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 
   if (cli_listing(sptr))            /* Already listing ? */
   {
-    cli_listing(sptr)->chptr->mode.mode &= ~MODE_LISTED;
     MyFree(cli_listing(sptr));
     cli_listing(sptr) = 0;
     send_reply(sptr, RPL_LISTEND);
@@ -331,14 +330,8 @@ int m_list(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
       cli_listing(sptr) = (struct ListingArgs*) MyMalloc(sizeof(struct ListingArgs));
       assert(0 != cli_listing(sptr));
       memcpy(cli_listing(sptr), &args, sizeof(struct ListingArgs));
-      if ((cli_listing(sptr)->chptr = GlobalChannelList)) {
-        int m = GlobalChannelList->mode.mode & MODE_LISTED;
-        list_next_channels(sptr, 64);
-        GlobalChannelList->mode.mode |= m;
-        return 0;
-      }
-      MyFree(cli_listing(sptr));
-      cli_listing(sptr) = 0;
+      list_next_channels(sptr);
+      return 0;
     }
     send_reply(sptr, RPL_LISTEND);
     return 0;
@@ -347,7 +340,10 @@ int m_list(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   for (; (name = ircd_strtok(&p, parv[1], ",")); parv[1] = 0)
   {
     chptr = FindChannel(name);
-    if (chptr && ShowChannel(sptr, chptr) && cli_user(sptr))
+    if (!chptr)
+        continue;
+    if (ShowChannel(sptr, chptr)
+        || (IsAnOper(sptr) && HasPriv(sptr, PRIV_LIST_CHAN)))
       send_reply(sptr, RPL_LIST, chptr->chname,
                 chptr->users - number_of_zombies(chptr), chptr->topic);
   }