From b1cc9c787683e3c4d538018547e273f96401ba4c Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Mon, 16 May 2016 11:01:12 +0100 Subject: [PATCH] [elm_code] don't double free standard parsers --- legacy/elm_code/src/lib/elm_code.c | 2 +- legacy/elm_code/src/lib/elm_code_parse.c | 12 ++++++++++++ legacy/elm_code/src/lib/elm_code_private.h | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/legacy/elm_code/src/lib/elm_code.c b/legacy/elm_code/src/lib/elm_code.c index 782830ca9e..598f928622 100644 --- a/legacy/elm_code/src/lib/elm_code.c +++ b/legacy/elm_code/src/lib/elm_code.c @@ -95,7 +95,7 @@ elm_code_free(Elm_Code *code) EINA_LIST_FREE(code->parsers, parser) { - free(parser); + _elm_code_parser_free(parser); } free(code); diff --git a/legacy/elm_code/src/lib/elm_code_parse.c b/legacy/elm_code/src/lib/elm_code_parse.c index 87627f75ef..f7fd97ee77 100644 --- a/legacy/elm_code/src/lib/elm_code_parse.c +++ b/legacy/elm_code/src/lib/elm_code_parse.c @@ -13,6 +13,7 @@ struct _Elm_Code_Parser void (*parse_file)(Elm_Code_File *, void *); void *data; + Eina_Bool standard; }; @@ -69,6 +70,7 @@ _elm_code_parser_new(void (*parse_line)(Elm_Code_Line *, void *), parser->parse_line = parse_line; parser->parse_file = parse_file; + parser->standard = EINA_FALSE; return parser; } @@ -95,6 +97,7 @@ elm_code_parser_standard_add(Elm_Code *code, Elm_Code_Parser *parser) if (!parser || !code) return; + parser->standard = EINA_TRUE; code->parsers = eina_list_append(code->parsers, parser); } @@ -185,6 +188,15 @@ _elm_code_parser_todo_parse_line(Elm_Code_Line *line, void *data EINA_UNUSED) elm_code_line_status_set(line, ELM_CODE_STATUS_TYPE_TODO); } +void +_elm_code_parser_free(Elm_Code_Parser *parser) +{ + if (parser->standard) + return; + + free(parser); +} + void _elm_code_parse_setup() { diff --git a/legacy/elm_code/src/lib/elm_code_private.h b/legacy/elm_code/src/lib/elm_code_private.h index 372f78c02e..39f89bdd5e 100644 --- a/legacy/elm_code/src/lib/elm_code_private.h +++ b/legacy/elm_code/src/lib/elm_code_private.h @@ -34,5 +34,6 @@ void _elm_code_parse_file(Elm_Code *code, Elm_Code_File *file); void _elm_code_parse_reset_file(Elm_Code *code, Elm_Code_File *file); +void _elm_code_parser_free(Elm_Code_Parser *parser); #endif