X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/27ce0548659b866469bb01b639aab0682a4ea667..211567363bd8bfbd70cef81e4208ea02d49ebb55:/newsearch/ns-host.c diff --git a/newsearch/ns-host.c b/newsearch/ns-host.c index 636e23f8..ab919d84 100644 --- a/newsearch/ns-host.c +++ b/newsearch/ns-host.c @@ -10,18 +10,14 @@ #include "../irc/irc_config.h" #include "../lib/irc_string.h" -void *host_exe(struct searchNode *thenode, int type, void *theinput); -void *host_exe_real(struct searchNode *thenode, int type, void *theinput); -void host_free(struct searchNode *thenode); - -struct searchNode *host_parse(int type, int argc, char **argv) { - struct searchNode *thenode; - - if (type != SEARCHTYPE_NICK) { - parseError = "host: this function is only valid for nick searches."; - return NULL; - } - +void *host_exe(searchCtx *ctx, struct searchNode *thenode, void *theinput); +void *host_exe_real(searchCtx *ctx, struct searchNode *thenode, void *theinput); +void host_free(searchCtx *ctx, struct searchNode *thenode); + +struct searchNode *host_parse(searchCtx *ctx, int argc, char **argv) { + struct searchNode *thenode, *argsn; + char *p; + if (!(thenode=(struct searchNode *)malloc(sizeof (struct searchNode)))) { parseError = "malloc: could not allocate memory for this search."; return NULL; @@ -37,23 +33,26 @@ struct searchNode *host_parse(int type, int argc, char **argv) { thenode->exe = host_exe; thenode->free = host_free; - /* Allow "host real" to match realhost */ - - if (argc>0 && !ircd_strcmp(argv[0],"real")) { - thenode->exe = host_exe_real; + if (argc>0) { + if (!(argsn=argtoconststr("host", ctx, argv[0], &p))) { + free(thenode); + return NULL; + } + + /* Allow "host real" to match realhost */ + if (!ircd_strcmp(p,"real")) + thenode->exe = host_exe_real; + + argsn->free(ctx, argsn); } return thenode; } -void *host_exe(struct searchNode *thenode, int type, void *theinput) { +void *host_exe(searchCtx *ctx, struct searchNode *thenode, void *theinput) { nick *np = (nick *)theinput; char *buf = thenode->localdata; - if (type != RETURNTYPE_STRING) { - return (void *)1; - } - if (IsSetHost(np)) { return np->sethost->content; } else if (IsHideHost(np)) { @@ -64,17 +63,13 @@ void *host_exe(struct searchNode *thenode, int type, void *theinput) { } } -void *host_exe_real(struct searchNode *thenode, int type, void *theinput) { +void *host_exe_real(searchCtx *ctx, struct searchNode *thenode, void *theinput) { nick *np = (nick *)theinput; - if (type != RETURNTYPE_STRING) { - return (void *)1; - } - return np->host->name->content; } -void host_free(struct searchNode *thenode) { +void host_free(searchCtx *ctx, struct searchNode *thenode) { free(thenode->localdata); free(thenode); }