]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
m_nationalchars Rebuild core hashmaps when the national_case_insensitive_map changes
authorAttila Molnar <attilamolnar@hush.com>
Mon, 13 Oct 2014 19:11:14 +0000 (21:11 +0200)
committerAttila Molnar <attilamolnar@hush.com>
Mon, 13 Oct 2014 19:11:14 +0000 (21:11 +0200)
Issue #923

src/modules/m_nationalchars.cpp

index b43b6e2b6a05e55cdc9e0efd058790caa7a0545d..20e4eaa9e6a39fce172c4b1ee1ddb6f1d495dbd0 100644 (file)
@@ -228,11 +228,24 @@ class ModuleNationalChars : public Module
        caller2<bool, const char*, size_t> rememberer;
        bool forcequit;
        const unsigned char * lowermap_rememberer;
+       unsigned char prev_map[256];
+
+       void CheckRehash()
+       {
+               // See if anything changed
+               if (!memcmp(prev_map, national_case_insensitive_map, sizeof(prev_map)))
+                       return;
+
+               memcpy(prev_map, national_case_insensitive_map, sizeof(prev_map));
+
+               ServerInstance->RehashUsersAndChans();
+       }
 
  public:
        ModuleNationalChars()
                : rememberer(ServerInstance->IsNick), lowermap_rememberer(national_case_insensitive_map)
        {
+               memcpy(prev_map, national_case_insensitive_map, sizeof(prev_map));
        }
 
        void init()
@@ -265,6 +278,7 @@ class ModuleNationalChars : public Module
                loadtables(charset, tables, 8, 5);
                forcequit = tag->getBool("forcequit");
                CheckForceQuit("National character set changed");
+               CheckRehash();
        }
 
        void CheckForceQuit(const char * message)
@@ -286,6 +300,7 @@ class ModuleNationalChars : public Module
                ServerInstance->IsNick = rememberer;
                national_case_insensitive_map = lowermap_rememberer;
                CheckForceQuit("National characters module unloaded");
+               CheckRehash();
        }
 
        virtual Version GetVersion()