X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=modcmd.c;h=5476d5e00a9798fff30610f4f01c2f5f70a4465c;hb=795115bf680185ae01043bd1222b78bfed8c1d87;hp=61ebdc2f74fbff84caae69c1ac1e598370f5d033;hpb=44f05323cf67eb85aca10ebc072b85b2092549d5;p=NeonServV5.git diff --git a/modcmd.c b/modcmd.c index 61ebdc2..5476d5e 100644 --- a/modcmd.c +++ b/modcmd.c @@ -150,41 +150,47 @@ static void handle_command(struct ClientSocket *client, struct UserNode *user, s } if(cbind->parameters) { //userdefined parameters... - char *uarga[MAXNUMPARAMS]; - char params[strlen(cbind->parameters)+1]; - strcpy(params, cbind->parameters); - int uargpos = 0, argi, allargs = 0; - char *ppos = params; - char *prev_ppos = params; - while((ppos = strstr(ppos, " "))) { - *ppos = '\0'; - if(prev_ppos[0] == '%') { - prev_ppos++; - if(prev_ppos[strlen(prev_ppos)-1] == '-') { + char *uargs[MAXNUMPARAMS]; + int uargc = 0; + char *a,*b = cbind->parameters; + int allargs, argi; + do { + a = strstr(b, " "); + if(a) *a = '\0'; + if(b[0] == '%') { + b++; + if(b[strlen(b)-1] == '-') { allargs = 1; - prev_ppos[strlen(prev_ppos)-1] = '\0'; - } else + b[strlen(b)-1] = '\0'; + argi = atoi(b); + b[strlen(b)-1] = '-'; + } else { allargs = 0; - argi = atoi(prev_ppos); + argi = atoi(b); + } if(argi > 0) { - if(argi <= argc) continue; - uarga[uargpos++] = argv[argi-1]; - if(allargs) { - for(;argi < argc; argi++) - uarga[uargpos++] = argv[argi-1]; + if(argi <= argc) { + uargs[uargc++] = argv[argi-1]; + if(allargs) { + for(argi++; argi <= argc; argi++) + uargs[uargc++] = argv[argi-1]; + } } - } else if(!strcmp(prev_ppos, "c")) - uarga[uargpos++] = (chan ? chan->name : NULL); - else if(!strcmp(prev_ppos, "n")) - uarga[uargpos++] = user->nick; + } else if(!strcmp(b, "c")) { + uargs[uargc++] = (chan ? chan->name : NULL); + } else if(!strcmp(b, "n")) { + uargs[uargc++] = user->nick; + } } else { - uarga[uargpos++] = prev_ppos; + uargs[uargc++] = b; } - ppos++; - prev_ppos = ppos; - } - argv = uarga; - argc = uargpos; + if(a) { + *a = ' '; + b = a+1; + } + } while(a); + argv = uargs; + argc = uargc; } if(argc < cbind->func->paramcount) { reply(tmp_text_client, user, "MODCMD_LESS_PARAM_COUNT");