summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2007-11-17 23:59:39 +0000
committerw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2007-11-17 23:59:39 +0000
commit12ec2bc108e0f0219792cbbe78a6ce7d86818fe3 (patch)
tree6ed8d353372f20469e3c3aecd86e301784de4203
parent409b55e4425042d0e5a047af296ffbc2514e6192 (diff)
It compiles; ship it.
(add some sort of working skeleton for BanCacheManager::RemoveEntries().) git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8600 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--src/bancache.cpp31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/bancache.cpp b/src/bancache.cpp
index b4fccbbf8..05c014de3 100644
--- a/src/bancache.cpp
+++ b/src/bancache.cpp
@@ -65,7 +65,36 @@ bool BanCacheManager::RemoveHit(BanCacheHit *b)
int BanCacheManager::RemoveEntries(const std::string &type, bool positive)
{
- return 0;
+ int removed = 0;
+
+ BanCacheHash::iterator safei;
+
+ for (BanCacheHash::iterator n = BanHash->begin(); n != BanHash->end(); )
+ {
+ safei = n;
+ safei++;
+
+ BanCacheHit *b = n->second;
+
+ /* Safe to delete items here through iterator 'n' */
+ if (b->Type == type)
+ {
+ if ((positive && !b->Reason.empty()) || b->Reason.empty())
+ {
+ /* we need to remove this one. */
+ delete b;
+ b = NULL;
+ BanHash->erase(n);
+ removed++;
+ }
+ }
+
+ /* End of safe section */
+ n = safei;
+ }
+
+
+ return removed;
}
void BanCacheManager::RehashCache()