From 06fa65bd95455e97d2275ee4d74167f9bfd251c0 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 5 Dec 2018 19:00:58 +0100 Subject: bc: move ^C check fro power calculation to multiplication function old new delta bc_num_k 971 990 +19 bc_num_p 507 478 -29 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 19/-29) Total: -10 bytes Signed-off-by: Denys Vlasenko --- miscutils/bc.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'miscutils/bc.c') diff --git a/miscutils/bc.c b/miscutils/bc.c index ea200ebda..07793e9d4 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c @@ -1676,6 +1676,10 @@ static BcStatus bc_num_k(BcNum *restrict a, BcNum *restrict b, c->num[i + j] += (BcDig) carry; len = BC_MAX(len, i + j + !!carry); + + // a=2^1000000 + // a*a <- without check below, this will not be interruptible + if (G_interrupt) return BC_STATUS_FAILURE; } c->len = len; @@ -1935,11 +1939,11 @@ static BcStatus bc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size_t scale) powrdx <<= 1; s = bc_num_mul(©, ©, ©, powrdx); if (s) goto err; - // It is too slow to handle ^C only after entire "2^1000000" completes - if (G_interrupt) { - s = BC_STATUS_FAILURE; - goto err; - } + // Not needed: bc_num_mul() has a check for ^C: + //if (G_interrupt) { + // s = BC_STATUS_FAILURE; + // goto err; + //} } bc_num_copy(c, ©); @@ -1955,11 +1959,11 @@ static BcStatus bc_num_p(BcNum *a, BcNum *b, BcNum *restrict c, size_t scale) s = bc_num_mul(c, ©, c, resrdx); if (s) goto err; } - // It is too slow to handle ^C only after entire "2^1000000" completes - if (G_interrupt) { - s = BC_STATUS_FAILURE; - goto err; - } + // Not needed: bc_num_mul() has a check for ^C: + //if (G_interrupt) { + // s = BC_STATUS_FAILURE; + // goto err; + //} } if (neg) { -- cgit v1.2.3