summaryrefslogtreecommitdiff
path: root/Zend/zend_sort.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2015-01-19 01:04:23 -0500
committerXinchen Hui <laruence@php.net>2015-01-19 01:36:56 -0500
commit020b51b46eceb1a8c2876aac263772ed55ba9a1a (patch)
tree9c9822bdfeb1f7cf58463f3b1f30911846a94cbe /Zend/zend_sort.c
parent0706032b7344ee3be3e95911e18966b3d97bfe39 (diff)
downloadphp-git-020b51b46eceb1a8c2876aac263772ed55ba9a1a.tar.gz
Don't use >= as sorting condition
which could avoid breaking usage like: usort($a, function($a, $b) { return $a > $b; })
Diffstat (limited to 'Zend/zend_sort.c')
-rw-r--r--Zend/zend_sort.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/Zend/zend_sort.c b/Zend/zend_sort.c
index 383fe226b4..78ed0ebb5f 100644
--- a/Zend/zend_sort.c
+++ b/Zend/zend_sort.c
@@ -91,10 +91,9 @@ ZEND_API void zend_qsort(void *base, size_t nmemb, size_t siz, compare_func_t co
/* }}} */
static inline void zend_sort_2(void *a, void *b, compare_func_t cmp, swap_func_t swp) /* {{{ */ {
- if (cmp(a, b) <= 0) {
- return;
+ if (cmp(a, b) > 0) {
+ swp(a, b);
}
- swp(a, b);
}
/* }}} */
@@ -109,7 +108,7 @@ static inline void zend_sort_3(void *a, void *b, void *c, compare_func_t cmp, sw
}
return;
}
- if (cmp(b, c) >= 0) {
+ if (cmp(c, b) <= 0) {
swp(a, c);
return;
}
@@ -215,7 +214,7 @@ ZEND_API void zend_insert_sort(void *base, size_t nmemb, size_t siz, compare_fun
}
if (j == start + siz) {
j -= siz;
- if (cmp(j, i) < 0) {
+ if (cmp(i, j) > 0) {
j += siz;
}
break;
@@ -338,7 +337,7 @@ ZEND_API void zend_sort(void *base, size_t nmemb, size_t siz, compare_func_t cmp
i = pivot + siz;
j = end - siz;
while (1) {
- while (cmp(i, pivot) < 0) {
+ while (cmp(pivot, i) > 0) {
i += siz;
if (UNEXPECTED(i == j)) {
goto done;
@@ -348,7 +347,7 @@ ZEND_API void zend_sort(void *base, size_t nmemb, size_t siz, compare_func_t cmp
if (UNEXPECTED(j == i)) {
goto done;
}
- while (cmp(pivot, j) < 0) {
+ while (cmp(j, pivot) > 0) {
j -= siz;
if (UNEXPECTED(j == i)) {
goto done;