From 1c4a00d26b4f5485b8055c7ce6cc14ea4c1e7605 Mon Sep 17 00:00:00 2001 From: Patrick Venture Date: Tue, 4 Dec 2018 09:35:41 -0800 Subject: [PATCH] fru: cleanup ipmi_fru_upg_ekeying Cleanup ipmi_fru_upg_ekeying such that it exits from one place that handles cleanup. Signed-off-by: Patrick Venture --- lib/ipmi_fru.c | 49 +++++++++++++++++++++---------------------------- 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/lib/ipmi_fru.c b/lib/ipmi_fru.c index 94aef16..bc26191 100644 --- a/lib/ipmi_fru.c +++ b/lib/ipmi_fru.c @@ -3767,10 +3767,11 @@ ipmi_fru_get_multirec(struct ipmi_intf * intf, uint8_t id , return 0; } -static int -ipmi_fru_upg_ekeying(struct ipmi_intf * intf, - char * pFileName, - uint8_t fruId) +#define ERR_EXIT do { rc = -1; goto exit; } while(0) + +static +int +ipmi_fru_upg_ekeying(struct ipmi_intf *intf, char *pFileName, uint8_t fruId) { struct fru_info fruInfo = {0}; uint8_t *buf = NULL; @@ -3778,59 +3779,51 @@ ipmi_fru_upg_ekeying(struct ipmi_intf * intf, uint32_t fruMultiRecSize = 0; uint32_t offFileMultiRec = 0; uint32_t fileMultiRecSize = 0; + int rc = 0; + if (!pFileName) { lprintf(LOG_ERR, "File expected, but none given."); - return -1; + ERR_EXIT; } if (ipmi_fru_get_multirec_location_from_fru(intf, fruId, &fruInfo, &offFruMultiRec, &fruMultiRecSize) != 0) { lprintf(LOG_ERR, "Failed to get multirec location from FRU."); - return -1; + ERR_EXIT; } lprintf(LOG_DEBUG, "FRU Size : %lu\n", fruMultiRecSize); lprintf(LOG_DEBUG, "Multi Rec offset: %lu\n", offFruMultiRec); if (ipmi_fru_get_multirec_size_from_file(pFileName, &fileMultiRecSize, &offFileMultiRec) != 0) { lprintf(LOG_ERR, "Failed to get multirec size from file '%s'.", pFileName); - return -1; + ERR_EXIT; } buf = malloc(fileMultiRecSize); if (!buf) { lprintf(LOG_ERR, "ipmitool: malloc failure"); - return -1; + ERR_EXIT; } if (ipmi_fru_get_multirec_from_file(pFileName, buf, fileMultiRecSize, offFileMultiRec) != 0) { lprintf(LOG_ERR, "Failed to get multirec from file '%s'.", pFileName); - if (buf) { - free(buf); - buf = NULL; - } - return -1; + ERR_EXIT; } if (ipmi_fru_get_adjust_size_from_buffer(buf, &fileMultiRecSize) != 0) { lprintf(LOG_ERR, "Failed to adjust size from buffer."); - if (buf) { - free(buf); - buf = NULL; - } - return -1; + ERR_EXIT; } if (write_fru_area(intf, &fruInfo, fruId, 0, offFruMultiRec, fileMultiRecSize, buf) != 0) { lprintf(LOG_ERR, "Failed to write FRU area."); - if (buf) { - free(buf); - buf = NULL; - } - return -1; - } - if (buf) { - free(buf); - buf = NULL; + ERR_EXIT; } + lprintf(LOG_INFO, "Done upgrading Ekey."); - return 0; + +exit: + free(buf); + buf = NULL; + + return rc; } /* ipmi_fru_upgekey_help - print help text for 'upgEkey'