diff --git a/src/util.h b/src/util.h index a3136dee..d026d783 100644 --- a/src/util.h +++ b/src/util.h @@ -57,6 +57,7 @@ typedef SORT_COMPARE_FUNC_DEF(sort_compare_func, a, b, udata); INLINE void merge_sort_internal(u8 *left, u8 *right, u8 *items, u64 left_count, u64 right_count, u64 item_size, sort_compare_func *callback, void *udata) { + /* Sort */ u64 i = 0; u64 l = 0; u64 r = 0; @@ -74,21 +75,18 @@ INLINE void merge_sort_internal(u8 *left, u8 *right, u8 *items, u64 left_count, } } /* Copy remaining */ - u64 left_remaining_bytes = (left_count - l) * item_size; - u64 right_remaining_bytes = (right_count - r) * item_size; - if (left_remaining_bytes > 0) { + if (l != left_count) { + u64 remaining_count = left_count - l; + u64 remaining_bytes = remaining_count * item_size; u8 *dst = items + (i * item_size); u8 *src = left + (l * item_size); - MEMCPY(dst, src, left_remaining_bytes); - i += left_count - l; - l = left_count; - } - if (right_remaining_bytes > 0) { + MEMCPY(dst, src, remaining_bytes); + } else if (r != right_count) { + u64 remaining_count = right_count - r; + u64 remaining_bytes = remaining_count * item_size; u8 *dst = items + (i * item_size); u8 *src = right + (r * item_size); - MEMCPY(dst, src, right_remaining_bytes); - i += right_count - r; - r = right_count; + MEMCPY(dst, src, remaining_bytes); } }