1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * 4 * HDF is dual licensed: you can use it either under the terms of 5 * the GPL, or the BSD license, at your option. 6 * See the LICENSE file in the root of this repository for complete details. 7 */ 8 9 #ifndef PLATFORM_ASSERT_H 10 #define PLATFORM_ASSERT_H 11 12 #include "platform_log.h" 13 14 #define ERROR_AND_LOG(expr) \ 15 do { \ 16 PLAT_LOGE(__FILE__ "(line:%d): " #expr " is false!", __LINE__); \ 17 } while (0) 18 19 #define CHECK(expr) \ 20 ( { \ 21 if (!(expr)) { \ 22 ERROR_AND_LOG(expr); \ 23 } \ 24 (expr); \ 25 } ) 26 27 #define CHECK_EQ(a, b) CHECK((a) == (b)) 28 #define CHECK_NE(a, b) CHECK((a) != (b)) 29 #define CHECK_GE(a, b) CHECK((a) >= (b)) 30 #define CHECK_GT(a, b) CHECK((a) > (b)) 31 #define CHECK_LE(a, b) CHECK((a) <= (b)) 32 #define CHECK_LT(a, b) CHECK((a) < (b)) 33 #define CHECK_NULL(ptr) CHECK((ptr) == NULL) 34 #define CHECK_NOT_NULL(ptr) CHECK((ptr) != NULL) 35 36 #define ERROR_AND_RETURN(expr, ret) \ 37 do { \ 38 PLAT_LOGE(__FILE__ "(line:%d): " #expr " is false!", __LINE__); \ 39 return ret; \ 40 } while (0) 41 42 #define CHECK_AND_RETURN(expr, ret) \ 43 do { \ 44 if (!(expr)) { \ 45 ERROR_AND_RETURN(expr, (ret)); \ 46 } \ 47 } while (0) 48 49 #define CHECK_EQ_RETURN(a, b, ret) CHECK_AND_RETURN((a) == (b), ret) 50 #define CHECK_NE_RETURN(a, b, ret) CHECK_AND_RETURN((a) != (b), ret) 51 #define CHECK_GE_RETURN(a, b, ret) CHECK_AND_RETURN((a) >= (b), ret) 52 #define CHECK_GT_RETURN(a, b, ret) CHECK_AND_RETURN((a) > (b), ret) 53 #define CHECK_LE_RETURN(a, b, ret) CHECK_AND_RETURN((a) <= (b), ret) 54 #define CHECK_LT_RETURN(a, b, ret) CHECK_AND_RETURN((a) < (b), ret) 55 #define CHECK_NULL_RETURN(ptr, ret) CHECK_AND_RETURN((ptr) == NULL, ret) 56 #define CHECK_NOT_NULL_RETURN(ptr, ret) CHECK_AND_RETURN((ptr) != NULL, ret) 57 58 #define LONGS_EQUAL_RETURN(x, y) \ 59 do { \ 60 int xx = (x); \ 61 int yy = (y); \ 62 if (xx != yy) { \ 63 HDF_LOGE(__FILE__ "(line:%d): expect:%d->" #x ", got:%d->" #y, __LINE__, xx, yy); \ 64 return HDF_FAILURE; \ 65 } \ 66 } while (0) 67 68 #define CHECK_TRUE_RETURN(cond) \ 69 do { \ 70 if (cond) { \ 71 break; \ 72 } \ 73 HDF_LOGE(__FILE__ "(line:%d): " #cond " is false!", __LINE__); \ 74 return HDF_FAILURE; \ 75 } while (0) 76 77 #define CHECK_FALSE_RETURN(cond) \ 78 do { \ 79 if (!(cond)) { \ 80 break; \ 81 } \ 82 HDF_LOGE(__FILE__ "(line:%d): " #cond " is true!", __LINE__); \ 83 return HDF_FAILURE; \ 84 } while (0) 85 86 #endif /* PLATFORM_ASSERT_H */ 87