Skip to content

Commit 0865bce

Browse files
committed
use memcmp for compare
1 parent 2751064 commit 0865bce

File tree

1 file changed

+15
-20
lines changed

1 file changed

+15
-20
lines changed

ext/bcmath/libbcmath/src/compare.c

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -92,29 +92,24 @@ bcmath_compare_result _bc_do_compare(bc_num n1, bc_num n2, size_t scale, bool us
9292
const char *n1ptr = n1->n_value;
9393
const char *n2ptr = n2->n_value;
9494

95-
while ((count > 0) && (*n1ptr == *n2ptr)) {
96-
n1ptr++;
97-
n2ptr++;
98-
count--;
99-
}
100-
101-
if (count != 0) {
102-
if (*n1ptr > *n2ptr) {
103-
/* Magnitude of n1 > n2. */
104-
if (!use_sign || n1->n_sign == PLUS) {
105-
return BCMATH_LEFT_GREATER;
106-
} else {
107-
return BCMATH_RIGHT_GREATER;
108-
}
95+
int cmp_ret = memcmp(n1ptr, n2ptr, count);
96+
if (cmp_ret > 0) {
97+
/* Magnitude of n1 > n2. */
98+
if (!use_sign || n1->n_sign == PLUS) {
99+
return BCMATH_LEFT_GREATER;
109100
} else {
110-
/* Magnitude of n1 < n2. */
111-
if (!use_sign || n1->n_sign == PLUS) {
112-
return BCMATH_RIGHT_GREATER;
113-
} else {
114-
return BCMATH_LEFT_GREATER;
115-
}
101+
return BCMATH_RIGHT_GREATER;
102+
}
103+
} else if (cmp_ret < 0) {
104+
/* Magnitude of n1 < n2. */
105+
if (!use_sign || n1->n_sign == PLUS) {
106+
return BCMATH_RIGHT_GREATER;
107+
} else {
108+
return BCMATH_LEFT_GREATER;
116109
}
117110
}
111+
n1ptr += count;
112+
n2ptr += count;
118113

119114
/* They are equal up to the last part of the equal part of the fraction. */
120115
if (n1_scale != n2_scale) {

0 commit comments

Comments
 (0)