X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fban.cpp;h=55d9b22feea47cca3a986f9a4c002d2fa8fdf159;hb=77137a92cfc221b885b8eae68f13cede604fcac7;hp=75bae746f9455131705a27763d382014ca6a7a7e;hpb=6d0ea26c2d62c3774ff384cf1bfc2a3372b49a3b;p=minetest.git diff --git a/src/ban.cpp b/src/ban.cpp index 75bae746f..55d9b22fe 100644 --- a/src/ban.cpp +++ b/src/ban.cpp @@ -19,17 +19,18 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "ban.h" #include -#include +#include "jthread/jmutexautolock.h" #include #include #include "strfnd.h" +#include "util/string.h" #include "log.h" +#include "filesys.h" BanManager::BanManager(const std::string &banfilepath): m_banfilepath(banfilepath), m_modified(false) { - m_mutex.Init(); try{ load(); } @@ -56,18 +57,16 @@ void BanManager::load() throw SerializationError("BanManager::load(): Couldn't open file"); } - for(;;) + while(!is.eof() && is.good()) { - if(is.eof() || is.good() == false) - break; std::string line; std::getline(is, line, '\n'); Strfnd f(line); std::string ip = trim(f.next("|")); std::string name = trim(f.next("|")); - if(ip.empty()) - continue; - m_ips[ip] = name; + if(!ip.empty()) { + m_ips[ip] = name; + } } m_modified = false; } @@ -76,20 +75,20 @@ void BanManager::save() { JMutexAutoLock lock(m_mutex); infostream<<"BanManager: saving to "<::iterator i = m_ips.begin(); i != m_ips.end(); i++) { - os<first<<"|"<second<<"\n"; + ss << i->first << "|" << i->second << "\n"; + } + + if(!fs::safeWriteToFile(m_banfilepath, ss.str())) { + infostream<<"BanManager: failed saving to "< ips_to_delete; for(std::map::iterator i = m_ips.begin(); - i != m_ips.end(); i++) - { - if(i->first == ip_or_name || i->second == ip_or_name) - ips_to_delete.insert(i->first); - } - // Erase them - for(std::set::iterator - i = ips_to_delete.begin(); - i != ips_to_delete.end(); i++) + i != m_ips.end();) { - m_ips.erase(*i); + if((i->first == ip_or_name) || (i->second == ip_or_name)) { + m_ips.erase(i++); + } else { + ++i; + } } m_modified = true; }