summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Venture <venture@google.com>2018-12-04 09:35:41 -0800
committerAlexander Amelkin <mocbuhtig@amelkin.msk.ru>2019-02-13 21:28:14 +0300
commit1c4a00d26b4f5485b8055c7ce6cc14ea4c1e7605 (patch)
treef04ac0902cc41df1fce78c857261c08022d8ddc3
parentaef8a1ccb4489a2afdfe5f60c3b145cab40d3325 (diff)
downloadipmitool-1c4a00d26b4f5485b8055c7ce6cc14ea4c1e7605.tar.gz
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>
-rw-r--r--lib/ipmi_fru.c49
1 files 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'