[libvirt] [PATCH 08/16] storage: iscsi: Convert virExec to virCommand

Daniel P. Berrange berrange at redhat.com
Wed May 11 10:31:37 UTC 2011


On Tue, May 10, 2011 at 04:07:47PM -0400, Cole Robinson wrote:
> 
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
>  src/storage/storage_backend_iscsi.c |   24 ++++++++++++------------
>  1 files changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/src/storage/storage_backend_iscsi.c b/src/storage/storage_backend_iscsi.c
> index ec52dbc..b489394 100644
> --- a/src/storage/storage_backend_iscsi.c
> +++ b/src/storage/storage_backend_iscsi.c
> @@ -184,28 +184,24 @@ virStorageBackendIQNFound(const char *initiatoriqn,
>      int ret = IQN_MISSING, fd = -1;
>      char ebuf[64];
>      FILE *fp = NULL;
> -    pid_t child = 0;
>      char *line = NULL, *newline = NULL, *iqn = NULL, *token = NULL,
>          *saveptr = NULL;
> -    const char *const prog[] = {
> -        ISCSIADM, "--mode", "iface", NULL
> -    };
> +    virCommandPtr cmd = virCommandNewArgList(ISCSIADM,
> +                                             "--mode", "iface", NULL);
> +    pid_t pid = -1;
>  
>      if (VIR_ALLOC_N(line, LINE_SIZE) != 0) {
>          ret = IQN_ERROR;
>          virStorageReportError(VIR_ERR_INTERNAL_ERROR,
>                                _("Could not allocate memory for output of '%s'"),
> -                              prog[0]);
> +                              ISCSIADM);
>          goto out;
>      }
>  
>      memset(line, 0, LINE_SIZE);
>  
> -    if (virExec(prog, NULL, NULL, &child, -1, &fd, NULL, VIR_EXEC_NONE) < 0) {
> -        virStorageReportError(VIR_ERR_INTERNAL_ERROR,
> -                              _("Failed to run '%s' when looking for existing interface with IQN '%s'"),
> -                              prog[0], initiatoriqn);
> -
> +    virCommandSetOutputFD(cmd, &fd);
> +    if (virCommandRunAsync(cmd, &pid) < 0) {
>          ret = IQN_ERROR;
>          goto out;
>      }
> @@ -214,7 +210,7 @@ virStorageBackendIQNFound(const char *initiatoriqn,
>          virStorageReportError(VIR_ERR_INTERNAL_ERROR,
>                                _("Failed to open stream for file descriptor "
>                                  "when reading output from '%s': '%s'"),
> -                              prog[0], virStrerror(errno, ebuf, sizeof ebuf));
> +                              ISCSIADM, virStrerror(errno, ebuf, sizeof ebuf));
>          ret = IQN_ERROR;
>          goto out;
>      }
> @@ -226,7 +222,7 @@ virStorageBackendIQNFound(const char *initiatoriqn,
>              virStorageReportError(VIR_ERR_INTERNAL_ERROR,
>                                    _("Unexpected line > %d characters "
>                                      "when parsing output of '%s'"),
> -                                  LINE_SIZE, prog[0]);
> +                                  LINE_SIZE, ISCSIADM);
>              goto out;
>          }
>          *newline = '\0';
> @@ -256,9 +252,13 @@ out:
>          VIR_DEBUG("Could not find interface with IQN '%s'", iqn);
>      }
>  
> +    if (pid > 0 && virCommandWait(cmd, NULL) < 0)
> +        ret = IQN_ERROR;
> +
>      VIR_FREE(line);
>      VIR_FORCE_FCLOSE(fp);
>      VIR_FORCE_CLOSE(fd);
> +    virCommandFree(cmd);
>  
>      return ret;
>  }

ACK

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list