提交 444306d5 编写于 作者: E Eric Blake

phyp: more return handling cleanup

* src/phyp/phyp_driver.c (phypInterfaceDestroy)
(phypInterfaceDefineXML, phypInterfaceLookupByName)
(phypInterfaceIsActive, phypListInterfaces, phypNumOfInterfaces):
Clean up return handling of recent additions.
上级 8f03c6e8
......@@ -3294,6 +3294,7 @@ phypInterfaceDestroy(virInterfacePtr iface,
char *char_ptr;
char *cmd = NULL;
char *ret = NULL;
int rv = -1;
/* Getting the remote slot number */
......@@ -3309,17 +3310,17 @@ phypInterfaceDestroy(virInterfacePtr iface,
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
virReportOOMError();
goto err;
goto cleanup;
}
cmd = virBufferContentAndReset(&buf);
ret = phypExec(session, cmd, &exit_status, iface->conn);
if (exit_status < 0 || ret == NULL)
goto err;
goto cleanup;
if (virStrToLong_i(ret, &char_ptr, 10, &slot_num) == -1)
goto err;
goto cleanup;
/* Getting the remote slot number */
VIR_FREE(cmd);
......@@ -3337,7 +3338,7 @@ phypInterfaceDestroy(virInterfacePtr iface,
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
virReportOOMError();
goto err;
goto cleanup;
}
cmd = virBufferContentAndReset(&buf);
......@@ -3346,10 +3347,10 @@ phypInterfaceDestroy(virInterfacePtr iface,
ret = phypExec(session, cmd, &exit_status, iface->conn);
if (exit_status < 0 || ret == NULL)
goto err;
goto cleanup;
if (virStrToLong_i(ret, &char_ptr, 10, &lpar_id) == -1)
goto err;
goto cleanup;
/* excluding interface */
VIR_FREE(cmd);
......@@ -3366,23 +3367,21 @@ phypInterfaceDestroy(virInterfacePtr iface,
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
virReportOOMError();
goto err;
goto cleanup;
}
cmd = virBufferContentAndReset(&buf);
ret = phypExec(session, cmd, &exit_status, iface->conn);
if (exit_status < 0 || ret != NULL)
goto err;
goto cleanup;
VIR_FREE(cmd);
VIR_FREE(ret);
return 0;
rv = 0;
err:
cleanup:
VIR_FREE(cmd);
VIR_FREE(ret);
return -1;
return rv;
}
static virInterfacePtr
......@@ -3405,9 +3404,10 @@ phypInterfaceDefineXML(virConnectPtr conn, const char *xml,
char name[PHYP_IFACENAME_SIZE];
char mac[PHYP_MAC_SIZE];
virInterfaceDefPtr def;
virInterfacePtr result = NULL;
if (!(def = virInterfaceDefParseString(xml)))
goto err;
goto cleanup;
/* Now need to get the next free slot number */
virBufferAddLit(&buf, "lshwres ");
......@@ -3422,17 +3422,17 @@ phypInterfaceDefineXML(virConnectPtr conn, const char *xml,
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
virReportOOMError();
goto err;
goto cleanup;
}
cmd = virBufferContentAndReset(&buf);
ret = phypExec(session, cmd, &exit_status, conn);
if (exit_status < 0 || ret == NULL)
goto err;
goto cleanup;
if (virStrToLong_i(ret, &char_ptr, 10, &slot) == -1)
goto err;
goto cleanup;
/* The next free slot itself: */
slot++;
......@@ -3453,14 +3453,14 @@ phypInterfaceDefineXML(virConnectPtr conn, const char *xml,
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
virReportOOMError();
goto err;
goto cleanup;
}
cmd = virBufferContentAndReset(&buf);
ret = phypExec(session, cmd, &exit_status, conn);
if (exit_status < 0 || ret != NULL)
goto err;
goto cleanup;
/* Need to sleep a little while to wait for the HMC to
* complete the execution of the command.
......@@ -3483,7 +3483,7 @@ phypInterfaceDefineXML(virConnectPtr conn, const char *xml,
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
virReportOOMError();
goto err;
goto cleanup;
}
cmd = virBufferContentAndReset(&buf);
......@@ -3505,13 +3505,13 @@ phypInterfaceDefineXML(virConnectPtr conn, const char *xml,
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
virReportOOMError();
goto err;
goto cleanup;
}
cmd = virBufferContentAndReset(&buf);
ret = phypExec(session, cmd, &exit_status, conn);
goto err;
goto cleanup;
}
memcpy(name, ret, PHYP_IFACENAME_SIZE-1);
......@@ -3532,27 +3532,24 @@ phypInterfaceDefineXML(virConnectPtr conn, const char *xml,
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
virReportOOMError();
goto err;
goto cleanup;
}
cmd = virBufferContentAndReset(&buf);
ret = phypExec(session, cmd, &exit_status, conn);
if (exit_status < 0 || ret == NULL)
goto err;
goto cleanup;
memcpy(mac, ret, PHYP_MAC_SIZE-1);
VIR_FREE(cmd);
VIR_FREE(ret);
virInterfaceDefFree(def);
return virGetInterface(conn, name, mac);
result = virGetInterface(conn, name, mac);
err:
cleanup:
VIR_FREE(cmd);
VIR_FREE(ret);
virInterfaceDefFree(def);
return NULL;
return result;
}
static virInterfacePtr
......@@ -3586,17 +3583,17 @@ phypInterfaceLookupByName(virConnectPtr conn, const char *name)
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
virReportOOMError();
goto err;
goto cleanup;
}
cmd = virBufferContentAndReset(&buf);
ret = phypExec(session, cmd, &exit_status, conn);
if (exit_status < 0 || ret == NULL)
goto err;
goto cleanup;
if (virStrToLong_i(ret, &char_ptr, 10, &slot) == -1)
goto err;
goto cleanup;
/*Getting the lpar_id for the interface */
VIR_FREE(cmd);
......@@ -3621,10 +3618,10 @@ phypInterfaceLookupByName(virConnectPtr conn, const char *name)
ret = phypExec(session, cmd, &exit_status, conn);
if (exit_status < 0 || ret == NULL)
goto err;
goto cleanup;
if (virStrToLong_i(ret, &char_ptr, 10, &lpar_id) == -1)
goto err;
goto cleanup;
/*Getting the interface mac */
virBufferAddLit(&buf, "lshwres ");
......@@ -3639,7 +3636,7 @@ phypInterfaceLookupByName(virConnectPtr conn, const char *name)
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
virReportOOMError();
return NULL;
goto cleanup;
}
cmd = virBufferContentAndReset(&buf);
......@@ -3648,21 +3645,16 @@ phypInterfaceLookupByName(virConnectPtr conn, const char *name)
ret = phypExec(session, cmd, &exit_status, conn);
if (exit_status < 0 || ret == NULL)
goto err;
goto cleanup;
memcpy(mac, ret, PHYP_MAC_SIZE-1);
result = virGetInterface(conn, name, ret);
cleanup:
VIR_FREE(cmd);
VIR_FREE(ret);
return result;
err:
VIR_FREE(cmd);
VIR_FREE(ret);
return NULL;
}
static int
......@@ -3675,7 +3667,7 @@ phypInterfaceIsActive(virInterfacePtr iface)
char *managed_system = phyp_driver->managed_system;
int system_type = phyp_driver->system_type;
int exit_status = 0;
int state = 0;
int state = -1;
char *char_ptr;
char *cmd = NULL;
char *ret = NULL;
......@@ -3692,27 +3684,22 @@ phypInterfaceIsActive(virInterfacePtr iface)
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
virReportOOMError();
return -1;
goto cleanup;
}
cmd = virBufferContentAndReset(&buf);
ret = phypExec(session, cmd, &exit_status, iface->conn);
if (exit_status < 0 || ret == NULL)
goto err;
goto cleanup;
if (virStrToLong_i(ret, &char_ptr, 10, &state) == -1)
goto err;
goto cleanup;
cleanup:
VIR_FREE(cmd);
VIR_FREE(ret);
return state;
err:
VIR_FREE(cmd);
VIR_FREE(ret);
return -1;
}
static int
......@@ -3732,6 +3719,7 @@ phypListInterfaces(virConnectPtr conn, char **const names, int nnames)
char *networks = NULL;
char *char_ptr2 = NULL;
virBuffer buf = VIR_BUFFER_INITIALIZER;
bool success = false;
virBufferAddLit(&buf, "lshwres");
if (system_type == HMC)
......@@ -3742,15 +3730,16 @@ phypListInterfaces(virConnectPtr conn, char **const names, int nnames)
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
virReportOOMError();
goto err;
goto cleanup;
}
cmd = virBufferContentAndReset(&buf);
ret = phypExec(session, cmd, &exit_status, conn);
/* I need to parse the textual return in order to get the network interfaces */
/* I need to parse the textual return in order to get the network
* interfaces */
if (exit_status < 0 || ret == NULL)
goto err;
goto cleanup;
networks = ret;
......@@ -3761,7 +3750,7 @@ phypListInterfaces(virConnectPtr conn, char **const names, int nnames)
*char_ptr2 = '\0';
if ((names[got++] = strdup(networks)) == NULL) {
virReportOOMError();
goto err;
goto cleanup;
}
char_ptr2++;
networks = char_ptr2;
......@@ -3770,16 +3759,14 @@ phypListInterfaces(virConnectPtr conn, char **const names, int nnames)
}
}
cleanup:
if (!success) {
for (i = 0; i < got; i++)
VIR_FREE(names[i]);
}
VIR_FREE(cmd);
VIR_FREE(ret);
return got;
err:
for (i = 0; i < got; i++)
VIR_FREE(names[i]);
VIR_FREE(cmd);
VIR_FREE(ret);
return -1;
}
static int
......@@ -3792,7 +3779,7 @@ phypNumOfInterfaces(virConnectPtr conn)
int system_type = phyp_driver->system_type;
int vios_id = phyp_driver->vios_id;
int exit_status = 0;
int nnets = 0;
int nnets = -1;
char *char_ptr;
char *cmd = NULL;
char *ret = NULL;
......@@ -3809,27 +3796,22 @@ phypNumOfInterfaces(virConnectPtr conn)
if (virBufferError(&buf)) {
virBufferFreeAndReset(&buf);
virReportOOMError();
goto err;
goto cleanup;
}
cmd = virBufferContentAndReset(&buf);
ret = phypExec(session, cmd, &exit_status, conn);
if (exit_status < 0 || ret == NULL)
goto err;
goto cleanup;
if (virStrToLong_i(ret, &char_ptr, 10, &nnets) == -1)
goto err;
goto cleanup;
cleanup:
VIR_FREE(cmd);
VIR_FREE(ret);
return nnets;
err:
VIR_FREE(cmd);
VIR_FREE(ret);
return -1;
}
static int
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册