1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef HKS_TEMPLATE_H 17 #define HKS_TEMPLATE_H 18 19 #include <errno.h> 20 #include <string.h> 21 22 #include "hks_log.h" 23 24 #undef HKS_NULL_POINTER 25 26 #ifdef __cplusplus 27 #define HKS_NULL_POINTER nullptr 28 #else 29 #define HKS_NULL_POINTER NULL 30 #endif 31 32 #define HKS_IF_NOT_SUCC_LOGE_RETURN(RESULT, ERROR_CODE, LOG_MESSAGE, ...) \ 33 if ((RESULT) != HKS_SUCCESS) { \ 34 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 35 return (ERROR_CODE); \ 36 } 37 38 #define HKS_IF_NOT_SUCC_LOGI_RETURN(RESULT, ERROR_CODE, LOG_MESSAGE, ...) \ 39 if ((RESULT) != HKS_SUCCESS) { \ 40 HKS_LOG_I(LOG_MESSAGE, ##__VA_ARGS__); \ 41 return (ERROR_CODE); \ 42 } 43 44 #define HKS_IF_NOT_SUCC_LOGE_BREAK(RESULT, LOG_MESSAGE, ...) \ 45 if ((RESULT) != HKS_SUCCESS) { \ 46 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 47 break; \ 48 } 49 50 #define HKS_IF_NOT_SUCC_LOGI_RETURN(RESULT, ERROR_CODE, LOG_MESSAGE, ...) \ 51 if ((RESULT) != HKS_SUCCESS) { \ 52 HKS_LOG_I(LOG_MESSAGE, ##__VA_ARGS__); \ 53 return (ERROR_CODE); \ 54 } 55 56 #define HKS_IF_NOT_SUCC_LOGI_BREAK(RESULT, LOG_MESSAGE, ...) \ 57 if ((RESULT) != HKS_SUCCESS) { \ 58 HKS_LOG_I(LOG_MESSAGE, ##__VA_ARGS__); \ 59 break; \ 60 } 61 62 #define HKS_IF_NOT_SUCC_BREAK(RESULT, ...) \ 63 if ((RESULT) != HKS_SUCCESS) { \ 64 break; \ 65 } 66 67 #define HKS_IF_NOT_SUCC_LOGE(RESULT, LOG_MESSAGE, ...) \ 68 if ((RESULT) != HKS_SUCCESS) { \ 69 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 70 } 71 72 #define HKS_IF_NOT_SUCC_LOGI(RESULT, LOG_MESSAGE, ...) \ 73 if ((RESULT) != HKS_SUCCESS) { \ 74 HKS_LOG_I(LOG_MESSAGE, ##__VA_ARGS__); \ 75 } 76 77 #define HKS_IF_NOT_SUCC_RETURN(RESULT, ERROR_CODE) \ 78 if ((RESULT) != HKS_SUCCESS) { \ 79 return (ERROR_CODE); \ 80 } 81 82 #define HKS_IF_NOT_SUCC_RETURN_VOID(RESULT) \ 83 if ((RESULT) != HKS_SUCCESS) { \ 84 return; \ 85 } 86 87 #define HKS_IF_NOT_SUCC_LOGE_RETURN_VOID(RESULT, LOG_MESSAGE, ...) \ 88 if ((RESULT) != HKS_SUCCESS) { \ 89 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 90 return; \ 91 } 92 93 #define HKS_IF_NULL_LOGE_RETURN(OBJECT, ERROR_CODE, LOG_MESSAGE, ...) \ 94 if ((OBJECT) == HKS_NULL_POINTER) { \ 95 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 96 return (ERROR_CODE); \ 97 } 98 99 #define HKS_IF_NULL_LOGI_RETURN(OBJECT, ERROR_CODE, LOG_MESSAGE, ...) \ 100 if ((OBJECT) == HKS_NULL_POINTER) { \ 101 HKS_LOG_I(LOG_MESSAGE, ##__VA_ARGS__); \ 102 return (ERROR_CODE); \ 103 } 104 105 #define HKS_IF_NULL_LOGE_RETURN_VOID(OBJECT, LOG_MESSAGE, ...) \ 106 if ((OBJECT) == HKS_NULL_POINTER) { \ 107 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 108 return; \ 109 } 110 111 #define HKS_IF_NULL_LOGE_BREAK(OBJECT, LOG_MESSAGE, ...) \ 112 if ((OBJECT) == HKS_NULL_POINTER) { \ 113 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 114 break; \ 115 } 116 117 #define HKS_IF_NULL_RETURN(OBJECT, ERROR_CODE) \ 118 if ((OBJECT) == HKS_NULL_POINTER) { \ 119 return (ERROR_CODE); \ 120 } 121 122 #define HKS_IF_NULL_RETURN_VOID(OBJECT) \ 123 if ((OBJECT) == HKS_NULL_POINTER) { \ 124 return; \ 125 } 126 127 #define HKS_IF_NULL_BREAK(OBJECT) \ 128 if ((OBJECT) == HKS_NULL_POINTER) { \ 129 break; \ 130 } 131 132 #define HKS_IF_TRUE_RETURN(BOOL_FUNC, ERROR_CODE) \ 133 if ((BOOL_FUNC)) { \ 134 return (ERROR_CODE); \ 135 } 136 137 #define HKS_IF_TRUE_RETURN_VOID(BOOL_FUNC) \ 138 if ((BOOL_FUNC)) { \ 139 return; \ 140 } 141 142 #define HKS_IF_TRUE_LOGE_RETURN(BOOL_FUNC, ERROR_CODE, LOG_MESSAGE, ...) \ 143 if ((BOOL_FUNC)) { \ 144 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 145 return (ERROR_CODE); \ 146 } 147 148 #define HKS_IF_TRUE_LOGE_RETURN_VOID(BOOL_FUNC, LOG_MESSAGE, ...) \ 149 if ((BOOL_FUNC)) { \ 150 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 151 return; \ 152 } 153 154 #define HKS_IF_TRUE_LOGI_RETURN_VOID(BOOL_FUNC, LOG_MESSAGE, ...) \ 155 if ((BOOL_FUNC)) { \ 156 HKS_LOG_I(LOG_MESSAGE, ##__VA_ARGS__); \ 157 return; \ 158 } 159 160 #define HKS_IF_TRUE_LOGI_RETURN(BOOL_FUNC, ERROR_CODE, LOG_MESSAGE, ...) \ 161 if ((BOOL_FUNC)) { \ 162 HKS_LOG_I(LOG_MESSAGE, ##__VA_ARGS__); \ 163 return (ERROR_CODE); \ 164 } 165 166 #define HKS_IF_TRUE_LOGI_BREAK(BOOL_FUNC, LOG_MESSAGE, ...) \ 167 if ((BOOL_FUNC)) { \ 168 HKS_LOG_I(LOG_MESSAGE, ##__VA_ARGS__); \ 169 break; \ 170 } 171 172 #define HKS_IF_TRUE_LOGE(BOOL_FUNC, LOG_MESSAGE, ...) \ 173 if ((BOOL_FUNC)) { \ 174 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 175 } 176 177 #define HKS_IF_NOT_TRUE_LOGE(BOOL_FUNC, LOG_MESSAGE, ...) \ 178 if (!(BOOL_FUNC)) { \ 179 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 180 } 181 182 #define HKS_IF_NOT_TRUE_RETURN(BOOL_FUNC, ERROR_CODE) \ 183 if (!(BOOL_FUNC)) { \ 184 return (ERROR_CODE); \ 185 } 186 187 #define HKS_IF_NOT_TRUE_LOGE_BREAK(BOOL_FUNC, LOG_MESSAGE, ...) \ 188 if (!(BOOL_FUNC)) { \ 189 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 190 break; \ 191 } 192 193 #define HKS_IF_NOT_TRUE_LOGE_RETURN(BOOL_FUNC, ERROR_CODE, LOG_MESSAGE, ...) \ 194 if (!(BOOL_FUNC)) { \ 195 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 196 return (ERROR_CODE); \ 197 } 198 199 #define HKS_IF_NOT_EOK_LOGE_RETURN(BOOL_FUNC, ERROR_CODE, LOG_MESSAGE, ...) \ 200 if ((BOOL_FUNC) != EOK) { \ 201 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 202 return (ERROR_CODE); \ 203 } 204 205 #define HKS_IF_NOT_EOK_LOGE_BREAK(BOOL_FUNC, LOG_MESSAGE, ...) \ 206 if ((BOOL_FUNC) != EOK) { \ 207 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 208 break; \ 209 } 210 211 #define HKS_IF_NOT_EOK_BREAK(BOOL_FUNC) \ 212 if ((BOOL_FUNC) != EOK) { \ 213 break; \ 214 } 215 216 #define HKS_IF_TRUE_LOGE_BREAK(BOOL_FUNC, LOG_MESSAGE, ...) \ 217 if ((BOOL_FUNC)) { \ 218 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 219 break; \ 220 } 221 222 #define HKS_IF_TRUE_BREAK(BOOL_FUNC) \ 223 if ((BOOL_FUNC)) { \ 224 break; \ 225 } 226 227 #define HKS_IF_NOT_TRUE_RETURN_VOID(BOOL_FUNC) \ 228 if (!(BOOL_FUNC)) { \ 229 return; \ 230 } \ 231 232 #define HKS_IF_NOT_TRUE_LOGE_RETURN_VOID(BOOL_FUNC, LOG_MESSAGE, ...) \ 233 if (!(BOOL_FUNC)) { \ 234 HKS_LOG_E(LOG_MESSAGE, ##__VA_ARGS__); \ 235 return; \ 236 } 237 238 #define HKS_LOG_ERRNO(msg, ret) ({ int currentErrno = errno; \ 239 HKS_LOG_E_IMPORTANT(msg " ret: %" LOG_PUBLIC "d, errno: %" LOG_PUBLIC "d, strerror: %" LOG_PUBLIC "s", \ 240 (ret), currentErrno, strerror(currentErrno)); }) 241 242 #define HKS_LOG_FILE_OP_ERRNO(msg, type) ({ int currentErrno = errno; \ 243 HKS_LOG_E_IMPORTANT(msg " pathType: %" LOG_PUBLIC "d, errno: %" LOG_PUBLIC "d, strerror: %" LOG_PUBLIC "s", \ 244 (type), currentErrno, strerror(currentErrno)); }) 245 246 #define HKS_IF_NOT_SUCC_LOG_ERRNO_RETURN(msg, ret) ({ int currentErrno = errno; \ 247 if ((ret) != 0) { \ 248 HKS_LOG_E(msg " %" LOG_PUBLIC "d, errno: %" LOG_PUBLIC "d, strerror: %" LOG_PUBLIC "s", \ 249 (ret), currentErrno, strerror(currentErrno)); \ 250 return HKS_FAILURE; \ 251 }}) 252 253 #define HKS_IF_NOT_TRUE_LOGI(RESULT, LOG_MESSAGE, ...) \ 254 do { \ 255 if (!(RESULT)) { \ 256 HKS_LOG_I(LOG_MESSAGE, ##__VA_ARGS__); \ 257 } \ 258 } while (0) 259 260 #define HKS_IF_NOT_TRUE_LOGI_RETURN(RESULT, ERROR_CODE, LOG_MESSAGE, ...) \ 261 if (!(RESULT)) { \ 262 HKS_LOG_I(LOG_MESSAGE, ##__VA_ARGS__); \ 263 return (ERROR_CODE); \ 264 } 265 266 #endif /* HKS_TEMPLATE_H */