-/* modcmd.c - NeonServ v5.0
+/* modcmd.c - NeonServ v5.1
* Copyright (C) 2011 Philipp Kreil (pk910)
*
* This program is free software: you can redistribute it and/or modify
chan = chan2;
}
}
- if(cbind->parameters) {
+ if(cbind->paramcount) {
//userdefined parameters...
char *uargs[MAXNUMPARAMS];
int uargc = 0;
- char *a,*b = cbind->parameters;
+ char *b;
+ int i;
int allargs, argi;
- do {
- a = strstr(b, " ");
- if(a) *a = '\0';
+ for(i = 0; i < cbind->paramcount; i++) {
+ b = cbind->parameters[i];
if(b[0] == '%') {
b++;
if(b[strlen(b)-1] == '-') {
- allargs = 1;
- b[strlen(b)-1] = '\0';
+ allargs = strlen(b)-1;
+ b[allargs] = '\0';
argi = atoi(b);
- b[strlen(b)-1] = '-';
+ b[allargs] = '-';
+ allargs = 1;
} else {
allargs = 0;
argi = atoi(b);
} else {
uargs[uargc++] = b;
}
- if(a) {
- *a = ' ';
- b = a+1;
- }
- } while(a);
+ }
argv = uargs;
argc = uargc;
}
cbind->botid = botid;
cbind->cmd = strdup(cmd);
cbind->func = func;
- cbind->parameters = NULL;
+ cbind->paramcount = 0;
cbind->global_access = 0;
cbind->channel_access = NULL;
cbind->flags = 0;
cbind->cmd = strdup(cmd);
cbind->func = cmdfunc;
cbind->next = cmd_binds[bind_index];
- cbind->parameters = NULL;
+ cbind->paramcount = 0;
cbind->global_access = 0;
cbind->channel_access = NULL;
cbind->flags = 0;
else
cmd_binds[bind_index] = cbind->next;
free(cbind->cmd);
- if(cbind->parameters)
- free(cbind->parameters);
+ if(cbind->paramcount) {
+ int i;
+ for(i = 0; i < cbind->paramcount; i++)
+ free(cbind->parameters[i]);
+ }
free(cbind);
return 1;
} else
for(cbind = cmd_binds[i]; cbind; cbind = next) {
next = cbind->next;
free(cbind->cmd);
- if(cbind->parameters)
- free(cbind->parameters);
+ if(cbind->paramcount) {
+ int j;
+ for(j = 0; j < cbind->paramcount; j++)
+ free(cbind->parameters[j]);
+ }
if(cbind->channel_access)
free(cbind->channel_access);
free(cbind);
struct cmd_binding *cbind;
for(cbind = cmd_binds[bind_index]; cbind; cbind = cbind->next) {
if(cbind->botid == botid && strcmp(cbind->cmd, cmd) == 0) {
- if(cbind->parameters)
- free(cbind->parameters);
- cbind->parameters = strdup(parameters);
+ if(cbind->paramcount) {
+ int i;
+ for(i = 0; i < cbind->paramcount; i++)
+ free(cbind->parameters[i]);
+ cbind->paramcount = 0;
+ }
+ char *a, *b = parameters;
+ do {
+ a = strstr(b, " ");
+ if(a) *a = '\0';
+ cbind->parameters[cbind->paramcount++] = strdup(b);
+ if(a) b = a+1;
+ } while(a);
return;
}
}