This static array is redundant wth the indesc_list structure, but is less flexible. Signed-off-by: Laurent Fasnacht <fasnacht@xxxxxxxxxxxxx> --- include/parser.h | 1 - src/scanner.l | 12 ++++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/include/parser.h b/include/parser.h index 949284d9..66db92d8 100644 --- a/include/parser.h +++ b/include/parser.h @@ -15,7 +15,6 @@ struct parser_state { struct input_descriptor *indesc; - struct input_descriptor *indescs[MAX_INCLUDE_DEPTH]; unsigned int indesc_idx; struct list_head indesc_list; diff --git a/src/scanner.l b/src/scanner.l index 37b01639..8397846b 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -668,19 +668,19 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr}) static void scanner_push_indesc(struct parser_state *state, struct input_descriptor *indesc) { - state->indescs[state->indesc_idx] = indesc; - state->indesc = state->indescs[state->indesc_idx++]; list_add_tail(&indesc->list, &state->indesc_list); + state->indesc = indesc; + state->indesc_idx++; } static void scanner_pop_indesc(struct parser_state *state) { state->indesc_idx--; - - if (state->indesc_idx > 0) - state->indesc = state->indescs[state->indesc_idx - 1]; - else + if (!list_empty(&state->indesc_list)) { + state->indesc = list_entry(state->indesc->list.prev, struct input_descriptor, list); + } else { state->indesc = NULL; + } } static void scanner_pop_buffer(yyscan_t scanner) -- 2.20.1