On Wed, Jun 22, 2016 at 09:07:03AM -0600, Todd C. Miller wrote: > On Wed, 22 Jun 2016 12:21:56 +0200, Joris Vink wrote: > > Index: rcs.c > > =================================================================== > > RCS file: /cvs/src/usr.bin/cvs/rcs.c,v > > retrieving revision 1.313 > > diff -u -p -r1.313 rcs.c > > --- rcs.c 5 Nov 2015 09:48:21 -0000 1.313 > > +++ rcs.c 22 Jun 2016 09:52:04 -0000 > > @@ -1796,17 +1796,13 @@ rcs_rev_getlines(RCSFILE *rfp, RCSNUM *f > > > > again: > > for (;;) { > > + if (rdp == NULL) > > + break; > > Wouldn't this be easier to read as: > > while (rdp != NULL) {
Yes, updated diff below. .joris Index: rcs.c =================================================================== RCS file: /cvs/src/usr.bin/cvs/rcs.c,v retrieving revision 1.313 diff -u -p -r1.313 rcs.c --- rcs.c 5 Nov 2015 09:48:21 -0000 1.313 +++ rcs.c 22 Jun 2016 15:13:14 -0000 @@ -1795,18 +1795,11 @@ rcs_rev_getlines(RCSFILE *rfp, RCSNUM *f goto done; again: - for (;;) { + while (rdp != NULL) { if (rdp->rd_next->rn_len != 0) { trdp = rcs_findrev(rfp, rdp->rd_next); if (trdp == NULL) fatal("failed to grab next revision"); - } else { - /* - * XXX Fail, although the caller does not always do the - * right thing (eg cvs diff when the tree is ahead of - * the repository). - */ - break; } if (rdp->rd_tlen == 0) { @@ -1857,7 +1850,7 @@ again: } next: - if (!rcsnum_differ(rdp->rd_num, frev)) + if (rdp == NULL || !rcsnum_differ(rdp->rd_num, frev)) done = 1; if (RCSNUM_ISBRANCHREV(frev) && done != 1) { @@ -2045,6 +2038,7 @@ rcs_rev_getbuf(RCSFILE *rfp, RCSNUM *rev struct rcs_delta *rdp; struct rcs_lines *lines; struct rcs_line *lp, *nlp; + char version[RCSNUM_MAXSTR]; BUF *bp; rdp = NULL; @@ -2057,8 +2051,12 @@ rcs_rev_getbuf(RCSFILE *rfp, RCSNUM *rev expmode = rcs_kwexp_get(rfp); if (!(expmode & RCS_KWEXP_NONE)) { - if ((rdp = rcs_findrev(rfp, rev)) == NULL) - fatal("could not fetch revision"); + if ((rdp = rcs_findrev(rfp, rev)) == NULL) { + rcsnum_tostr(rev, version, sizeof(version)); + fatal("could not find desired version %s in %s", + version, rfp->rf_path); + } + expand = 1; } }