X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/5a0247f12b0397d42e6ba09bc6f23ee82ebb44d0..9a180aad2034031c997d963b455a072d053c0aa3:/newsearch/ns-modes.c diff --git a/newsearch/ns-modes.c b/newsearch/ns-modes.c index 48042917..c77c3227 100644 --- a/newsearch/ns-modes.c +++ b/newsearch/ns-modes.c @@ -17,9 +17,10 @@ void modes_free(searchCtx *ctx, struct searchNode *thenode); struct searchNode *modes_parse(searchCtx *ctx, int argc, char **argv) { struct modes_localdata *localdata; - struct searchNode *thenode; + struct searchNode *thenode, *modestring; const flag *flaglist; - + char *p; + if (argc!=1) { parseError="modes: usage: modes (mode string)"; return NULL; @@ -42,9 +43,15 @@ struct searchNode *modes_parse(searchCtx *ctx, int argc, char **argv) { localdata->setmodes=0; localdata->clearmodes = ~0; - setflags(&(localdata->setmodes), 0xFFFF, argv[0], flaglist, REJECT_NONE); - setflags(&(localdata->clearmodes), 0xFFFF, argv[0], flaglist, REJECT_NONE); - + if (!(modestring=argtoconststr("modes", ctx, argv[0], &p))) { + free(localdata); + return NULL; + } + + setflags(&(localdata->setmodes), 0xFFFF, p, flaglist, REJECT_NONE); + setflags(&(localdata->clearmodes), 0xFFFF, p, flaglist, REJECT_NONE); + (modestring->free)(ctx, modestring); + localdata->clearmodes = ~(localdata->clearmodes); if (!(thenode=(struct searchNode *)malloc(sizeof(struct searchNode)))) {