struct searchNode *kill_parse(searchCtx *ctx, int argc, char **argv) {
struct kill_localdata *localdata;
struct searchNode *thenode;
- int len;
if (!(localdata = (struct kill_localdata *) malloc(sizeof(struct kill_localdata)))) {
parseError = "malloc: could not allocate memory for this search.";
else if (ctx->searchcmd == reg_nicksearch)
localdata->marker = nextnickmarker();
else {
+ free(localdata);
parseError = "kill: invalid search type";
return NULL;
}
if (argc==1) {
- char *p = argv[0];
- if(*p == '\"')
- p++;
- len = strlcpy(localdata->reason, p, sizeof(localdata->reason));
- if(len >= sizeof(localdata->reason)) {
- localdata->reason[sizeof(localdata->reason)-1] = '\0';
- } else {
- localdata->reason[len-1] = '\0';
+ struct searchNode *reasonstr;
+ char *p;
+ if (!(reasonstr=argtoconststr("kill", ctx, argv[0], &p))) {
+ free(localdata);
+ return NULL;
}
- }
- else
+
+ strlcpy(localdata->reason, p, sizeof(localdata->reason));
+ reasonstr->free(ctx, reasonstr);
+ } else {
strlcpy(localdata->reason, defaultreason, sizeof(localdata->reason));
-
+ }
+
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.";