/* The state structure is allocated from linpool, will be auto-freed. */
}
+void
+cf_scan_bytes(struct cf_context *ctx, const char *buf, uint len)
+{
+ yy_scan_bytes(buf, len, ctx->yyscanner);
+}
+
static void
cf_include(char *arg, int alen, yyscan_t yyscanner)
{
struct cf_context *ctx = cf_new_context(1, order);
+ cf_scan_bytes(ctx, order->buf, order->len);
+
int ok = 0;
if (setjmp(ctx->jmpbuf))
goto done;
struct conf_state *state;
struct pool *pool; /* If set, use this resource pool */
struct linpool *lp; /* If set, use this linpool */
+ const char *buf;
+ uint len;
int (*cf_read_hook)(struct conf_order *order, byte *buf, uint max);
void (*cf_include)(struct conf_order *order, char *name, uint len);
int (*cf_outclude)(struct conf_order *order);
struct conf_state *cf_new_state(struct cf_context *ctx, const char *name);
void cf_free_state(struct cf_context *ctx, struct conf_state *cs);
+/* Lexer input is a memory buffer */
+void cf_scan_bytes(struct cf_context *, const char *, uint);
+
/* Init keyword hash is called once from global init */
void cf_init_kh(void);
struct cli_conf_order {
struct conf_order co;
struct cli *cli;
- const char *pos;
- uint len;
};
-static int
-cli_cmd_read_hook(struct conf_order *co, byte *buf, uint max)
-{
- struct cli_conf_order *cco = (struct cli_conf_order *) co;
-
- if (max > cco->len)
- max = cco->len;
-
- memcpy(buf, cco->pos, cco->len);
- cco->pos += max;
- cco->len -= max;
- return max;
-}
-
static void
cli_cmd_error(struct conf_order *co, const char *msg, va_list args)
{
.co = {
.ctx = NULL,
.state = &state,
- .cf_read_hook = cli_cmd_read_hook,
+ .buf = c->rx_buf,
+ .len = strlen(c->rx_buf),
.cf_include = NULL,
.cf_outclude = NULL,
.cf_error = cli_cmd_error,
.lp = c->parser_pool,
.pool = c->pool,
},
- .pos = c->rx_buf,
- .len = strlen(c->rx_buf),
.cli = c,
};