struct searchNode **nodes;
};
-void lt_free(struct searchNode *thenode);
-void *lt_exe(struct searchNode *thenode, void *theinput);
+void lt_free(searchCtx *ctx, struct searchNode *thenode);
+void *lt_exe(searchCtx *ctx, struct searchNode *thenode, void *theinput);
-struct searchNode *lt_parse(int type, int argc, char **argv) {
+struct searchNode *lt_parse(searchCtx *ctx, int argc, char **argv) {
struct lt_localdata *localdata;
struct searchNode *thenode;
int i;
for (i=0;i<argc;i++) {
/* Parse the node.. */
- localdata->nodes[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]) {
- lt_free(thenode);
+ lt_free(ctx, thenode);
return NULL;
}
return thenode;
}
-void lt_free(struct searchNode *thenode) {
+void lt_free(searchCtx *ctx, struct searchNode *thenode) {
struct lt_localdata *localdata;
int i;
for (i=0;i<localdata->count;i++) {
if (localdata->nodes[i])
- (localdata->nodes[i]->free)(localdata->nodes[i]);
+ (localdata->nodes[i]->free)(ctx, localdata->nodes[i]);
}
free(localdata->nodes);
free(thenode);
}
-void *lt_exe(struct searchNode *thenode, void *theinput) {
+void *lt_exe(searchCtx *ctx, struct searchNode *thenode, void *theinput) {
int i;
char *strval;
int intval;
switch (localdata->type) {
case RETURNTYPE_INT:
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;i<localdata->count;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_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;i<localdata->count;i++) {
- if (ircd_strcmp(strval, (char *)(localdata->nodes[i]->exe)(localdata->nodes[i], theinput)) >= 0)
+ if (ircd_strcmp(strval, (char *)(localdata->nodes[i]->exe)(ctx, localdata->nodes[i], theinput)) >= 0)
return (void *)0;
}
return (void *)1;