diff --git a/Changes b/Changes index 73a91ea23..6bce02aa4 100644 --- a/Changes +++ b/Changes @@ -292,3 +292,4 @@ - You can now specify oper flags using the old method: (new method) flags { flags here }; (old method) flags flags_here; - Removed a lot of vars and stuff from the old config, also made some cleanups to reduce source size +- Made del_Command(). \ No newline at end of file diff --git a/include/h.h b/include/h.h index 1be3fbc00..4952a5a54 100644 --- a/include/h.h +++ b/include/h.h @@ -130,6 +130,7 @@ extern int R_do_socks, R_good_socks, R_no_socks; #endif #endif +extern inline aCommand *find_Command(char *cmd, int token); extern aChannel *find_channel PROTO((char *, aChannel *)); extern Member *find_member_link PROTO((Member *, aClient *)); extern void remove_user_from_channel PROTO((aClient *, aChannel *)); @@ -403,7 +404,7 @@ void add_Command_backend(char *cmd, int (*func)(), unsigned char parameters, uns void add_Command(char *cmd, char *token, int (*func)(), unsigned char parameters); void add_Command_to_list(aCommand *item, aCommand **list); aCommand *del_Command_from_list(aCommand *item, aCommand **list); - +int del_Command(char *cmd, char *token, int (*func)()); /* CRULE */ char *crule_parse PROTO((char *)); diff --git a/src/packet.c b/src/packet.c index 46fbf7c7e..20d089092 100644 --- a/src/packet.c +++ b/src/packet.c @@ -339,3 +339,64 @@ aCommand *del_Command_from_list(aCommand *item, aCommand **list) return NULL; } +inline aCommand *find_CommandEx(char *cmd, int (*func)(), int token) +{ + aCommand *p; + + for (p = CommandHash[toupper(*cmd)]; p; p = p->next) + if (p->token && token) + { + if (!strcmp(p->cmd, cmd)) + if (p->func == func) + return (p); + } + else + if (!match(p->cmd, cmd)) + if (p->func == func) + return (p); + return NULL; + +} + +int del_Command(char *cmd, char *token, int (*func)()) +{ + aCommand *p; + int i = 0; + p = find_CommandEx(cmd, func, 0); + if (!p) + i--; + else + { + del_Command_from_list(p, &CommandHash[toupper(*cmd)]); + if (p->cmd) + MyFree(p->cmd); + MyFree(p); + } + p = find_CommandEx(token, func, 1); + if (!p) + i--; + else + { + del_Command_from_list(p, &CommandHash[toupper(*token)]); + if (p->cmd) + MyFree(p->cmd); + MyFree(p); + } + return i; +} + +inline aCommand *find_Command(char *cmd, int token) +{ + aCommand *p; + + for (p = CommandHash[toupper(*cmd)]; p; p = p->next) + if (p->token && token) + { + if (!strcmp(p->cmd, cmd)) + return (p); + } + else + if (!match(p->cmd, cmd)) + return (p); + return NULL; +} diff --git a/src/parse.c b/src/parse.c index 47f53fa59..5a2f2b236 100644 --- a/src/parse.c +++ b/src/parse.c @@ -184,22 +184,6 @@ void ban_flooder(aClient *cptr) return; } -inline aCommand *find_Command(char *cmd, int token) -{ - aCommand *p; - - for (p = CommandHash[toupper(*cmd)]; p; p = p->next) - if (p->token && token) - { - if (!strcmp(p->cmd, cmd)) - return (p); - } - else - if (!match(p->cmd, cmd)) - return (p); - return NULL; -} - /* * parse a buffer. *