=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/tbl_layout.c,v retrieving revision 1.21 retrieving revision 1.22 diff -c -r1.21 -r1.22 *** src/usr.bin/mandoc/tbl_layout.c 2015/01/28 15:02:25 1.21 --- src/usr.bin/mandoc/tbl_layout.c 2015/01/30 00:27:09 1.22 *************** *** 1,4 **** ! /* $OpenBSD: tbl_layout.c,v 1.21 2015/01/28 15:02:25 schwarze Exp $ */ /* * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2012, 2014, 2015 Ingo Schwarze --- 1,4 ---- ! /* $OpenBSD: tbl_layout.c,v 1.22 2015/01/30 00:27:09 schwarze Exp $ */ /* * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2012, 2014, 2015 Ingo Schwarze *************** *** 260,270 **** */ if (tbl->first_row == NULL) { mandoc_msg(MANDOCERR_TBLLAYOUT_NONE, tbl->parse, ln, pos, NULL); ! rp = mandoc_calloc(1, sizeof(*rp)); ! cell_alloc(tbl, rp, TBL_CELL_LEFT); ! tbl->first_row = tbl->last_row = rp; return; } --- 260,273 ---- */ if (tbl->first_row == NULL) { + tbl->first_row = tbl->last_row = + mandoc_calloc(1, sizeof(*rp)); + } + if (tbl->first_row->first == NULL) { mandoc_msg(MANDOCERR_TBLLAYOUT_NONE, tbl->parse, ln, pos, NULL); ! cell_alloc(tbl, tbl->first_row, ! TBL_CELL_LEFT); return; } *************** *** 280,298 **** rp->last->head == tbl->last_head && tbl->opts.rvert < rp->last->vert) tbl->opts.rvert = rp->last->vert; } return; default: /* Cell. */ break; } ! if (rp == NULL) { /* First cell on this line. */ ! rp = mandoc_calloc(1, sizeof(*rp)); ! if (tbl->last_row) ! tbl->last_row->next = rp; ! else ! tbl->first_row = rp; ! tbl->last_row = rp; } cell(tbl, rp, ln, p, &pos); } --- 283,318 ---- rp->last->head == tbl->last_head && tbl->opts.rvert < rp->last->vert) tbl->opts.rvert = rp->last->vert; + + /* If the last line is empty, drop it. */ + + if (rp->next != NULL && + rp->next->first == NULL) { + free(rp->next); + rp->next = NULL; + } } return; default: /* Cell. */ break; } ! /* ! * If the last line had at least one cell, ! * start a new one; otherwise, continue it. ! */ ! ! if (rp == NULL) { ! if (tbl->last_row == NULL || ! tbl->last_row->first != NULL) { ! rp = mandoc_calloc(1, sizeof(*rp)); ! if (tbl->last_row) ! tbl->last_row->next = rp; ! else ! tbl->first_row = rp; ! tbl->last_row = rp; ! } else ! rp = tbl->last_row; } cell(tbl, rp, ln, p, &pos); }