]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/u_listmode.h
Fix mistakenly using Clang instead of GCC on older FreeBSD versions.
[user/henk/code/inspircd.git] / src / modules / u_listmode.h
index dde36a482ddfaf0cfbc7e9ba9a584e0fe92dc2f8..a728eb8397e3c1a21552731bd585a762c79794b8 100644 (file)
@@ -100,8 +100,6 @@ class ListModeBase : public ModeHandler
                configtag(ctag), extItem("listbase_mode_" + name + "_list", Creator)
        {
                list = true;
-               this->DoRehash();
-               ServerInstance->Extensions.Register(&extItem);
        }
 
        /** See mode.h
@@ -203,21 +201,23 @@ class ListModeBase : public ModeHandler
                        if (limit.mask.size() && limit.limit > 0)
                                chanlimits.push_back(limit);
                }
-               if (chanlimits.size() == 0)
-               {
-                       ListLimit limit;
-                       limit.mask = "*";
-                       limit.limit = 64;
-                       chanlimits.push_back(limit);
-               }
+
+               // Add the default entry. This is inserted last so if the user specifies a
+               // wildcard record in the config it will take precedence over this entry.
+               ListLimit limit;
+               limit.mask = "*";
+               limit.limit = 64;
+               chanlimits.push_back(limit);
        }
 
        /** Populate the Implements list with the correct events for a List Mode
         */
        virtual void DoImplements(Module* m)
        {
+               ServerInstance->Modules->AddService(extItem);
+               this->DoRehash();
                Implementation eventlist[] = { I_OnSyncChannel, I_OnRehash };
-               ServerInstance->Modules->Attach(eventlist, m, 2);
+               ServerInstance->Modules->Attach(eventlist, m, sizeof(eventlist)/sizeof(Implementation));
        }
 
        /** Handle the list mode.
@@ -294,6 +294,8 @@ class ListModeBase : public ModeHandler
                                                        return MODEACTION_DENY;
                                                }
                                        }
+                                       else
+                                               break;
                                }
                        }
 
@@ -316,7 +318,7 @@ class ListModeBase : public ModeHandler
                                        if (parameter == it->mask)
                                        {
                                                el->erase(it);
-                                               if (el->size() == 0)
+                                               if (el->empty())
                                                {
                                                        extItem.unset(channel);
                                                }