@@ -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 = (numerator_size + BC_VECTOR_SIZE - 1 ) / BC_VECTOR_SIZE ;
262263 size_t divisor_arr_size = (divisor_size + BC_VECTOR_SIZE - 1 ) / BC_VECTOR_SIZE ;
@@ -290,6 +291,18 @@ static void bc_do_div(
290291 char * qend = qptr + (* quot )-> n_len + (* quot )-> n_scale - 1 ;
291292 bc_convert_vector_to_char (qptr , qend , quot_vectors , quot_real_arr_size );
292293 }
294+ if (use_rem ) {
295+ size_t rem_arr_size = (rem_write_size + rem_over_size + BC_VECTOR_SIZE - 1 ) / BC_VECTOR_SIZE ;
296+ BC_VECTOR * rem_vectors = numerator_vectors ;
297+
298+ char * rptr = (* rem )-> n_value ;
299+ char * rend = rptr + rem_write_size - 1 ;
300+ if (rem_over_size > 0 ) {
301+ bc_convert_vector_to_char_with_skip (rptr , rend , rem_vectors , rem_arr_size , rem_over_size );
302+ } else {
303+ bc_convert_vector_to_char (rptr , rend , rem_vectors , rem_arr_size );
304+ }
305+ }
293306
294307 efree (numerator_vectors );
295308}
@@ -512,7 +525,9 @@ bool bc_divide_ex(bc_num numerator, bc_num divisor, bc_num *quot, bc_num *rem, s
512525 bc_do_div (
513526 numeratorptr , numerator_size , numerator_readable_size ,
514527 divisorptr , divisor_size ,
515- quot , quot_size
528+ quot , quot_size ,
529+ rem , rem_over_size , rem_write_size ,
530+ use_quot , use_rem
516531 );
517532
518533 if (use_quot ) {
0 commit comments