summaryrefslogtreecommitdiffstats
path: root/mdoc.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdoc.c')
-rw-r--r--mdoc.c28
1 files changed, 6 insertions, 22 deletions
diff --git a/mdoc.c b/mdoc.c
index a78bb5d0..91248872 100644
--- a/mdoc.c
+++ b/mdoc.c
@@ -511,24 +511,8 @@ static void
mdoc_node_free(struct mdoc_node *p)
{
- /*
- * XXX: if these end up being problematic in terms of memory
- * management and dereferencing freed blocks, then make them
- * into reference-counted double-pointers.
- */
-
- if (MDOC_Bd == p->tok && MDOC_BLOCK == p->type)
- if (p->data.Bd)
- free(p->data.Bd);
- if (MDOC_Bl == p->tok && MDOC_BLOCK == p->type)
- if (p->data.Bl)
- free(p->data.Bl);
- if (MDOC_Bf == p->tok && MDOC_HEAD == p->type)
- if (p->data.Bf)
- free(p->data.Bf);
- if (MDOC_An == p->tok)
- if (p->data.An)
- free(p->data.An);
+ if (p->norm && 0 == --(p->norm->refcnt))
+ free(p->norm);
if (p->string)
free(p->string);
@@ -624,7 +608,7 @@ mdoc_ptext(struct mdoc *m, int line, char *buf, int offs)
*/
if (MDOC_Bl == n->tok && MDOC_BODY == n->type &&
- LIST_column == n->data.Bl->type) {
+ LIST_column == n->norm->d.Bl.type) {
/* `Bl' is open without any children. */
m->flags |= MDOC_FREECOL;
return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf));
@@ -633,7 +617,7 @@ mdoc_ptext(struct mdoc *m, int line, char *buf, int offs)
if (MDOC_It == n->tok && MDOC_BLOCK == n->type &&
NULL != n->parent &&
MDOC_Bl == n->parent->tok &&
- LIST_column == n->parent->data.Bl->type) {
+ LIST_column == n->parent->norm->d.Bl.type) {
/* `Bl' has block-level `It' children. */
m->flags |= MDOC_FREECOL;
return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf));
@@ -814,7 +798,7 @@ mdoc_pmacro(struct mdoc *m, int ln, char *buf, int offs)
*/
if (MDOC_Bl == n->tok && MDOC_BODY == n->type &&
- LIST_column == n->data.Bl->type) {
+ LIST_column == n->norm->d.Bl.type) {
m->flags |= MDOC_FREECOL;
if ( ! mdoc_macro(m, MDOC_It, ln, sv, &sv, buf))
goto err;
@@ -830,7 +814,7 @@ mdoc_pmacro(struct mdoc *m, int ln, char *buf, int offs)
if (MDOC_It == n->tok && MDOC_BLOCK == n->type &&
NULL != n->parent &&
MDOC_Bl == n->parent->tok &&
- LIST_column == n->parent->data.Bl->type) {
+ LIST_column == n->parent->norm->d.Bl.type) {
m->flags |= MDOC_FREECOL;
if ( ! mdoc_macro(m, MDOC_It, ln, sv, &sv, buf))
goto err;