/* SPDX-License-Identifier: BSD-2-Clause */ /******************************************************************************* * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG * All rights reserved. ******************************************************************************/ #ifndef AUX_UTIL_H #define AUX_UTIL_H #ifdef __cplusplus extern "C" { #endif #define SAFE_FREE(S) if((S) != NULL) {free((void*) (S)); (S)=NULL;} #define TPM2_ERROR_FORMAT "%s%s (0x%08x)" #define TPM2_ERROR_TEXT(r) "Error", "Code", r #define return_if_error(r,msg) \ if (r != TSS2_RC_SUCCESS) { \ LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \ return r; \ } #define return_state_if_error(r,s,msg) \ if (r != TSS2_RC_SUCCESS) { \ LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \ esysContext->state = s; \ return r; \ } #define return_error(r,msg) \ { \ LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \ return r; \ } #define goto_state_if_error(r,s,msg,label) \ if (r != TSS2_RC_SUCCESS) { \ LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \ esysContext->state = s; \ goto label; \ } #define goto_if_null(p,msg,ec,label) \ if ((p) == NULL) { \ LOG_ERROR("%s ", (msg)); \ r = (ec); \ goto label; \ } #define goto_if_error(r,msg,label) \ if (r != TSS2_RC_SUCCESS) { \ LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \ goto label; \ } #define goto_error(r,v,msg,label, ...) \ { r = v; \ LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ## __VA_ARGS__); \ goto label; \ } #define return_if_null(p,msg,ec) \ if (p == NULL) { \ LOG_ERROR("%s ", msg); \ return ec; \ } #define return_if_notnull(p,msg,ec) \ if (p != NULL) { \ LOG_ERROR("%s ", msg); \ return ec; \ } #define exit_if_error(r,msg) \ if (r != TSS2_RC_SUCCESS) { \ LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \ exit(1); \ } #define set_return_code(r_max, r, msg) \ if (r != TSS2_RC_SUCCESS) { \ LOG_ERROR("%s " TPM2_ERROR_FORMAT, msg, TPM2_ERROR_TEXT(r)); \ r_max = r; \ } #ifdef __cplusplus } /* extern "C" */ #endif #endif /* AUX_UTIL_H */