From 3ecc85aecd6d88c3881ca358d493bf74fe770958 Mon Sep 17 00:00:00 2001 From: Seoxi Ryouko Date: Fri, 21 Aug 2026 02:25:58 -0500 Subject: [PATCH] qsort sorts according to system endianness --- libkeke_array.c | 14 ++++++++++++-- test_array.c | 12 +++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/libkeke_array.c b/libkeke_array.c index 418ea22..75d5600 100644 --- a/libkeke_array.c +++ b/libkeke_array.c @@ -186,8 +186,18 @@ void *keke_array_find_start(KekeArray *array, void *start, size_t size) { } int compar(const void *a, const void *b, void *size_v) { - size_t *size = size_v; - return memcmp(a, b, *size); + size_t size = *(size_t *) size_v; +#if defined(__BYTE_ORDER__)&&(__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) + return memcmp(a, b, size); +#else + const unsigned char *aa = a; + const unsigned char *bb = b; + for(size_t i = 0; i < size; ++i) { + size_t s = size - i - 1; + if(aa[s] != bb[s]) return aa[s] - bb[s]; + } + return 0; +#endif } void keke_array_qsort(KekeArray *array) { diff --git a/test_array.c b/test_array.c index 4ccfc6e..d2fb0c6 100644 --- a/test_array.c +++ b/test_array.c @@ -19,6 +19,10 @@ void sub4(void *i, size_t, KekeArray *) { *(int *)i -= 4; } +void add250(void *i, size_t, KekeArray *) { + *(int *)i += 250; +} + bool heart(void *i, size_t, KekeArray *) { return *(int *)i < 3; } @@ -146,7 +150,7 @@ int main(void) { printf("Expected value:\n7\n%d\n\n", j); keke_array_foreach(array, set); - keke_array_qsort_header(array, sizeof(int)); + keke_array_qsort(array); KekeArray *array5 = keke_array_merge(array, array2); printf("Expected value:\n0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 5, 6, 7, 8, 9,\n"); keke_array_foreach(array5, output); @@ -157,6 +161,12 @@ int main(void) { keke_array_foreach(array5, output); puts("\n"); + keke_array_foreach(array5, add250); + keke_array_qsort_header(array5, sizeof(int)); + printf("Expected value:\n250, 251, 251, 252, 252, 252, 252, 253, 253, 253, 254, 255, 256, 257, 258, 259,\n"); + keke_array_foreach(array5, output); + puts("\n"); + keke_array_free(array); keke_array_free(array2); keke_array_free(array4);