From 77d212206586600ce87398cdda728dce0bd9ce9a Mon Sep 17 00:00:00 2001 From: Wang Renxin Date: Wed, 15 Jun 2016 11:16:54 +0800 Subject: [PATCH] *improved bytes comparison with different endian. --- core/my_basic.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/core/my_basic.c b/core/my_basic.c index 79b4a26..8f6d890 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -125,7 +125,6 @@ extern "C" { #endif /* toupper */ #define _copy_bytes(__l, __r) do { memcpy((__l), (__r), sizeof(mb_val_bytes_t)); } while(0) -#define _cmp_bytes(__l, __r) (memcmp((__l), (__r), sizeof(mb_val_bytes_t))) #define _mb_check(__expr, __exit) do { if((__expr) != MB_FUNC_OK) goto __exit; } while(0) #define _mb_check_mark(__expr, __result, __exit) do { __result = (__expr); if(__result != MB_FUNC_OK) goto __exit; } while(0) @@ -2887,13 +2886,22 @@ static void mb_free(void* p) { static int mb_memcmp(void* l, void* r, size_t s) { char* lc = (char*)l; char* rc = (char*)r; - size_t i = 0; + int i = 0; - for(i = 0; i < s; i++) { - if(lc[i] < rc[i]) - return -1; - else if(lc[i] > rc[i]) - return 1; + if(mb_is_little_endian()) { + for(i = (int)s - 1; i >= 0; i--) { + if(lc[i] < rc[i]) + return -1; + else if(lc[i] > rc[i]) + return 1; + } + } else { + for(i = 0; i < (int)s; i++) { + if(lc[i] < rc[i]) + return -1; + else if(lc[i] > rc[i]) + return 1; + } } return 0; @@ -9177,7 +9185,7 @@ static int _compare_public_value_and_internal_object(mb_value_t* pbl, _object_t* if(pbl->type != tmp.type) { result = pbl->type - tmp.type; } else { - result = _cmp_bytes(pbl->value.bytes, tmp.value.bytes); + result = mb_memcmp(pbl->value.bytes, tmp.value.bytes, sizeof(mb_val_bytes_t)); } return result;