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.";
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;
localdata = thenode->localdata;
- if (localdata->type == SEARCHTYPE_CHANNEL) {
+ if (ctx->searchcmd == reg_chansearch) {
nickmarker=nextnickmarker();
for (i=0;i<CHANNELHASHSIZE;i++) {
for (cip=chantable[i];cip;cip=ncip) {
for(np=nicktable[i];np;np=nnp) {
nnp = np->next;
if (np->marker == nickmarker)
- controlnotice(np, localdata->message);
+ controlnotice(np, "%s", localdata->message);
}
}
}
for (np=nicktable[i];np;np=nnp) {
nnp = np->next;
if (np->marker == localdata->marker)
- controlnotice(np, localdata->message);
+ controlnotice(np, "%s", localdata->message);
}
}
}