tpm2-tss
3.2.0
TPM Software stack 2.0 TCG spec compliant implementation
ifapi_macros.h
1
/* SPDX-License-Identifier: BSD-2-Clause */
2
/*******************************************************************************
3
* Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG
4
* All rights reserved.
5
*******************************************************************************/
6
#ifndef IFAPI_MACROS_H
7
#define IFAPI_MACROS_H
8
9
#define strdup_check(dest, str, r, label) \
10
if (str) { \
11
dest = strdup(str); \
12
if (!dest) { \
13
r = TSS2_FAPI_RC_MEMORY; \
14
LOG_ERROR("Out of memory."); \
15
goto label; \
16
} \
17
} else { \
18
dest = NULL; \
19
}
20
21
#define calloc_check(dest, size, r, label) \
22
{ \
23
dest = callock(size,1); \
24
if (!dest) { \
25
r = TSS2_FAPI_RC_MEMORY; \
26
LOG_ERROR("Out of memory."); \
27
goto label; \
28
} \
29
}
30
31
#define goto_if_null2(p,msg, r, ec, label, ...) \
32
if ((p) == NULL) { \
33
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(ec), ## __VA_ARGS__); \
34
r = (ec); \
35
goto label; \
36
}
37
38
#define goto_if_error2(r,msg,label, ...) \
39
if (r != TSS2_RC_SUCCESS) { \
40
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ## __VA_ARGS__); \
41
goto label; \
42
}
43
44
#define return_if_error2(r,msg, ...) \
45
if (r != TSS2_RC_SUCCESS) { \
46
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ## __VA_ARGS__); \
47
return r; \
48
}
49
50
#define try_again_or_error(r,msg, ...) \
51
if (base_rc(r) == TSS2_BASE_RC_TRY_AGAIN) \
52
return TSS2_FAPI_RC_TRY_AGAIN; \
53
if (r != TSS2_RC_SUCCESS) { \
54
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ## __VA_ARGS__); \
55
return r; \
56
}
57
58
#define try_again_or_error_goto(r,msg, label, ...) \
59
if (base_rc(r) == TSS2_BASE_RC_TRY_AGAIN) \
60
return TSS2_FAPI_RC_TRY_AGAIN; \
61
if (r != TSS2_RC_SUCCESS) { \
62
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ## __VA_ARGS__); \
63
goto label; \
64
}
65
66
#define return_error2(r,msg, ...) { \
67
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ## __VA_ARGS__); \
68
return (r); }
69
70
71
#define return_if_error_reset_state(r,msg, ...) \
72
if (r != TSS2_RC_SUCCESS) { \
73
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ## __VA_ARGS__); \
74
context->state = _FAPI_STATE_INIT; \
75
return r; \
76
}
77
78
#define goto_if_error_reset_state(r,msg,label, ...) \
79
if (r != TSS2_RC_SUCCESS) { \
80
LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ## __VA_ARGS__); \
81
context->state = _FAPI_STATE_INIT; \
82
goto label; \
83
}
84
85
#define goto_error_reset_state(r,v,msg,label) { \
86
r = v; \
87
LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \
88
context->state = _FAPI_STATE_INIT; \
89
goto label; }
90
91
#define goto_if_null_reset_state(p,msg,r,ec,label) \
92
if ((p) == NULL) { \
93
LOG_ERROR("%s ", (msg)); \
94
context->state = _FAPI_STATE_INIT; \
95
(r) = (ec); \
96
goto label; \
97
}
98
99
#define return_try_again(r) \
100
if (base_rc(r) == TSS2_BASE_RC_TRY_AGAIN) { \
101
LOG_TRACE("Received TRY_AGAIN; returning TRY_AGAIN"); \
102
return TSS2_FAPI_RC_TRY_AGAIN; \
103
}
104
105
#define check_not_null(X) \
106
if (X == NULL) { \
107
LOG_ERROR(str(X) " is NULL: BAD_REFERENCE"); \
108
return TSS2_FAPI_RC_BAD_REFERENCE; \
109
}
110
111
#define check_oom(X) \
112
if (X == NULL) { \
113
LOG_ERROR("Out of memory"); \
114
return TSS2_FAPI_RC_MEMORY; \
115
}
116
117
#if defined __GNUC__ && __GNUC__ < 7
118
#define fallthrough { }
119
#else
120
#define fallthrough __attribute__((fallthrough))
121
#endif
122
123
#define statecase(VAR, STATE) \
124
case STATE: \
125
LOG_TRACE("State " str(VAR) " reached " str(STATE)); \
126
VAR=STATE;
127
128
#define general_failure(VAR) \
129
default: \
130
LOG_ERROR("Bad state for " str(VAR)); \
131
return TSS2_FAPI_RC_GENERAL_FAILURE;
132
133
#define statecasedefault(VAR) \
134
default: \
135
LOG_ERROR("Bad state for " str(VAR)); \
136
return TSS2_FAPI_RC_BAD_SEQUENCE;
137
138
#define statecasedefault_error(VAR, r, label) \
139
default: \
140
LOG_ERROR("Bad state for " str(VAR)); \
141
r = TSS2_FAPI_RC_BAD_SEQUENCE; \
142
goto label;
143
144
#endif
/* IFAPI_MACROS_H */
src
tss2-fapi
ifapi_macros.h
Generated by
1.8.13