]> jfr.im git - solanum.git/commitdiff
m_stats: add optional constraint checking function pointer to stats_l_list().
authorWilliam Pitcock <redacted>
Mon, 17 Sep 2012 21:38:31 +0000 (16:38 -0500)
committerWilliam Pitcock <redacted>
Wed, 19 Sep 2012 00:55:49 +0000 (19:55 -0500)
modules/m_stats.c

index 32890a9ad863cf4c4136590cc6be2f6bf7added2..83046d4760e29a7d3c9c4de8a75b982c4fda1d09 100644 (file)
@@ -70,7 +70,8 @@ DECLARE_MODULE_AV1(stats, NULL, NULL, stats_clist, stats_hlist, NULL, "$Revision
 
 const char *Lformat = "%s %u %u %u %u %u :%u %u %s";
 
-static void stats_l_list(struct Client *s, const char *, int, int, rb_dlink_list *, char);
+static void stats_l_list(struct Client *s, const char *, int, int, rb_dlink_list *, char,
+                               int (*check_fn)(struct Client *target_p));
 static void stats_l_client(struct Client *source_p, struct Client *target_p,
                                char statchar);
 
@@ -1537,8 +1538,8 @@ stats_ltrace(struct Client *source_p, int parc, const char *parv[])
                /* local opers get everyone */
                if(MyOper(source_p))
                {
-                       stats_l_list(source_p, name, doall, wilds, &unknown_list, statchar);
-                       stats_l_list(source_p, name, doall, wilds, &lclient_list, statchar);
+                       stats_l_list(source_p, name, doall, wilds, &unknown_list, statchar, NULL);
+                       stats_l_list(source_p, name, doall, wilds, &lclient_list, statchar, NULL);
                }
                else
                {
@@ -1546,12 +1547,12 @@ stats_ltrace(struct Client *source_p, int parc, const char *parv[])
                        if(MyClient(source_p))
                                stats_l_client(source_p, source_p, statchar);
 
-                       stats_l_list(source_p, name, doall, wilds, &local_oper_list, statchar);
+                       stats_l_list(source_p, name, doall, wilds, &local_oper_list, statchar, NULL);
                }
 
                if (!ConfigServerHide.flatten_links || IsOper(source_p) ||
                                IsExemptShide(source_p))
-                       stats_l_list(source_p, name, doall, wilds, &serv_list, statchar);
+                       stats_l_list(source_p, name, doall, wilds, &serv_list, statchar, NULL);
 
                return;
        }
@@ -1559,7 +1560,7 @@ stats_ltrace(struct Client *source_p, int parc, const char *parv[])
        /* ok, at this point theyre looking for a specific client whos on
         * our server.. but it contains a wildcard.  --fl
         */
-       stats_l_list(source_p, name, doall, wilds, &lclient_list, statchar);
+       stats_l_list(source_p, name, doall, wilds, &lclient_list, statchar, NULL);
 
        return;
 }
@@ -1567,7 +1568,7 @@ stats_ltrace(struct Client *source_p, int parc, const char *parv[])
 
 static void
 stats_l_list(struct Client *source_p, const char *name, int doall, int wilds,
-            rb_dlink_list * list, char statchar)
+            rb_dlink_list * list, char statchar, int (*check_fn)(struct Client *target_p))
 {
        rb_dlink_node *ptr;
        struct Client *target_p;
@@ -1583,7 +1584,8 @@ stats_l_list(struct Client *source_p, const char *name, int doall, int wilds,
                if(!doall && wilds && !match(name, target_p->name))
                        continue;
 
-               stats_l_client(source_p, target_p, statchar);
+               if (check_fn == NULL || check_fn(target_p))
+                       stats_l_client(source_p, target_p, statchar);
        }
 }