]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/command_parse.cpp
Changes to m_override
[user/henk/code/inspircd.git] / src / command_parse.cpp
index 83f4674c46c563a0031a738b8dcc07c51eb35a26..11f4b46351bc48dd5c9b910dae1ac293e4fa2868 100644 (file)
@@ -284,7 +284,7 @@ bool CommandParser::IsValidCommand(const std::string &commandname, int pcnt, use
 
 // calls a handler function for a command
 
-bool CommandParser::CallHandler(const std::string &commandname,const char** parameters, int pcnt, userrec *user)
+CmdResult CommandParser::CallHandler(const std::string &commandname,const char** parameters, int pcnt, userrec *user)
 {
        nspace::hash_map<std::string,command_t*>::iterator n = cmdlist.find(commandname);
 
@@ -298,19 +298,17 @@ bool CommandParser::CallHandler(const std::string &commandname,const char** para
                                {
                                        if ((user->HasPermission(commandname)) || (!IS_LOCAL(user)))
                                        {
-                                               n->second->Handle(parameters,pcnt,user);
-                                               return true;
+                                               return n->second->Handle(parameters,pcnt,user);
                                        }
                                }
                                else
                                {
-                                       n->second->Handle(parameters,pcnt,user);
-                                       return true;
+                                       return n->second->Handle(parameters,pcnt,user);
                                }
                        }
                }
        }
-       return false;
+       return CMD_INVALID;
 }
 
 void CommandParser::ProcessCommand(userrec *user, std::string &cmd)
@@ -383,8 +381,9 @@ void CommandParser::ProcessCommand(userrec *user, std::string &cmd)
                                 * command handler call, as the handler
                                 * may free the user structure!
                                 */
+                               CmdResult result = cm->second->Handle(command_p,items,user);
 
-                               cm->second->Handle(command_p,items,user);
+                               FOREACH_MOD(I_OnPostCommand,OnPostCommand(command, command_p, items, user, result));
                                return;
                        }
                        else
@@ -475,15 +474,16 @@ CommandParser::CommandParser(InspIRCd* Instance) : ServerInstance(Instance)
        this->SetupCommandTable();
 }
 
-void CommandParser::FindSym(void** v, void* h)
+bool CommandParser::FindSym(void** v, void* h)
 {
        *v = dlsym(h, "init_command");
        const char* err = dlerror();
        if (err)
        {
-               printf("ERROR: %s\n",err);
-               exit(0);
+               ServerInstance->Log(SPARSE, "Error loading core command: %s\n", err);
+               return false;
        }
+       return true;
 }
 
 bool CommandParser::ReloadCommand(const char* cmd)
@@ -521,13 +521,19 @@ bool CommandParser::ReloadCommand(const char* cmd)
        return false;
 }
 
-void cmd_reload::Handle(const char** parameters, int pcnt, userrec *user)
+CmdResult cmd_reload::Handle(const char** parameters, int pcnt, userrec *user)
 {
        user->WriteServ("NOTICE %s :*** Reloading command '%s'",user->nick, parameters[0]);
        if (ServerInstance->Parser->ReloadCommand(parameters[0]))
+       {
                user->WriteServ("NOTICE %s :*** Successfully reloaded command '%s'", user->nick, parameters[0]);
+               return CMD_SUCCESS;
+       }
        else
+       {
                user->WriteServ("NOTICE %s :*** Could not reload command '%s'", user->nick, parameters[0]);
+               return CMD_FAILURE;
+       }
 }
 
 void CommandParser::LoadCommand(const char* name)
@@ -542,13 +548,16 @@ void CommandParser::LoadCommand(const char* name)
        h = dlopen(filename, RTLD_NOW | RTLD_GLOBAL);
 
        if (!h)
+       {
+               ServerInstance->Log(SPARSE, "Error loading core command: %s", dlerror());
                return;
+       }
 
-       this->FindSym((void **)&cmd_factory_func, h);
-
-       command_t* newcommand = cmd_factory_func(ServerInstance);
-
-       this->CreateCommand(newcommand, h);
+       if (this->FindSym((void **)&cmd_factory_func, h))
+       {
+               command_t* newcommand = cmd_factory_func(ServerInstance);
+               this->CreateCommand(newcommand, h);
+       }
 }
 
 void CommandParser::SetupCommandTable()