[libvirt] [PATCH 4/7] Factor qemudMonitorSend() out of qemudMonitorCommandExtra()

Daniel P. Berrange berrange at redhat.com
Mon Jul 27 21:09:58 UTC 2009


On Wed, Jul 22, 2009 at 10:57:33PM +0100, Mark McLoughlin wrote:
> Add a little helper function to write the monitor command followed by
> carriage return in a single write.
> 
> This doesn't make any real difference, but allows us to more easily
> switch to using sendmsg() when using the monitor over a unix socket.
> 
> * src/qemu_conf.c: split qemudMonitorSend() out
> ---
>  src/qemu_driver.c |   31 +++++++++++++++++++++++--------
>  1 files changed, 23 insertions(+), 8 deletions(-)
> 
> diff --git a/src/qemu_driver.c b/src/qemu_driver.c
> index 4f0c60e..7d4de9e 100644
> --- a/src/qemu_driver.c
> +++ b/src/qemu_driver.c
> @@ -2012,6 +2012,27 @@ qemuMonitorDiscardPendingData(virDomainObjPtr vm) {
>      } while (ret > 0);
>  }
>  
> +static int
> +qemudMonitorSend(const virDomainObjPtr vm,
> +                 const char *cmd)
> +{
> +    char *full;
> +    size_t len;
> +    int ret = -1;
> +
> +    if (virAsprintf(&full, "%s\r", cmd) < 0)
> +        return -1;
> +
> +    len = strlen(full);
> +
> +    if (safewrite(vm->monitor, full, len) != len)
> +        goto out;
> +
> +    ret = 0;
> +out:
> +    VIR_FREE(full);
> +    return ret;
> +}

It would seem easier to just keep the original model of two
safewrite() calls, than to introduce an extra allocation
& free here.  Not a mustfix for comitting, but it'd be nicer.

>  
>  static int
>  qemudMonitorCommandExtra(const virDomainObjPtr vm,
> @@ -2021,14 +2042,10 @@ qemudMonitorCommandExtra(const virDomainObjPtr vm,
>                           char **reply) {
>      int size = 0;
>      char *buf = NULL;
> -    size_t cmdlen = strlen(cmd);
> -    size_t extralen = extra ? strlen(extra) : 0;
>  
>      qemuMonitorDiscardPendingData(vm);
>  
> -    if (safewrite(vm->monitor, cmd, cmdlen) != cmdlen)
> -        return -1;
> -    if (safewrite(vm->monitor, "\r", 1) != 1)
> +    if (qemudMonitorSend(vm, cmd) < 0)
>          return -1;
>  
>      *reply = NULL;
> @@ -2063,9 +2080,7 @@ qemudMonitorCommandExtra(const virDomainObjPtr vm,
>          if (buf) {
>              if (extra) {
>                  if (strstr(buf, extraPrompt) != NULL) {
> -                    if (safewrite(vm->monitor, extra, extralen) != extralen)
> -                        return -1;
> -                    if (safewrite(vm->monitor, "\r", 1) != 1)
> +                    if (qemudMonitorSend(vm, extra) < 0)
>                          return -1;
>                      extra = NULL;
>                  }

ACK, 

Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list