return NULL;
}
-void list_queries(int (*action)(int, char *[], void *), void *actarg)
+void list_queries(client *cl, int (*action)(int, char *[], void *),
+ void *actarg)
{
- struct query *q;
- int i;
- static struct query **squeries2 = NULL;
- struct query **sq;
+ static struct query **squeries = NULL;
+ static int qcount;
+ struct query *q, **sq;
char qnames[80];
char *qnp;
- int count;
+ int i;
- if (!squeries2)
+ if (!squeries)
{
- sq = xmalloc(count * sizeof(struct query *));
- squeries2 = sq;
+ squeries = sq = xmalloc(QueryCount * sizeof(struct query *));
q = Queries;
for (i = 0; i < QueryCount; i++)
{
+ if (q->version > cl->version)
+ continue;
if (i > 0 && strcmp((*sq)->name, q->name))
- {
- sq++;
- count++;
- }
+ sq++;
*sq = q++;
}
- count++;
- qsort(squeries2, count, sizeof(struct query *), qcmp);
+ qcount = (sq - squeries) + 1;
+ qsort(squeries, qcount, sizeof(struct query *), qcmp);
}
- sq = squeries2;
+ sq = squeries;
qnp = qnames;
- for (i = count; --i >= 0; sq++)
+ for (i = qcount; --i >= 0; sq++)
{
sprintf(qnames, "%s (%s)", (*sq)->name, (*sq)->shortname);
(*action)(1, &qnp, actarg);