bc: simplify bc_program_print()
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 10 Dec 2018 11:33:40 +0000 (12:33 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 10 Dec 2018 11:33:40 +0000 (12:33 +0100)
function                                             old     new   delta
bc_program_print                                     730     713     -17

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
miscutils/bc.c

index 33abe9366cd0251a4df7f2989a52af7a875f47aa..1879581e37658adb7f5b88bacbb66f867eb1de84 100644 (file)
@@ -5737,15 +5737,14 @@ static BcStatus bc_program_print(char inst, size_t idx)
 {
        BcStatus s = BC_STATUS_SUCCESS;
        BcResult *r;
-       size_t len, i;
-       char *str;
-       BcNum *num = NULL;
+       BcNum *num;
        bool pop = inst != BC_INST_PRINT;
 
        if (!BC_PROG_STACK(&G.prog.results, idx + 1))
                return bc_error_stack_has_too_few_elements();
 
        r = bc_vec_item_rev(&G.prog.results, idx);
+       num = NULL; // is this NULL necessary?
        s = bc_program_num(r, &num, false);
        if (s) return s;
 
@@ -5754,16 +5753,18 @@ static BcStatus bc_program_print(char inst, size_t idx)
                if (!s) bc_num_copy(&G.prog.last, num);
        }
        else {
+               char *str;
 
                idx = (r->t == BC_RESULT_STR) ? r->d.id.idx : num->rdx;
                str = *bc_program_str(idx);
 
                if (inst == BC_INST_PRINT_STR) {
-                       for (i = 0, len = strlen(str); i < len; ++i) {
-                               char c = str[i];
+                       for (;;) {
+                               char c = *str++;
+                               if (c == '\0') break;
                                bb_putchar(c);
-                               if (c == '\n') G.prog.nchars = SIZE_MAX;
                                ++G.prog.nchars;
+                               if (c == '\n') G.prog.nchars = 0;
                        }
                }
                else {