[libvirt] [PATCH 06/16] storage: Convert qemu-img -help parsing to virCommand

Cole Robinson crobinso at redhat.com
Tue May 10 20:07:45 UTC 2011


Signed-off-by: Cole Robinson <crobinso at redhat.com>
---
 src/storage/storage_backend.c |   31 ++++++-------------------------
 1 files changed, 6 insertions(+), 25 deletions(-)

diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
index 2acbf90..63ba686 100644
--- a/src/storage/storage_backend.c
+++ b/src/storage/storage_backend.c
@@ -607,28 +607,19 @@ enum {
 
 static int virStorageBackendQEMUImgBackingFormat(const char *qemuimg)
 {
-    const char *const qemuarg[] = { qemuimg, "-h", NULL };
-    const char *const qemuenv[] = { "LC_ALL=C", NULL };
-    pid_t child = 0;
-    int status;
-    int newstdout = -1;
     char *help = NULL;
-    enum { MAX_HELP_OUTPUT_SIZE = 1024*8 };
     char *start;
     char *end;
     char *tmp;
     int ret = -1;
+    virCommandPtr cmd = virCommandNewArgList(qemuimg, "-h", NULL);
 
-    if (virExec(qemuarg, qemuenv, NULL,
-                &child, -1, &newstdout, NULL, VIR_EXEC_CLEAR_CAPS) < 0)
-        goto cleanup;
+    virCommandAddEnvString(cmd, "LC_ALL=C");
+    virCommandSetOutputBuffer(cmd, &help);
+    virCommandClearCaps(cmd);
 
-    if (virFileReadLimFD(newstdout, MAX_HELP_OUTPUT_SIZE, &help) < 0) {
-        virReportSystemError(errno,
-                             _("Unable to read '%s -h' output"),
-                             qemuimg);
+    if (virCommandRun(cmd, NULL) < 0)
         goto cleanup;
-    }
 
     start = strstr(help, " create ");
     end = strstr(start, "\n");
@@ -641,18 +632,8 @@ static int virStorageBackendQEMUImgBackingFormat(const char *qemuimg)
         ret = QEMU_IMG_BACKING_FORMAT_NONE;
 
 cleanup:
+    virCommandFree(cmd);
     VIR_FREE(help);
-    VIR_FORCE_CLOSE(newstdout);
-    if (child) {
-        while (waitpid(child, &status, 0) == -1 && errno == EINTR);
-        if (status) {
-            tmp = virCommandTranslateStatus(status);
-            VIR_WARN("Unexpected status, qemu probably failed: %s",
-                     NULLSTR(tmp));
-            VIR_FREE(tmp);
-        }
-    }
-
     return ret;
 }
 
-- 
1.7.4.4




More information about the libvir-list mailing list