xref: /aosp_15_r20/external/tpm2-tss/src/util/aux_util.h (revision 758e9fba6fc9adbf15340f70c73baee7b168b1c9)
1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */
2*758e9fbaSOystein Eftevaag /*******************************************************************************
3*758e9fbaSOystein Eftevaag  * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG
4*758e9fbaSOystein Eftevaag  * All rights reserved.
5*758e9fbaSOystein Eftevaag  ******************************************************************************/
6*758e9fbaSOystein Eftevaag #ifndef AUX_UTIL_H
7*758e9fbaSOystein Eftevaag #define AUX_UTIL_H
8*758e9fbaSOystein Eftevaag 
9*758e9fbaSOystein Eftevaag #ifdef __cplusplus
10*758e9fbaSOystein Eftevaag extern "C" {
11*758e9fbaSOystein Eftevaag #endif
12*758e9fbaSOystein Eftevaag 
13*758e9fbaSOystein Eftevaag #define SAFE_FREE(S) if((S) != NULL) {free((void*) (S)); (S)=NULL;}
14*758e9fbaSOystein Eftevaag 
15*758e9fbaSOystein Eftevaag #define TPM2_ERROR_FORMAT "%s%s (0x%08x)"
16*758e9fbaSOystein Eftevaag #define TPM2_ERROR_TEXT(r) "Error", "Code", r
17*758e9fbaSOystein Eftevaag 
18*758e9fbaSOystein Eftevaag #define return_if_error(r,msg) \
19*758e9fbaSOystein Eftevaag     if (r != TSS2_RC_SUCCESS) { \
20*758e9fbaSOystein Eftevaag         LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \
21*758e9fbaSOystein Eftevaag         return r;  \
22*758e9fbaSOystein Eftevaag     }
23*758e9fbaSOystein Eftevaag 
24*758e9fbaSOystein Eftevaag #define return_state_if_error(r,s,msg)      \
25*758e9fbaSOystein Eftevaag     if (r != TSS2_RC_SUCCESS) { \
26*758e9fbaSOystein Eftevaag         LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \
27*758e9fbaSOystein Eftevaag         esysContext->state = s; \
28*758e9fbaSOystein Eftevaag         return r;  \
29*758e9fbaSOystein Eftevaag     }
30*758e9fbaSOystein Eftevaag 
31*758e9fbaSOystein Eftevaag #define return_error(r,msg) \
32*758e9fbaSOystein Eftevaag     { \
33*758e9fbaSOystein Eftevaag         LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \
34*758e9fbaSOystein Eftevaag         return r;  \
35*758e9fbaSOystein Eftevaag     }
36*758e9fbaSOystein Eftevaag 
37*758e9fbaSOystein Eftevaag #define goto_state_if_error(r,s,msg,label) \
38*758e9fbaSOystein Eftevaag     if (r != TSS2_RC_SUCCESS) { \
39*758e9fbaSOystein Eftevaag         LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \
40*758e9fbaSOystein Eftevaag         esysContext->state = s; \
41*758e9fbaSOystein Eftevaag         goto label;  \
42*758e9fbaSOystein Eftevaag     }
43*758e9fbaSOystein Eftevaag 
44*758e9fbaSOystein Eftevaag #define goto_if_null(p,msg,ec,label) \
45*758e9fbaSOystein Eftevaag     if ((p) == NULL) { \
46*758e9fbaSOystein Eftevaag         LOG_ERROR("%s ", (msg)); \
47*758e9fbaSOystein Eftevaag         r = (ec); \
48*758e9fbaSOystein Eftevaag         goto label;  \
49*758e9fbaSOystein Eftevaag     }
50*758e9fbaSOystein Eftevaag 
51*758e9fbaSOystein Eftevaag #define goto_if_error(r,msg,label) \
52*758e9fbaSOystein Eftevaag     if (r != TSS2_RC_SUCCESS) { \
53*758e9fbaSOystein Eftevaag         LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \
54*758e9fbaSOystein Eftevaag         goto label;  \
55*758e9fbaSOystein Eftevaag     }
56*758e9fbaSOystein Eftevaag 
57*758e9fbaSOystein Eftevaag #define goto_error(r,v,msg,label, ...)              \
58*758e9fbaSOystein Eftevaag     { r = v;  \
59*758e9fbaSOystein Eftevaag       LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ## __VA_ARGS__); \
60*758e9fbaSOystein Eftevaag       goto label; \
61*758e9fbaSOystein Eftevaag     }
62*758e9fbaSOystein Eftevaag 
63*758e9fbaSOystein Eftevaag #define return_if_null(p,msg,ec) \
64*758e9fbaSOystein Eftevaag     if (p == NULL) { \
65*758e9fbaSOystein Eftevaag         LOG_ERROR("%s ", msg); \
66*758e9fbaSOystein Eftevaag         return ec; \
67*758e9fbaSOystein Eftevaag     }
68*758e9fbaSOystein Eftevaag 
69*758e9fbaSOystein Eftevaag #define return_if_notnull(p,msg,ec) \
70*758e9fbaSOystein Eftevaag     if (p != NULL) { \
71*758e9fbaSOystein Eftevaag         LOG_ERROR("%s ", msg); \
72*758e9fbaSOystein Eftevaag         return ec; \
73*758e9fbaSOystein Eftevaag     }
74*758e9fbaSOystein Eftevaag 
75*758e9fbaSOystein Eftevaag #define exit_if_error(r,msg) \
76*758e9fbaSOystein Eftevaag     if (r != TSS2_RC_SUCCESS) { \
77*758e9fbaSOystein Eftevaag         LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \
78*758e9fbaSOystein Eftevaag         exit(1);  \
79*758e9fbaSOystein Eftevaag     }
80*758e9fbaSOystein Eftevaag 
81*758e9fbaSOystein Eftevaag #define set_return_code(r_max, r, msg) \
82*758e9fbaSOystein Eftevaag     if (r != TSS2_RC_SUCCESS) { \
83*758e9fbaSOystein Eftevaag         LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \
84*758e9fbaSOystein Eftevaag         r_max = r; \
85*758e9fbaSOystein Eftevaag     }
86*758e9fbaSOystein Eftevaag 
87*758e9fbaSOystein Eftevaag #ifdef __cplusplus
88*758e9fbaSOystein Eftevaag } /* extern "C" */
89*758e9fbaSOystein Eftevaag #endif
90*758e9fbaSOystein Eftevaag 
91*758e9fbaSOystein Eftevaag #endif /* AUX_UTIL_H */
92