aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--miscutils/bc.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index 685427e58..9eafa80e9 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -1411,23 +1411,26 @@ static void bc_num_copy(BcNum *d, BcNum *s)
1411 } 1411 }
1412} 1412}
1413 1413
1414static BcStatus bc_num_ulong(BcNum *n, unsigned long *result) 1414static BcStatus bc_num_ulong(BcNum *n, unsigned long *result_p)
1415{ 1415{
1416 size_t i; 1416 size_t i;
1417 unsigned long pow; 1417 unsigned long pow, result;
1418 1418
1419 if (n->neg) return bc_error("negative number"); 1419 if (n->neg) return bc_error("negative number");
1420 1420
1421 for (*result = 0, pow = 1, i = n->rdx; i < n->len; ++i) { 1421 for (result = 0, pow = 1, i = n->rdx; i < n->len; ++i) {
1422 1422
1423 unsigned long prev = *result, powprev = pow; 1423 unsigned long prev = result, powprev = pow;
1424 1424
1425 *result += ((unsigned long) n->num[i]) * pow; 1425 result += ((unsigned long) n->num[i]) * pow;
1426 pow *= 10; 1426 pow *= 10;
1427 1427
1428 if (*result < prev || pow < powprev) 1428 if (result < prev || pow < powprev)
1429 return bc_error("overflow"); 1429 return bc_error("overflow");
1430 prev = result;
1431 powprev = pow;
1430 } 1432 }
1433 *result_p = result;
1431 1434
1432 return BC_STATUS_SUCCESS; 1435 return BC_STATUS_SUCCESS;
1433} 1436}
@@ -5855,7 +5858,6 @@ static BcStatus bc_program_assign(char inst)
5855 BcStatus s; 5858 BcStatus s;
5856 BcResult *left, *right, res; 5859 BcResult *left, *right, res;
5857 BcNum *l = NULL, *r = NULL; 5860 BcNum *l = NULL, *r = NULL;
5858 unsigned long val, max;
5859 bool assign = inst == BC_INST_ASSIGN, ib, sc; 5861 bool assign = inst == BC_INST_ASSIGN, ib, sc;
5860 5862
5861 s = bc_program_binOpPrep(&left, &l, &right, &r, assign); 5863 s = bc_program_binOpPrep(&left, &l, &right, &r, assign);
@@ -5909,6 +5911,7 @@ static BcStatus bc_program_assign(char inst)
5909 "bad obase; must be [2, BC_BASE_MAX]", //BC_RESULT_OBASE 5911 "bad obase; must be [2, BC_BASE_MAX]", //BC_RESULT_OBASE
5910 }; 5912 };
5911 size_t *ptr; 5913 size_t *ptr;
5914 unsigned long val, max;
5912 5915
5913 s = bc_num_ulong(l, &val); 5916 s = bc_num_ulong(l, &val);
5914 if (s) 5917 if (s)