diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/command_parse.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/command_parse.cpp b/src/command_parse.cpp index 84850a880..a3b5b41c7 100644 --- a/src/command_parse.cpp +++ b/src/command_parse.cpp @@ -21,6 +21,7 @@ #include "socketengine.h" #include "socket.h" #include "command_parse.h" +#include "exitcodes.h" /* Directory Searching for Unix-Only */ #ifndef WIN32 @@ -459,7 +460,7 @@ bool CommandParser::FindSym(void** v, void* h) return true; } -bool CommandParser::ReloadCommand(const char* cmd) +bool CommandParser::ReloadCommand(const char* cmd, userrec* user) { char filename[MAXBUF]; char commandname[MAXBUF]; @@ -486,7 +487,9 @@ bool CommandParser::ReloadCommand(const char* cmd) RFCCommands.erase(command); snprintf(filename, MAXBUF, "cmd_%s.so", commandname); - this->LoadCommand(filename); + const char* err = this->LoadCommand(filename); + if (err) + user->WriteServ("NOTICE %s :*** Error loading 'cmd_%s.so': %s", user->nick, cmd, err); return true; } @@ -497,7 +500,7 @@ bool CommandParser::ReloadCommand(const char* cmd) 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])) + if (ServerInstance->Parser->ReloadCommand(parameters[0], user)) { user->WriteServ("NOTICE %s :*** Successfully reloaded command '%s'", user->nick, parameters[0]); ServerInstance->WriteOpers("*** RELOAD: %s reloaded the '%s' command.", user->nick, parameters[0]); @@ -510,7 +513,7 @@ CmdResult cmd_reload::Handle(const char** parameters, int pcnt, userrec *user) } } -void CommandParser::LoadCommand(const char* name) +const char* CommandParser::LoadCommand(const char* name) { char filename[MAXBUF]; void* h; @@ -521,8 +524,9 @@ void CommandParser::LoadCommand(const char* name) if (!h) { - ServerInstance->Log(SPARSE, "Error loading core command: %s", dlerror()); - return; + const char* n = dlerror(); + ServerInstance->Log(SPARSE, "Error loading core command: %s", n); + return n; } if (this->FindSym((void **)&cmd_factory_func, h)) @@ -530,6 +534,7 @@ void CommandParser::LoadCommand(const char* name) command_t* newcommand = cmd_factory_func(ServerInstance); this->CreateCommand(newcommand, h); } + return NULL; } void CommandParser::SetupCommandTable() @@ -549,7 +554,12 @@ void CommandParser::SetupCommandTable() { printf("."); fflush(stdout); - this->LoadCommand(entry->d_name); + const char* err = this->LoadCommand(entry->d_name); + if (err) + { + printf("Error loading %s: %s", entry->d_name, err); + exit(EXIT_STATUS_BADHANDLER); + } } } closedir(library); |