From eb23ac3371ee2d12e5698e1aa7f491263ff97fce Mon Sep 17 00:00:00 2001 From: pk910 Date: Tue, 20 Dec 2011 21:36:12 +0100 Subject: [PATCH] added possibility for default values (dynamic parameter binding) --- src/modcmd.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/modcmd.c b/src/modcmd.c index 50f71c8..9846db2 100644 --- a/src/modcmd.c +++ b/src/modcmd.c @@ -253,13 +253,23 @@ static void handle_command(struct ClientSocket *client, struct UserNode *user, s int args_pos = 0; char *uargs[MAXNUMPARAMS]; int uargc = 0; - char *b; + char *b, *c; int i; int allargs, argi; for(i = 0; i < cbind->paramcount; i++) { b = cbind->parameters[i]; if(b[0] == '%') { b++; + c = b; + while(*c && *c != ' ') { + if(*c == '|') break; + c++; + } + if(!*c || *c == ' ') c = NULL; + else { + *c = '\0'; + c++; + } if(b[strlen(b)-1] == '-') { allargs = strlen(b)-1; b[allargs] = '\0'; @@ -297,6 +307,9 @@ static void handle_command(struct ClientSocket *client, struct UserNode *user, s } else if((cbind->func->flags & CMDFLAG_EMPTY_ARGS)) { uargs[uargc++] = args_buffer + args_pos; args_buffer[args_pos++] = '\0'; + } else if(c) { + uargs[uargc++] = args_buffer + args_pos; + args_pos += sprintf(args_buffer + args_pos, "%s", c) + 1; } } else if(!strcmp(b, "c")) { uargs[uargc++] = args_buffer + args_pos; @@ -305,6 +318,7 @@ static void handle_command(struct ClientSocket *client, struct UserNode *user, s uargs[uargc++] = args_buffer + args_pos; args_pos += sprintf(args_buffer + args_pos, "%s", user->nick) + 1; } + if(c) c[-1] = '|'; //reset \0 to | } else { uargs[uargc++] = args_buffer + args_pos; args_pos += sprintf(args_buffer + args_pos, "%s", b) + 1; -- 2.20.1