Setting the "last" member of struct roff_node was done at an extremely
authorschwarze <schwarze@openbsd.org>
Fri, 1 May 2015 16:01:53 +0000 (16:01 +0000)
committerschwarze <schwarze@openbsd.org>
Fri, 1 May 2015 16:01:53 +0000 (16:01 +0000)
weird place.  Move it to the obviously correct place.
Surprisingly, this didn't cause any misformatting in the test suite
or in any base system manuals, but i cannot believe the code was
really correct for all conceivable input, and it would be very hard
to verify.  At the very least, it cannot have worked for man(7).

usr.bin/mandoc/mdoc_macro.c
usr.bin/mandoc/roff.c

index fb33821..eb1630a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: mdoc_macro.c,v 1.154 2015/05/01 15:27:17 schwarze Exp $ */
+/*     $OpenBSD: mdoc_macro.c,v 1.155 2015/05/01 16:01:53 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -256,7 +256,7 @@ lookup(struct roff_man *mdoc, int from, int line, int ppos, const char *p)
 static void
 rew_last(struct roff_man *mdoc, const struct roff_node *to)
 {
-       struct roff_node *n, *np;
+       struct roff_node        *np;
 
        if (to->flags & MDOC_VALID)
                return;
@@ -271,10 +271,8 @@ rew_last(struct roff_man *mdoc, const struct roff_node *to)
                 */
                np = mdoc->last->parent;
                mdoc_valid_post(mdoc);
-               n = mdoc->last;
                mdoc->last = np;
                assert(mdoc->last);
-               mdoc->last->last = n;
        }
        mdoc_valid_post(mdoc);
 }
index d82eb79..f99246a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: roff.c,v 1.141 2015/04/23 16:17:04 schwarze Exp $ */
+/*     $OpenBSD: roff.c,v 1.142 2015/05/01 16:01:53 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -1020,6 +1020,7 @@ roff_node_append(struct roff_man *man, struct roff_node *n)
                /* NOTREACHED */
        }
        n->parent->nchild++;
+       n->parent->last = n;
 
        /*
         * Copy over the normalised-data pointer of our parent.  Not