On 25.04.2016 20:46, Cole Robinson wrote:
Let's us de-nest some of the logic, and will simplify upcoming
patches
---
src/fdstream.c | 73 +++++++++++++++++++++++++++++++++-------------------------
1 file changed, 42 insertions(+), 31 deletions(-)
diff --git a/src/fdstream.c b/src/fdstream.c
index a6a0fbe..681b90e 100644
--- a/src/fdstream.c
+++ b/src/fdstream.c
@@ -240,6 +240,46 @@ virFDStreamAddCallback(virStreamPtr st,
return ret;
}
+static int
+virFDStreamCloseCommand(struct virFDStreamData *fdst)
+{
+ char buf[1024];
+ ssize_t len;
+ int status;
+ int ret = -1;
+
+ if (!fdst->cmd)
+ return 0;
+
+ if ((len = saferead(fdst->errfd, buf, sizeof(buf)-1)) < 0)
+ buf[0] = '\0';
+ else
+ buf[len] = '\0';
+
+ virCommandRawStatus(fdst->cmd);
+ if (virCommandWait(fdst->cmd, &status) < 0)
+ goto error;
+
+ if (status != 0) {
+ if (buf[0] != '\0') {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", buf);
+ } else if (WIFEXITED(status)) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("I/O helper exited with status %d"),
+ WEXITSTATUS(status));
+ } else {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("I/O helper exited abnormally"));
+ }
+ goto error;
+ }
+
+ ret = 0;
+ error:
Just a small nit, we tend to name 'cleanup' labels that are used in both
successful and unsuccessful return paths. So this should be 'cleanup' to
follow our style.
+ virCommandFree(fdst->cmd);
+ fdst->cmd = NULL;
+ return ret;
+}
Michal