]> jfr.im git - solanum.git/commitdiff
ircd: irc_dictionary: fix up stats routines
authorWilliam Pitcock <redacted>
Sat, 9 Jan 2016 07:41:20 +0000 (01:41 -0600)
committerWilliam Pitcock <redacted>
Sat, 9 Jan 2016 07:41:20 +0000 (01:41 -0600)
ircd/irc_dictionary.c

index 351a46d0955292389305c92620bddc567c5ff76c..3ce2c16fd34784636afea82d9b48bc1c5a63060e 100644 (file)
@@ -796,9 +796,9 @@ stats_recurse(struct DictionaryElement *delem, int depth, int *pmaxdepth)
        if (depth > *pmaxdepth)
                *pmaxdepth = depth;
        result = depth;
-       if (delem->left)
+       if (delem && delem->left)
                result += stats_recurse(delem->left, depth + 1, pmaxdepth);
-       if (delem->right)
+       if (delem && delem->right)
                result += stats_recurse(delem->right, depth + 1, pmaxdepth);
        return result;
 }
@@ -826,10 +826,17 @@ void irc_dictionary_stats(struct Dictionary *dict, void (*cb)(const char *line,
 
        s_assert(dict != NULL);
 
-       cb(str, privdata);
-       maxdepth = 0;
-       sum = stats_recurse(dict->root, 0, &maxdepth);
-       rb_snprintf(str, sizeof str, "%s: Objects: %d, Depth sum: %d, Avg depth: %d, Max depth: %d.", dict->id, dict->count, sum, sum / dict->count, maxdepth);
+       if (dict->count)
+       {
+               maxdepth = 0;
+               sum = stats_recurse(dict->root, 0, &maxdepth);
+               rb_snprintf(str, sizeof str, "%s: Objects: %d, Depth sum: %d, Avg depth: %d, Max depth: %d.", dict->id, dict->count, sum, sum / dict->count, maxdepth);
+       }
+       else
+       {
+               rb_snprintf(str, sizeof str, "%s: Objects: 0, Depth sum: 0, Avg depth: 0, Max depth: 0.", dict->id);
+       }
+
        cb(str, privdata);
 }