X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/354b14ea09f3b6c5c4edab5b4fd0553415787196..78546f2b0f59b5c8fede1ce5535972716eb17041:/newsearch/ns-notice.c?ds=sidebyside diff --git a/newsearch/ns-notice.c b/newsearch/ns-notice.c index 3c0861f8..00e9e035 100644 --- a/newsearch/ns-notice.c +++ b/newsearch/ns-notice.c @@ -22,44 +22,42 @@ void notice_free(searchCtx *ctx, struct searchNode *thenode); struct notice_localdata { unsigned int marker; int count; - int type; char message[NSMAX_NOTICE_LEN]; }; -struct searchNode *notice_parse(searchCtx *ctx, int type, int argc, char **argv) { +struct searchNode *notice_parse(searchCtx *ctx, int argc, char **argv) { struct notice_localdata *localdata; - struct searchNode *thenode; - int len; - + struct searchNode *thenode, *message; + char *p; + if (!(localdata = (struct notice_localdata *) malloc(sizeof(struct notice_localdata)))) { parseError = "malloc: could not allocate memory for this search."; return NULL; } localdata->count = 0; - localdata->type = type; - if (type == SEARCHTYPE_CHANNEL) + if (ctx->searchcmd == reg_chansearch) localdata->marker = nextchanmarker(); - else + else if (ctx->searchcmd == reg_nicksearch) localdata->marker = nextnickmarker(); - - if (argc==1) { - char *p = argv[0]; - if(*p == '\"') - p++; - len = strlcpy(localdata->message, p, sizeof(localdata->message)); - if(len >= sizeof(localdata->message)) { - localdata->message[sizeof(localdata->message)-1] = '\0'; - } else { - localdata->message[len-1] = '\0'; - } - } else { - /* no notice to send out ... */ - parseError = "Warning: you did not specify a message to notice out."; + free(localdata); + parseError = "notice: invalid search type"; + return NULL; + } + if (argc!=1) { + parseError = "notice: warning: you did not specify a message to notice out."; free(localdata); return NULL; } + if (!(message=argtoconststr("notice", ctx, argv[0], &p))) { + free(localdata); + return NULL; + } + + strlcpy(localdata->message, p, sizeof(localdata->message)); + (message->free)(ctx, message); + if (!(thenode=(struct searchNode *)malloc(sizeof (struct searchNode)))) { /* couldn't malloc() memory for thenode, so free localdata to avoid leakage */ parseError = "malloc: could not allocate memory for this search."; @@ -82,7 +80,7 @@ void *notice_exe(searchCtx *ctx, struct searchNode *thenode, void *theinput) { localdata = thenode->localdata; - if (localdata->type == SEARCHTYPE_CHANNEL) { + if (ctx->searchcmd == reg_chansearch) { cip = (chanindex *)theinput; cip->marker = localdata->marker; localdata->count += cip->channel->users->totalusers; @@ -105,7 +103,7 @@ void notice_free(searchCtx *ctx, struct searchNode *thenode) { localdata = thenode->localdata; - if (localdata->type == SEARCHTYPE_CHANNEL) { + if (ctx->searchcmd == reg_chansearch) { nickmarker=nextnickmarker(); for (i=0;inext; if (np->marker == nickmarker) - controlnotice(np, localdata->message); + controlnotice(np, "%s", localdata->message); } } } @@ -134,7 +132,7 @@ void notice_free(searchCtx *ctx, struct searchNode *thenode) { for (np=nicktable[i];np;np=nnp) { nnp = np->next; if (np->marker == localdata->marker) - controlnotice(np, localdata->message); + controlnotice(np, "%s", localdata->message); } } }