X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/3b2d84f54b38287234531279c5c1405b75e1a2b2..440cd7e63ac2b059ea1a467a2e4e2244faf92cb3:/parser/parser.c diff --git a/parser/parser.c b/parser/parser.c index 76d9e3a4..2a814761 100644 --- a/parser/parser.c +++ b/parser/parser.c @@ -45,7 +45,14 @@ void destroycommandtree(CommandTree *ct) { destroycommandtree((CommandTree *)ct->next[i]); } } - + + if(ct->cmd) { + if(ct->cmd->command) + freesstring(ct->cmd->command); + if(ct->cmd->ext && ct->cmd->destroyext) + (ct->cmd->destroyext)(ct->cmd->ext); + free(ct->cmd); + } free(ct); } @@ -108,7 +115,7 @@ static int sanitisecommandname(const char *cmdname, char *cmdbuf) { * installing it in the tree */ -Command *addcommandhelptotree(CommandTree *ct, const char *cmdname, int level, int maxparams, CommandHandler handler, const char *help) { +Command *addcommandexttotree(CommandTree *ct, const char *cmdname, int level, int maxparams, CommandHandler handler, void *ext) { Command *nc, *c; char cmdbuf[MAX_COMMAND_LEN]; @@ -123,16 +130,8 @@ Command *addcommandhelptotree(CommandTree *ct, const char *cmdname, int level, i nc->handler=handler; nc->ext=NULL; nc->next=NULL; - if (help) { - int len=strlen(help); - nc->help=(char *)malloc(len+1); - if(nc->help) { - strncpy(nc->help, help, len); - nc->help[len] = '\0'; - } - } else { - nc->help=NULL; - } + nc->calls=0; + nc->destroyext=NULL; if ((c=findcommandintree(ct,cmdname,1))!=NULL) { /* Found something already. Append our entry to the end */ @@ -142,11 +141,12 @@ Command *addcommandhelptotree(CommandTree *ct, const char *cmdname, int level, i } else if (insertcommand(nc,ct,0)) { /* Erk, that didn't work.. */ freesstring(nc->command); - if(nc->help) - free(nc->help); free(nc); return NULL; } + + if (ext) + nc->ext=(void *)ext; return nc; } @@ -236,8 +236,8 @@ int deletecommand(sstring *cmdname, CommandTree *ct, int depth, CommandHandler h c=*ch; (*ch)=(Command *)((*ch)->next); freesstring(c->command); - if(c->help) - free(c->help); + if(c->ext && c->destroyext) + (c->destroyext)(c->ext); free(c); return 0; } @@ -255,8 +255,8 @@ int deletecommand(sstring *cmdname, CommandTree *ct, int depth, CommandHandler h c=*ch; (*ch)=(Command *)((*ch)->next); freesstring(c->command); - if(c->help) - free(c->help); + if(c->ext && c->destroyext) + (c->destroyext)(c->ext); free(c); /* We need to regenerate the final pointer if needed;