Commit 118c443a authored by Jan Maria Matejka's avatar Jan Maria Matejka
Browse files

Lexer: Passing the buffer to Flex directly.

parent 02297d3c
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -355,6 +355,12 @@ cf_free_state(struct cf_context *ctx, struct conf_state *cs)
  /* 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)
{
+2 −0
Original line number Diff line number Diff line
@@ -157,6 +157,8 @@ cli_parse(struct conf_order *order)

  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;
+2 −0
Original line number Diff line number Diff line
@@ -65,6 +65,8 @@ struct conf_order {
  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);
+3 −0
Original line number Diff line number Diff line
@@ -34,6 +34,9 @@ void cf_free_context(struct cf_context *);
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);

+2 −19
Original line number Diff line number Diff line
@@ -242,24 +242,8 @@ struct cli *this_cli;
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)
{
@@ -279,15 +263,14 @@ cli_command(struct cli *c)
    .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,
  };