]> diplodocus.org Git - nmh/commitdiff
Don't test -reverse's boolean on every message number.
authorRalph Corderoy <ralph@inputplus.co.uk>
Sun, 16 Oct 2016 14:25:37 +0000 (15:25 +0100)
committerRalph Corderoy <ralph@inputplus.co.uk>
Sun, 16 Oct 2016 14:25:37 +0000 (15:25 +0100)
Test just once before the loop and define start, end, and increment.
Keep going whilst start is not end.  Happy for underflow or overflow in
calculating end because msgnum will make the same transition.  It can't
affect whether the loop runs at all since 0 is not a valid message
number.

uip/pick.c

index fba190a250abb35b124ae582ce37f2f21ec61556..fb339d46e6731f6f7e2015246a0a5d571df5f1ef 100644 (file)
@@ -69,6 +69,7 @@ main (int argc, char **argv)
     register FILE *fp;
     int debug = 0;
     int reverse = 0;
+    int start, end, inc;
 
     if (nmh_init(argv[0], 1)) { return 1; }
 
@@ -237,9 +238,16 @@ main (int argc, char **argv)
      * match.  If there is NOT a match, then add it to a list to
      * remove from the final sequence (it will make sense later)
      */
-    for (msgnum = reverse ? mp->hghsel : mp->lowsel;
-         reverse ? msgnum >= mp->lowsel : msgnum <= mp->hghsel;
-         msgnum += reverse ? -1 : 1) {
+    if (!reverse) { /* Overflow or underflow is fine. */
+        start = mp->lowsel;
+        end = mp->hghsel + 1;
+        inc = 1;
+    } else {
+        start = mp->hghsel;
+        end = mp->lowsel - 1;
+        inc = -1;
+    }
+    for (msgnum = start; msgnum != end; msgnum += inc) {
        if (is_selected (mp, msgnum)) {
            if ((fp = fopen (cp = m_name (msgnum), "r")) == NULL)
                admonish (cp, "unable to read message");