}
}
+/**********************************************************************
+ * Reset commands (between tests)
+ */
+
+static void
+reset_cmds(const struct cmds *cmd)
+{
+
+ for (; cmd->name != NULL; cmd++)
+ cmd->cmd(NULL, NULL);
+}
+
/**********************************************************************
* Output test description
*/
static void
cmd_test(char **av, void *priv)
{
+
(void)priv;
+
+ if (av == NULL)
+ return;
assert(!strcmp(av[0], "test"));
printf("# TEST %s\n", av[1]);
cmd_dump(char **av, void *priv)
{
+ if (av == NULL)
+ return;
printf("cmd_dump(%p)\n", priv);
while (*av)
printf("\t<%s>\n", *av++);
buf = read_file(fn);
parse_string(buf, cmds, NULL);
printf("# TEST %s completed\n", fn);
+ reset_cmds(cmds);
}
/**********************************************************************
void
cmd_client(char **av, void *priv)
{
- struct client *c;
+ struct client *c, *c2;
(void)priv;
+
+ if (av == NULL) {
+ /* Reset and free */
+ VTAILQ_FOREACH_SAFE(c, &clients, list, c2) {
+ VTAILQ_REMOVE(&clients, c, list);
+ FREE_OBJ(c);
+ /* XXX: MEMLEAK */
+ }
+ return;
+ }
+
assert(!strcmp(av[0], "client"));
av++;
exit (1);
}
s->tp = NULL;
+ AZ(close(s->sock));
+ s->sock = -1;
}
/**********************************************************************
void
cmd_server(char **av, void *priv)
{
- struct server *s;
+ struct server *s, *s2;
(void)priv;
+
+ if (av == NULL) {
+ /* Reset and free */
+ VTAILQ_FOREACH_SAFE(s, &servers, list, s2) {
+ VTAILQ_REMOVE(&servers, s, list);
+ FREE_OBJ(s);
+ /* XXX: MEMLEAK */
+ }
+ return;
+ }
+
assert(!strcmp(av[0], "server"));
av++;