diff options
-rw-r--r-- | miscutils/bc.c | 17 |
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 | ||
1414 | static BcStatus bc_num_ulong(BcNum *n, unsigned long *result) | 1414 | static 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) |