diff --git a/src/header/string/mod.rs b/src/header/string/mod.rs index 497a2bbeffb857225240a9a2e7cf992a5c944fad..879fb89309d7a85b7e504656339d97073ca73207 100644 --- a/src/header/string/mod.rs +++ b/src/header/string/mod.rs @@ -95,7 +95,7 @@ pub unsafe extern "C" fn memcmp(s1: *const c_void, s2: *const c_void, n: usize) let mut b = b as *const u8; for _ in 0..rem { if *a != *b { - return a as c_int - b as c_int; + return *a as c_int - *b as c_int; } a = a.offset(1); b = b.offset(1); diff --git a/tests/expected/string/mem.stdout b/tests/expected/string/mem.stdout index d2f4e1f86ec9b2367d23dbc1c82b655439e1e757..1d74e9a7749a6a1a943861688c6afd42f737d0e2 100644 --- a/tests/expected/string/mem.stdout +++ b/tests/expected/string/mem.stdout @@ -1,3 +1,4 @@ # mem # Correct memchr Correct memccpy +Correct memcmp diff --git a/tests/string/mem.c b/tests/string/mem.c index 3cc42784317e6993d30e612d848b1c35f546baac..121a8f5f3b93c29e2cab705ac246df04251147ff 100644 --- a/tests/string/mem.c +++ b/tests/string/mem.c @@ -3,22 +3,40 @@ #include <string.h> int main(int argc, char ** argv) { - printf("# mem #\n"); - char arr[100]; - memset(arr, 0, 100); // Compiler builtin, should work - arr[50] = 1; - if ((size_t)memchr((void *)arr, 1, 100) - (size_t)arr != 50) { - printf("Incorrect memchr\n"); - exit(1); - } - printf("Correct memchr\n"); - char arr2[51]; - memset(arr2, 0, 51); // Compiler builtin, should work - memccpy((void *)arr2, (void *)arr, 1, 100); - if (arr[50] != 1) { - printf("Incorrect memccpy\n"); - exit(1); - } - printf("Correct memccpy\n"); + puts("# mem #"); + char arr[100]; + memset(arr, 0, 100); // Compiler builtin, should work + arr[50] = 1; + if ((size_t)memchr((void *)arr, 1, 100) - (size_t)arr != 50) { + puts("Incorrect memchr"); + exit(1); + } + puts("Correct memchr"); + char arr2[51]; + memset(arr2, 0, 51); // Compiler builtin, should work + memccpy((void *)arr2, (void *)arr, 1, 100); + if (arr[50] != 1) { + puts("Incorrect memccpy"); + exit(1); + } + puts("Correct memccpy"); + int res; + if ((res = memcmp("hello world", "hello world", 11))) { + printf("Incorrect memcmp (1), expected 0 found %d\n", res); + exit(1); + } + if ((res = memcmp("hello world", "hello worlt", 11)) >= 0) { + printf("Incorrect memcmp (2), expected -, found %d\n", res); + exit(1); + } + if ((res = memcmp("hello world", "hallo world", 5)) <= 0) { + printf("Incorrect memcmp (3), expected +, found %d\n", res); + exit(1); + } + if ((res = memcmp("hello world", "henlo world", 5)) >= 0) { + printf("Incorrect memcmp (4), expected -, found %d\n", res); + exit(1); + } + puts("Correct memcmp"); return 0; }