The existing behaviour isn't wildly useful, makes sense to me, ok nicm
On Wed, Oct 01, 2014 at 11:33:33PM +0200, Fritjof Bornebusch wrote: > Hi tech, > > the OpenRCS rcs command produces the following output if -l and -u is > used in the same command: > > $ rcs -l1.1 -u1.1 foo.txt > RCS file: foo.txt,v > 1.1 locked > 1.1 unlocked > > $ rcs -u1.1 -l1.1 foo.txt > RCS file: foo.txt,v > 1.1 locked > 1.1 unlocked > > I've looked at GnuRCS and it has another way to handle these parameters > (it seems the other BSDs use GnuRCS, too). > > Debian 7.5: > $ rcs -l1.1 -u1.1 foo.txt > RCS file: foo.txt,v > rcs: foo.txt,v: no lock set on revision 1.1 > 1.1 locked > > $ rcs -u1.1 -l1.1 foo.txt > Segmentation fault > > Well, I think the "Segmentation fault" isn't that important :), but GnuRCS > does not lock and unlock a file by using the same command like OpenRCS. > > I think the different implementations of RCS should share the same > behaviour: > > $ rcs -l1.1 -u1.1 foo.txt > RCS file: foo.txt,v > 1.1 locked > done > > $ rcs -u1.1 -l1.1 foo.txt > RCS file: foo.txt,v > 1.1 unlocked > done > > fritjof > > > Index: rcsprog.c > =================================================================== > RCS file: /cvs/src/usr.bin/rcs/rcsprog.c,v > retrieving revision 1.151 > diff -u -p -r1.151 rcsprog.c > --- rcsprog.c 12 Jul 2011 21:00:32 -0000 1.151 > +++ rcsprog.c 3 Aug 2014 15:42:34 -0000 > @@ -234,9 +234,10 @@ rcs_main(int argc, char **argv) > lkmode = RCS_LOCK_STRICT; > break; > case 'l': > - /* XXX - Check with -u flag. */ > - lrev = rcs_optarg; > - rcsflags |= RCSPROG_LFLAG; > + if (!(rcsflags & RCSPROG_UFLAG)) { > + lrev = rcs_optarg; > + rcsflags |= RCSPROG_LFLAG; > + } > break; > case 'm': > if (logstr != NULL) > @@ -272,9 +273,10 @@ rcs_main(int argc, char **argv) > lkmode = RCS_LOCK_LOOSE; > break; > case 'u': > - /* XXX - Check with -l flag. */ > - urev = rcs_optarg; > - rcsflags |= RCSPROG_UFLAG; > + if (!(rcsflags & RCSPROG_LFLAG)) { > + urev = rcs_optarg; > + rcsflags |= RCSPROG_UFLAG; > + } > break; > case 'V': > printf("%s\n", rcs_version);