summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/bs_badwords.c10
-rw-r--r--src/core/cs_akick.c32
-rw-r--r--version.log4
3 files changed, 31 insertions, 15 deletions
diff --git a/src/core/bs_badwords.c b/src/core/bs_badwords.c
index 7698d8cfc..3a0828db4 100644
--- a/src/core/bs_badwords.c
+++ b/src/core/bs_badwords.c
@@ -217,7 +217,15 @@ int do_badwords(User * u)
}
}
}
- ci->bwcount--;
+ /* After reordering only the entries at the end could still be empty.
+ * We ll free the places no longer in use... - Viper */
+ for (i = ci->bwcount - 1; i >= 0; i--) {
+ if (ci->badwords[i].in_use)
+ break;
+ ci->bwcount--;
+ }
+ ci->badwords =
+ srealloc(ci->badwords,sizeof(BadWord) * ci->bwcount);
}
} else if (stricmp(cmd, "LIST") == 0) {
diff --git a/src/core/cs_akick.c b/src/core/cs_akick.c
index 50faad99d..773388b8a 100644
--- a/src/core/cs_akick.c
+++ b/src/core/cs_akick.c
@@ -248,20 +248,15 @@ int do_akick(User * u)
}
}
- for (i = 0; i < ci->akickcount; i++) {
- if (!(ci->akick[i].flags & AK_USED))
- break;
- }
- if (i == ci->akickcount) {
- if (ci->akickcount >= CSAutokickMax) {
- notice_lang(s_ChanServ, u, CHAN_AKICK_REACHED_LIMIT,
- CSAutokickMax);
- return MOD_CONT;
- }
- ci->akickcount++;
- ci->akick =
- srealloc(ci->akick, sizeof(AutoKick) * ci->akickcount);
+ /* All entries should be in use so we don't have to go over
+ * the entire list. We simply add new entries at the end. */
+ if (ci->akickcount >= CSAutokickMax) {
+ notice_lang(s_ChanServ, u, CHAN_AKICK_REACHED_LIMIT, CSAutokickMax);
+ return MOD_CONT;
}
+ ci->akickcount++;
+ ci->akick =
+ srealloc(ci->akick, sizeof(AutoKick) * ci->akickcount);
akick = &ci->akick[i];
akick->flags = AK_USED;
if (nc) {
@@ -468,7 +463,16 @@ int do_akick(User * u)
}
}
}
- ci->akickcount--;
+ /* After reordering only the entries at the end could still be empty.
+ * We ll free the places no longer in use... - Viper */
+ for (i = ci->akickcount - 1; i >= 0; i--) {
+ if (ci->akick[i].flags & AK_USED)
+ break;
+
+ ci->akickcount--;
+ }
+ ci->akick =
+ srealloc(ci->akick,sizeof(AutoKick) * ci->akickcount);
}
} else if (stricmp(cmd, "LIST") == 0) {
int sent_header = 0;
diff --git a/version.log b/version.log
index c07a1c525..6793ef6fa 100644
--- a/version.log
+++ b/version.log
@@ -15,6 +15,10 @@ VERSION_BUILD="1268"
#
# BUILD : 1.7.19 (1268)
# BUGS : 662
+# NOTES : Optimized akick and badwords lists, provided by Viper.
+#
+# BUILD : 1.7.19 (1268)
+# BUGS : 662
# NOTES : badword counting fixed, and now the list is sorted also. fixed remaining bug in akick sorting.
#
# BUILD : 1.7.19 (1267)