X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/798a53a27e24f354d6ec78317467b998302cd0b0..211567363bd8bfbd70cef81e4208ea02d49ebb55:/newsearch/ns-eq.c diff --git a/newsearch/ns-eq.c b/newsearch/ns-eq.c index bda251bb..99ee0842 100644 --- a/newsearch/ns-eq.c +++ b/newsearch/ns-eq.c @@ -14,10 +14,10 @@ struct eq_localdata { struct searchNode **nodes; }; -void eq_free(struct searchNode *thenode); -void *eq_exe(struct searchNode *thenode, void *theinput); +void eq_free(searchCtx *ctx, struct searchNode *thenode); +void *eq_exe(searchCtx *ctx, struct searchNode *thenode, void *theinput); -struct searchNode *eq_parse(int type, int argc, char **argv) { +struct searchNode *eq_parse(searchCtx *ctx, int argc, char **argv) { struct eq_localdata *localdata; struct searchNode *thenode; int i; @@ -49,15 +49,15 @@ struct searchNode *eq_parse(int type, int argc, char **argv) { for (i=0;inodes[i] = search_parse(type, argv[i]); + localdata->nodes[i] = ctx->parser(ctx, argv[i]); /* Subsequent nodes get coerced to match the type of the first node */ if (i) - localdata->nodes[i]=coerceNode(localdata->nodes[i],localdata->type); + localdata->nodes[i]=coerceNode(ctx,localdata->nodes[i],localdata->type); /* If a node didn't parse, give up */ if (!localdata->nodes[i]) { - eq_free(thenode); + eq_free(ctx, thenode); return NULL; } @@ -72,7 +72,7 @@ struct searchNode *eq_parse(int type, int argc, char **argv) { return thenode; } -void eq_free(struct searchNode *thenode) { +void eq_free(searchCtx *ctx, struct searchNode *thenode) { struct eq_localdata *localdata; int i; @@ -80,7 +80,7 @@ void eq_free(struct searchNode *thenode) { for (i=0;icount;i++) { if (localdata->nodes[i]) - (localdata->nodes[i]->free)(localdata->nodes[i]); + (localdata->nodes[i]->free)(ctx, localdata->nodes[i]); } free(localdata->nodes); @@ -88,7 +88,7 @@ void eq_free(struct searchNode *thenode) { free(thenode); } -void *eq_exe(struct searchNode *thenode, void *theinput) { +void *eq_exe(searchCtx *ctx, struct searchNode *thenode, void *theinput) { int i; char *strval; int intval; @@ -102,17 +102,17 @@ void *eq_exe(struct searchNode *thenode, void *theinput) { switch (localdata->type) { case RETURNTYPE_INT: - intval = (int)((long)(localdata->nodes[0]->exe)(localdata->nodes[0], theinput)); + intval = (int)((long)(localdata->nodes[0]->exe)(ctx, localdata->nodes[0], theinput)); for (i=1;icount;i++) { - if ((int)((long)(localdata->nodes[i]->exe)(localdata->nodes[i], theinput) != intval)) + if ((int)((long)(localdata->nodes[i]->exe)(ctx, localdata->nodes[i], theinput) != intval)) return (void *)0; } return (void *)1; case RETURNTYPE_BOOL: - intval = (int)((long)(localdata->nodes[0]->exe)(localdata->nodes[0], theinput)); + intval = (int)((long)(localdata->nodes[0]->exe)(ctx, localdata->nodes[0], theinput)); for (i=1;icount;i++) { - rval=(int)((long)(localdata->nodes[i]->exe)(localdata->nodes[i], theinput)); + rval=(int)((long)(localdata->nodes[i]->exe)(ctx, localdata->nodes[i], theinput)); if ((rval && !intval) || (!rval && intval)) { /* LOGICAL XOR GOES HERE FS */ return (void *)0; } @@ -120,9 +120,9 @@ void *eq_exe(struct searchNode *thenode, void *theinput) { return (void *)1; case RETURNTYPE_STRING: - strval = (char *)(localdata->nodes[0]->exe)(localdata->nodes[0], theinput); + strval = (char *)(localdata->nodes[0]->exe)(ctx, localdata->nodes[0], theinput); for (i=1;icount;i++) { - if (ircd_strcmp(strval, (char *)(localdata->nodes[i]->exe)(localdata->nodes[i], theinput))) + if (ircd_strcmp(strval, (char *)(localdata->nodes[i]->exe)(ctx, localdata->nodes[i], theinput))) return (void *)0; } return (void *)1;