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);
pgp7P8LDyEFuk.pgp
Description: PGP signature
