posix commands (like ls(1) for example) keep the last option when mutually 
exclusive options are specified. does it make sense to keep rcs consistent with 
that convention? also is a man page diff needed?


> On Oct 1, 2014, at 7:17 PM, Nicholas Marriott <nicholas.marri...@gmail.com> 
> wrote:
> 
> 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);
> 

Reply via email to