summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Williams <andy@andywilliams.me>2016-05-16 11:01:12 +0100
committerAndy Williams <andy@andywilliams.me>2016-05-16 11:01:12 +0100
commitb1cc9c787683e3c4d538018547e273f96401ba4c (patch)
tree21bc9294fe0e722bec32e33b4926b78baf6b0d6d
parent828bfb4d272bbb064a4a4b0b4eef03bfb9061425 (diff)
downloadefl-b1cc9c787683e3c4d538018547e273f96401ba4c.tar.gz
[elm_code] don't double free standard parsers
-rw-r--r--legacy/elm_code/src/lib/elm_code.c2
-rw-r--r--legacy/elm_code/src/lib/elm_code_parse.c12
-rw-r--r--legacy/elm_code/src/lib/elm_code_private.h1
3 files changed, 14 insertions, 1 deletions
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);
}
@@ -186,6 +189,15 @@ _elm_code_parser_todo_parse_line(Elm_Code_Line *line, void *data EINA_UNUSED)
}
void
+_elm_code_parser_free(Elm_Code_Parser *parser)
+{
+ if (parser->standard)
+ return;
+
+ free(parser);
+}
+
+void
_elm_code_parse_setup()
{
ELM_CODE_PARSER_STANDARD_DIFF = _elm_code_parser_new(_elm_code_parser_diff_parse_line,
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