X-Git-Url: http://git.pk910.de/?p=ircu2.10.12-pk.git;a=blobdiff_plain;f=ircd%2Fircd_features.c;h=baaa2bd0e146c1763d735681c8bf57bffed8060c;hp=f49539cbddf79257a6cdf7864364ebec76e2f3e0;hb=31c730086f07bd21737fe3808853d22d30661e53;hpb=3d59398668e6f0977c147c5efeefe7582d05b25b diff --git a/ircd/ircd_features.c b/ircd/ircd_features.c index f49539c..baaa2bd 100644 --- a/ircd/ircd_features.c +++ b/ircd/ircd_features.c @@ -41,6 +41,7 @@ #include "s_bsd.h" #include "s_debug.h" #include "s_misc.h" +#include "s_stats.h" #include "send.h" #include "struct.h" #include "sys.h" /* FALSE bleah */ @@ -819,6 +820,8 @@ feature_init(void) void feature_report(struct Client* to, const struct StatDesc* sd, char* param) { + char changed; + int report; int i; for (i = 0; features[i].type; i++) { @@ -827,33 +830,36 @@ feature_report(struct Client* to, const struct StatDesc* sd, char* param) (features[i].flags & FEAT_OPER && !IsAnOper(to))) continue; /* skip this one */ + changed = (features[i].flags & FEAT_MARK) ? 'F' : 'f'; + report = (features[i].flags & FEAT_MARK) || sd->sd_funcdata; + switch (features[i].flags & FEAT_MASK) { case FEAT_NONE: if (features[i].report) /* let the callback handle this */ - (*features[i].report)(to, features[i].flags & FEAT_MARK ? 1 : 0); + (*features[i].report)(to, report); break; case FEAT_INT: /* Report an F-line with integer values */ - if (features[i].flags & FEAT_MARK) /* it's been changed */ - send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "F %s %d", - features[i].type, features[i].v_int); + if (report) /* it's been changed */ + send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "%c %s %d", + changed, features[i].type, features[i].v_int); break; case FEAT_BOOL: /* Report an F-line with boolean values */ - if (features[i].flags & FEAT_MARK) /* it's been changed */ - send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "F %s %s", - features[i].type, features[i].v_int ? "TRUE" : "FALSE"); + if (report) /* it's been changed */ + send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "%c %s %s", + changed, features[i].type, features[i].v_int ? "TRUE" : "FALSE"); break; case FEAT_STR: /* Report an F-line with string values */ - if (features[i].flags & FEAT_MARK) { /* it's been changed */ + if (report) { /* it's been changed */ if (features[i].v_str) - send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "F %s %s", - features[i].type, features[i].v_str); + send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "%c %s %s", + changed, features[i].type, features[i].v_str); else /* Actually, F: would reset it; you want F:: */ - send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "F %s", - features[i].type); + send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "%c %s", + changed, features[i].type); } break; }