• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */