Hi tech,

I noticed that atoi(3)/expr() is called within min() macro.
Both atoi(3) and expr() return int.
Store result in temporary variable so we don't call the function twice?

- Michael


Index: eval.c
===================================================================
RCS file: /cvs/src/usr.bin/m4/eval.c,v
retrieving revision 1.74
diff -u -p -u -r1.74 eval.c
--- eval.c      5 Feb 2015 12:59:57 -0000       1.74
+++ eval.c      5 Aug 2016 06:24:57 -0000
@@ -871,12 +871,15 @@ dosub(const char *argv[], int argc)
        fc = ap + atoi(argv[3]);       /* first char */
 #endif
        nc = strlen(fc);
-       if (argc >= 5)
+       if (argc >= 5) {
+               int e;
 #ifdef EXPR
-               nc = min(nc, expr(argv[4]));
+               e = expr(argv[4]);
 #else
-               nc = min(nc, atoi(argv[4]));
+               e = atoi(argv[4]);
 #endif
+               nc = min(nc, e);
+       }
        if (fc >= ap && fc < ap + strlen(ap))
                for (k = fc + nc - 1; k >= fc; k--)
                        pushback(*k);

Reply via email to