Hi tech,

like the XXX comment says, rcsnum_cmp() can be used instead of a *for* loop.
The following shows the original behavior:

$ co -r1.2 foo.txt,v
foo.txt,v  -->  foo.txt
revision 1.2
done

$ co -r1.1 foo.txt,v 
foo.txt,v  -->  foo.txt
revision 1.1
done

$ co foo.txt,v
foo.txt,v  -->  foo.txt
revision 1.2
done

The following shows the changed behavior:

$ co -r1.2 foo.txt,v 
foo.txt,v  -->  foo.txt
revision 1.2
done

$ co -r1.1 foo.txt,v
foo.txt,v  -->  foo.txt
revision 1.1
done

$ co foo.txt,v
foo.txt,v  -->  foo.txt
revision 1.2
done

Could some verify that I didn't miss a test case.

fritjof

Index: co.c
===================================================================
RCS file: /cvs/src/usr.bin/rcs/co.c,v
retrieving revision 1.119
diff -u -p -r1.119 co.c
--- co.c        10 Oct 2014 08:15:25 -0000      1.119
+++ co.c        23 Nov 2014 15:40:30 -0000
@@ -265,18 +265,14 @@ checkout_rev(RCSFILE *file, RCSNUM *frev
                (void)fprintf(stderr,
                    "no revisions present; generating empty revision 0.0\n");
 
-       /* XXX rcsnum_cmp()
+       /*
         * Check out the latest revision if <frev> is greater than HEAD
         */
        if (file->rf_ndelta != 0) {
-               for (i = 0; i < file->rf_head->rn_len; i++) {
-                       if (file->rf_head->rn_id[i] < frev->rn_id[i]) {
-                               frev = file->rf_head;
-                               break;
-                       }
-               }
+               if (rcsnum_cmp(file->rf_head, frev, 0) == 1)
+                       frev = file->rf_head;
        }
-
+       
        lcount = 0;
        TAILQ_FOREACH(lkp, &(file->rf_locks), rl_list) {
                if (!strcmp(lkp->rl_name, lockname))


Index: rcs.c
===================================================================
RCS file: /cvs/src/usr.bin/rcs/rcs.c,v
retrieving revision 1.81
diff -u -p -r1.81 rcs.c
--- rcs.c       10 Oct 2014 08:15:25 -0000      1.81
+++ rcs.c       23 Nov 2014 15:56:58 -0000
@@ -905,16 +905,15 @@ rcs_getrev(RCSFILE *rfp, RCSNUM *frev)
        else
                rev = frev;
 
-       /* XXX rcsnum_cmp() */
-       for (i = 0; i < rfp->rf_head->rn_len; i++) {
-               if (rfp->rf_head->rn_id[i] < rev->rn_id[i]) {
-                       rcs_errno = RCS_ERR_NOENT;
-                       return (NULL);
-               }
+       if(rcsnum_cmp(rfp->rf_head, rev, 0) == 1) {
+               rcs_errno = RCS_ERR_NOENT;
+               return (NULL);
        }
-
-       /* No matter what, we'll need everything parsed up until the description
-           so go for it. */
+       
+       /*
+        * No matter what, we'll need everything parsed up until the description
+        * so go for it.
+        */
        if (rcsparse_deltas(rfp, NULL))
                return (NULL);
 

Attachment: pgp7P8LDyEFuk.pgp
Description: PGP signature

Reply via email to