@@ -43,7 +43,7 @@ void bc_square_ex(bc_num n1, bc_num *result, size_t scale_min) {
43
43
/* Raise NUM1 to the NUM2 power. The result is placed in RESULT.
44
44
Maximum exponent is LONG_MAX. If a NUM2 is not an integer,
45
45
only the integer part is used. */
46
- void bc_raise (bc_num num1 , long exponent , bc_num * result , size_t scale ) {
46
+ bool bc_raise (bc_num num1 , long exponent , bc_num * result , size_t scale ) {
47
47
bc_num temp , power ;
48
48
size_t rscale ;
49
49
size_t pwrscale ;
@@ -54,7 +54,7 @@ void bc_raise(bc_num num1, long exponent, bc_num *result, size_t scale) {
54
54
if (exponent == 0 ) {
55
55
bc_free_num (result );
56
56
* result = bc_copy_num (BCG (_one_ ));
57
- return ;
57
+ return true ;
58
58
}
59
59
60
60
/* Other initializations. */
@@ -92,14 +92,20 @@ void bc_raise(bc_num num1, long exponent, bc_num *result, size_t scale) {
92
92
93
93
/* Assign the value. */
94
94
if (is_neg ) {
95
- bc_divide (BCG (_one_ ), temp , result , rscale );
95
+ // TODO: After removing bcpow's bc_init_num(), remove the NULL check
96
+ if (bc_divide (BCG (_one_ ), temp , result , rscale ) == false) {
97
+ bc_free_num (& temp );
98
+ bc_free_num (& power );
99
+ return false;
100
+ }
96
101
bc_free_num (& temp );
97
102
} else {
98
103
bc_free_num (result );
99
104
* result = temp ;
100
105
(* result )-> n_scale = MIN (scale , (* result )-> n_scale );
101
106
}
102
107
bc_free_num (& power );
108
+ return true;
103
109
}
104
110
105
111
/* This is used internally by BCMath */
0 commit comments