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