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 <venture@google.com>
This commit is contained in:
Patrick Venture 2018-12-04 09:35:41 -08:00 committed by Alexander Amelkin
parent aef8a1ccb4
commit 1c4a00d26b

View File

@ -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'