X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/9ce4f0be8ac874b2e3f25dcf657999346826b8ea..f33f3f52f58acdd2b9b6796713ac8f24d9881545:/newsearch/ns-match.c diff --git a/newsearch/ns-match.c b/newsearch/ns-match.c index 4ea4ff00..a4dba15d 100644 --- a/newsearch/ns-match.c +++ b/newsearch/ns-match.c @@ -13,10 +13,10 @@ struct match_localdata { struct searchNode *patnode; }; -void *match_exe(struct searchNode *thenode, int type, void *theinput); -void match_free(struct searchNode *thenode); +void *match_exe(searchCtx *ctx, struct searchNode *thenode, void *theinput); +void match_free(searchCtx *ctx, struct searchNode *thenode); -struct searchNode *match_parse(int type, int argc, char **argv) { +struct searchNode *match_parse(searchCtx *ctx, int argc, char **argv) { struct match_localdata *localdata; struct searchNode *thenode; struct searchNode *targnode, *patnode; @@ -26,11 +26,14 @@ struct searchNode *match_parse(int type, int argc, char **argv) { return NULL; } - if (!(targnode = search_parse(type, argv[0]))) + /* @fixme check this works with new parsing semantics */ + targnode = ctx->parser(ctx, argv[0]); + if (!(targnode = coerceNode(ctx,targnode, RETURNTYPE_STRING))) return NULL; - if (!(patnode = search_parse(type, argv[1]))) { - (targnode->free)(targnode); + patnode = ctx->parser(ctx, argv[1]); + if (!(patnode = coerceNode(ctx,patnode, RETURNTYPE_STRING))) { + (targnode->free)(ctx, targnode); return NULL; } @@ -57,36 +60,25 @@ struct searchNode *match_parse(int type, int argc, char **argv) { return thenode; } -void *match_exe(struct searchNode *thenode, int type, void *theinput) { +void *match_exe(searchCtx *ctx, struct searchNode *thenode, void *theinput) { struct match_localdata *localdata; char *pattern, *target; - int ret; localdata = thenode->localdata; - pattern = (char *)(localdata->patnode->exe) (localdata->patnode, RETURNTYPE_STRING, theinput); - target = (char *)(localdata->targnode->exe)(localdata->targnode,RETURNTYPE_STRING, theinput); + pattern = (char *)(localdata->patnode->exe) (ctx, localdata->patnode, theinput); + target = (char *)(localdata->targnode->exe)(ctx, localdata->targnode,theinput); - ret = match2strings(pattern, target); - - switch(type) { - default: - case RETURNTYPE_INT: - case RETURNTYPE_BOOL: - return (void *)ret; - - case RETURNTYPE_STRING: - return (ret ? "1" : ""); - } + return (void *)(long)match2strings(pattern, target); } -void match_free(struct searchNode *thenode) { +void match_free(searchCtx *ctx, struct searchNode *thenode) { struct match_localdata *localdata; localdata=thenode->localdata; - (localdata->patnode->free)(localdata->patnode); - (localdata->targnode->free)(localdata->targnode); + (localdata->patnode->free)(ctx, localdata->patnode); + (localdata->targnode->free)(ctx, localdata->targnode); free(localdata); free(thenode); }