When a single result was returned, it was written to the buffer and
returned, but the query result was never freed.
This patch creates a free_query function and changes the code to use
that everywhere.
return tmp;
}
+static void free_query (QUERY **query)
+{
+ QUERY *p;
+
+ if (!query)
+ return;
+
+ while (*query)
+ {
+ p = *query;
+ *query = (*query)->next;
+
+ rfc822_free_address (&p->addr);
+ FREE (&p->name);
+ FREE (&p->other);
+ FREE (&p);
+ }
+}
+
static QUERY *run_query (char *s, int quiet)
{
FILE *fp;
buf[0] = '\0';
rfc822_write_address (buf, buflen, tmpa, 0);
rfc822_free_address (&tmpa);
+ free_query (&results);
mutt_clear_error ();
return (0);
}
if (op == OP_QUERY)
{
- queryp = results;
- while (queryp)
- {
- rfc822_free_address (&queryp->addr);
- FREE (&queryp->name);
- FREE (&queryp->other);
- results = queryp->next;
- FREE (&queryp);
- queryp = results;
- }
+ free_query (&results);
results = newresults;
FREE (&QueryTable);
}
}
- queryp = results;
- while (queryp)
- {
- rfc822_free_address (&queryp->addr);
- FREE (&queryp->name);
- FREE (&queryp->other);
- results = queryp->next;
- FREE (&queryp);
- queryp = results;
- }
+ free_query (&results);
FREE (&QueryTable);
/* tell whoever called me to redraw the screen when I return */