diff options
| -rw-r--r-- | miscutils/bc.c | 15 | 
1 files changed, 11 insertions, 4 deletions
| diff --git a/miscutils/bc.c b/miscutils/bc.c index eaa28a94a..2da7c317c 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c @@ -5256,11 +5256,18 @@ exec_err:  static size_t bc_program_index(char *code, size_t *bgn)  { -	char amt = code[(*bgn)++], i = 0; -	size_t res = 0; +	unsigned char *bytes = (void*)(code + *bgn); +	unsigned amt; +	unsigned i; +	size_t res; + +	amt = *bytes++; +	*bgn += amt + 1; -	for (; i < amt; ++i, ++(*bgn)) -		res |= (((size_t)((int) code[*bgn]) & UCHAR_MAX) << (i * CHAR_BIT)); +	amt *= 8; +	res = 0; +	for (i = 0; i < amt; i += 8) +		res |= (size_t)(*bytes++) << i;  	return res;  } | 
