- Commit
- ca1e1cde8693b16907efe19b2b9ea9d61dbf3129
- Parent
- 715d1a5921a4e3e10220d466c4ee2c1261d28c1e
- Author
- John MacFarlane <jgm@berkeley.edu>
- Date
Made cmark_free_nodes non-recursive.
See #187.
My personal build of CMark ✏️
Made cmark_free_nodes non-recursive.
See #187.
1 file changed, 13 insertions, 2 deletions
Status | File Name | N° Changes | Insertions | Deletions |
Modified | src/blocks.c | 15 | 13 | 2 |
diff --git a/src/blocks.c b/src/blocks.c @@ -252,12 +252,13 @@ static node_block* add_child(node_block* parent, return child; } + // Free a node_block list and any children. void cmark_free_nodes(node_block *e) { node_block * next; + node_block * tmp; while (e != NULL) { - next = e->next; free_inlines(e->inline_content); strbuf_free(&e->string_content); if (e->tag == BLOCK_FENCED_CODE) { @@ -265,7 +266,17 @@ void cmark_free_nodes(node_block *e) } else if (e->tag == BLOCK_DOCUMENT) { reference_map_free(e->as.document.refmap); } - cmark_free_nodes(e->children); + tmp = e->children; + if (tmp) { + // Find last child + while (tmp->next) { + tmp = tmp->next; + } + // Splice children into list + tmp->next = e->next; + e->next = e->children; + } + next = e->next; free(e); e = next; }