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);