/* Basic config file structure */
config: conf_entries END { return 0; }
- | CLI_MARKER cli_cmd END { return 0; }
+ | CLI_MARKER cli_cmd { return 0; }
;
conf_entries:
m4_define(CF_CLI, `m4_define([[CF_cmd]], cmd_[[]]m4_translit($1, [[ ]], _))DNL
m4_divert(2)CF_KEYWORDS(m4_translit($1, [[ ]], [[,]]))
m4_divert(3)CF_ADDTO(cli_cmd, CF_cmd)
-CF_cmd: $1 ')
+CF_cmd: $1 $2 END')
+m4_define(CF_CLI_HELP, `')
# ENUM declarations are ignored
m4_define(CF_ENUM, `')
c->event->data = c;
c->tx_buf = c->tx_pos = c->tx_write = NULL;
c->cont = cli_hello;
+ c->cleanup = NULL;
c->last_reply = 0;
c->parser_pool = lp_new(c->pool, 4096);
ev_schedule(c->event);
void
cli_free(cli *c)
{
+ if (c->cleanup)
+ c->cleanup(c);
rfree(c->pool);
}
struct cli_out *tx_buf, *tx_pos, *tx_write;
event *event;
void (*cont)(struct cli *c);
+ void (*cleanup)(struct cli *c);
void *rover; /* Private to continuation routine */
int last_reply;
struct linpool *parser_pool; /* Pool used during parsing */