User *u = ServerInstance->FindNick(tok);
if ((u) && (u->registered == REG_ALL) && (!u->quitting) && (!IS_SERVER(u)))
{
- callerid_data* other = this->get(u, true);
- other->wholistsme.push_back(dat);
- dat->accepting.insert(u);
+ if (dat->accepting.insert(u).second)
+ {
+ callerid_data* other = this->get(u, true);
+ other->wholistsme.push_back(dat);
+ }
}
}
callerid_data *targ = this->get(*it, false);
if (!targ)
+ {
+ ServerInstance->Logs->Log("m_callerid", DEFAULT, "ERROR: Inconsistency detected in callerid state, please report (1)");
continue; // shouldn't happen, but oh well.
+ }
std::list<callerid_data*>::iterator it2 = std::find(targ->wholistsme.begin(), targ->wholistsme.end(), dat);
if (it2 != targ->wholistsme.end())
targ->wholistsme.erase(it2);
+ else
+ ServerInstance->Logs->Log("m_callerid", DEFAULT, "ERROR: Inconsistency detected in callerid state, please report (2)");
}
delete dat;
}
if (!dat2)
{
// How the fuck is this possible.
+ ServerInstance->Logs->Log("m_callerid", DEFAULT, "ERROR: Inconsistency detected in callerid state, please report (3)");
return false;
}
if (it != dat2->wholistsme.end())
// Found me!
dat2->wholistsme.erase(it);
+ else
+ ServerInstance->Logs->Log("m_callerid", DEFAULT, "ERROR: Inconsistency detected in callerid state, please report (4)");
+
user->WriteServ("NOTICE %s :%s is no longer on your accept list", user->nick.c_str(), whotoremove->nick.c_str());
return true;
if (it2 != dat->accepting.end())
dat->accepting.erase(it2);
+ else
+ ServerInstance->Logs->Log("m_callerid", DEFAULT, "ERROR: Inconsistency detected in callerid state, please report (5)");
}
userdata->wholistsme.clear();
ModResult PreText(User* user, User* dest, std::string& text)
{
- if (!dest->IsModeSet('g'))
+ if (!dest->IsModeSet('g') || (user == dest))
return MOD_RES_PASSTHRU;
if (operoverride && IS_OPER(user))