indesc->location.indesc->type != INDESC_INTERNAL) {
input_descriptor_destroy(indesc->location.indesc);
}
+ if (indesc->name)
+ xfree(indesc->name);
xfree(indesc);
}
indesc->location.indesc->type != INDESC_INTERNAL)
dup_indesc->location.indesc = input_descriptor_dup(indesc->location.indesc);
+ if (indesc->name)
+ dup_indesc->name = xstrdup(indesc->name);
+
return dup_indesc;
}
state->indesc = &state->indescs[state->indesc_idx++];
memcpy(state->indesc, indesc, sizeof(*state->indesc));
state->indesc->data = buffer;
+ state->indesc->name = NULL;
b = yy_scan_string(buffer, scanner);
assert(b != NULL);
{
struct parser_state *state = yyget_extra(scanner);
- /* Can't free indesc name - locations might still be in use */
- while (state->indesc_idx--)
+ do {
+ struct input_descriptor *inpdesc =
+ &state->indescs[state->indesc_idx];
+ if (inpdesc && inpdesc->name) {
+ xfree(inpdesc->name);
+ inpdesc->name = NULL;
+ }
yypop_buffer_state(scanner);
+ } while (state->indesc_idx--);
yylex_destroy(scanner);
}