Skip to content

Commit c63c1bf

Browse files
committed
Using rem in bc_do_div
1 parent 3e29c7e commit c63c1bf

File tree

1 file changed

+22
-2
lines changed
  • ext/bcmath/libbcmath/src

1 file changed

+22
-2
lines changed

ext/bcmath/libbcmath/src/div.c

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,8 @@ static void bc_do_div(
256256
const char *numerator, size_t numerator_size, size_t numerator_readable_size,
257257
const char *divisor, size_t divisor_size,
258258
bc_num *quot, size_t quot_size,
259-
bool use_quot
259+
bc_num *rem, size_t rem_over_size, size_t rem_write_size,
260+
bool use_quot, bool use_rem
260261
) {
261262
size_t numerator_arr_size = BC_ARR_SIZE_FROM_LEN(numerator_size);
262263
size_t divisor_arr_size = BC_ARR_SIZE_FROM_LEN(divisor_size);
@@ -298,6 +299,23 @@ static void bc_do_div(
298299
char *qend = qptr + (*quot)->n_len + (*quot)->n_scale - 1;
299300
bc_convert_vector_to_char(quot_vectors, qptr, qend, quot_real_arr_size);
300301
}
302+
if (use_rem) {
303+
char *rptr = (*rem)->n_value;
304+
char *rend = rptr + rem_write_size - 1;
305+
306+
size_t rem_arr_size = (rem_write_size + rem_over_size + BC_VECTOR_SIZE - 1) / BC_VECTOR_SIZE;
307+
if (UNEXPECTED(rem_arr_size > numerator_arr_size)) {
308+
rem_arr_size = numerator_arr_size;
309+
*rptr = 0;
310+
}
311+
BC_VECTOR *rem_vectors = numerator_vectors;
312+
313+
if (rem_over_size > 0) {
314+
bc_convert_vector_to_char_with_skip(rem_vectors, rptr, rend, rem_arr_size, rem_over_size);
315+
} else {
316+
bc_convert_vector_to_char(rem_vectors, rptr, rend, rem_arr_size);
317+
}
318+
}
301319

302320
if (allocation_arr_size > BC_STACK_VECTOR_SIZE) {
303321
efree(numerator_vectors);
@@ -524,7 +542,9 @@ bool bc_divide_ex(bc_num numerator, bc_num divisor, bc_num *quot, bc_num *rem, s
524542
bc_do_div(
525543
numeratorptr, numerator_size, numerator_readable_size,
526544
divisorptr, divisor_size,
527-
quot, quot_size
545+
quot, quot_size,
546+
rem, rem_over_size, rem_write_size,
547+
use_quot, use_rem
528548
);
529549

530550
if (use_quot) {

0 commit comments

Comments
 (0)