@@ -256,7 +256,8 @@ static void bc_do_div(
256
256
const char * numerator , size_t numerator_size , size_t numerator_readable_size ,
257
257
const char * divisor , size_t divisor_size ,
258
258
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
260
261
) {
261
262
size_t numerator_arr_size = (numerator_size + BC_VECTOR_SIZE - 1 ) / BC_VECTOR_SIZE ;
262
263
size_t divisor_arr_size = (divisor_size + BC_VECTOR_SIZE - 1 ) / BC_VECTOR_SIZE ;
@@ -290,6 +291,18 @@ static void bc_do_div(
290
291
char * qend = qptr + (* quot )-> n_len + (* quot )-> n_scale - 1 ;
291
292
bc_convert_vector_to_char (qptr , qend , quot_vectors , quot_real_arr_size );
292
293
}
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
+ }
293
306
294
307
efree (numerator_vectors );
295
308
}
@@ -512,7 +525,9 @@ bool bc_divide_ex(bc_num numerator, bc_num divisor, bc_num *quot, bc_num *rem, s
512
525
bc_do_div (
513
526
numeratorptr , numerator_size , numerator_readable_size ,
514
527
divisorptr , divisor_size ,
515
- quot , quot_size
528
+ quot , quot_size ,
529
+ rem , rem_over_size , rem_write_size ,
530
+ use_quot , use_rem
516
531
);
517
532
518
533
if (use_quot ) {
0 commit comments