From 948255f80192f7110b1b084e478cda0658f3607f Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 21 Dec 2020 21:07:34 +0100 Subject: [PATCH] result: don't use undefined shift Use a different way to generate the upper bits of the ASYNC mask instead of undefined shift as warned by sanitizer Add some unit test for this See #497 --- spa/include/spa/utils/result.h | 2 +- spa/tests/test-utils.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/spa/include/spa/utils/result.h b/spa/include/spa/utils/result.h index 1b09570ec..d54d1a916 100644 --- a/spa/include/spa/utils/result.h +++ b/spa/include/spa/utils/result.h @@ -33,8 +33,8 @@ extern "C" { #include #define SPA_ASYNC_BIT (1 << 30) -#define SPA_ASYNC_MASK (3 << 30) #define SPA_ASYNC_SEQ_MASK (SPA_ASYNC_BIT - 1) +#define SPA_ASYNC_MASK (~SPA_ASYNC_SEQ_MASK) #define SPA_RESULT_IS_OK(res) ((res) >= 0) #define SPA_RESULT_IS_ERROR(res) ((res) < 0) diff --git a/spa/tests/test-utils.c b/spa/tests/test-utils.c index ac57399a4..013445e0e 100644 --- a/spa/tests/test-utils.c +++ b/spa/tests/test-utils.c @@ -23,6 +23,7 @@ */ #include +#include #include #include #include @@ -141,6 +142,23 @@ static void test_macros(void) spa_assert(SPA_CLAMP(8, 1, 16) == 8); } +static void test_result(void) +{ + int res; + spa_assert(SPA_RESULT_IS_OK(0) == true); + spa_assert(SPA_RESULT_IS_OK(1) == true); + spa_assert(SPA_RESULT_IS_ERROR(0) == false); + spa_assert(SPA_RESULT_IS_ERROR(1) == false); + spa_assert(SPA_RESULT_IS_ERROR(-1) == true); + spa_assert(SPA_RESULT_IS_ASYNC(-1) == false); + spa_assert(SPA_RESULT_IS_ASYNC(0) == false); + res = SPA_RESULT_RETURN_ASYNC(11); + spa_assert(SPA_RESULT_IS_ASYNC(res) == true); + spa_assert(SPA_RESULT_IS_ERROR(res) == false); + spa_assert(SPA_RESULT_IS_OK(res) == true); + spa_assert(SPA_RESULT_ASYNC_SEQ(res) == 11); +} + static void test_dict(void) { struct spa_dict_item items[5] = { @@ -405,6 +423,7 @@ int main(int argc, char *argv[]) { test_abi(); test_macros(); + test_result(); test_dict(); test_list(); test_hook();