[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH 04/14] Move qemuMonitorEscape + migrate status enum into shared monitor code



On Thu, Nov 26, 2009 at 06:27:22PM +0000, Daniel P. Berrange wrote:
> The qemuMonitorEscape() method, and the VIR_ENUM for migration
> status will be needed by the JSON monitor too, so move that code
> into the shared qemu_monitor.c file instead of qemu_monitor_text.c
> 
> * src/qemu/qemu_monitor.h: Declare qemuMonitorMigrationStatus enum
>   and qemuMonitorEscapeArg and qemuMonitorEscapeShell methods
> * src/qemu/qemu_monitor.c: Implement qemuMonitorMigrationStatus enum
>   and qemuMonitorEscapeArg and qemuMonitorEscapeShell methods
> * src/qemu/qemu_monitor_text.c: Remove above methods/enum
> ---
>  src/qemu/qemu_monitor.c      |   87 ++++++++++++++++++++++++++++++++++++++++++
>  src/qemu/qemu_monitor.h      |    5 ++
>  src/qemu/qemu_monitor_text.c |   87 ------------------------------------------
>  3 files changed, 92 insertions(+), 87 deletions(-)
> 
> diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
> index 3829e7a..21f8c4b 100644
> --- a/src/qemu/qemu_monitor.c
> +++ b/src/qemu/qemu_monitor.c
> @@ -77,6 +77,93 @@ struct _qemuMonitor {
>  };
>  
>  
> +VIR_ENUM_IMPL(qemuMonitorMigrationStatus,
> +              QEMU_MONITOR_MIGRATION_STATUS_LAST,
> +              "inactive", "active", "completed", "failed", "cancelled")
> +
> +static char *qemuMonitorEscape(const char *in, int shell)
> +{
> +    int len = 0;
> +    int i, j;
> +    char *out;
> +
> +    /* To pass through the QEMU monitor, we need to use escape
> +       sequences: \r, \n, \", \\
> +
> +       To pass through both QEMU + the shell, we need to escape
> +       the single character ' as the five characters '\\''
> +    */
> +
> +    for (i = 0; in[i] != '\0'; i++) {
> +        switch(in[i]) {
> +        case '\r':
> +        case '\n':
> +        case '"':
> +        case '\\':
> +            len += 2;
> +            break;
> +        case '\'':
> +            if (shell)
> +                len += 5;
> +            else
> +                len += 1;
> +            break;
> +        default:
> +            len += 1;
> +            break;
> +        }
> +    }
> +
> +    if (VIR_ALLOC_N(out, len + 1) < 0)
> +        return NULL;
> +
> +    for (i = j = 0; in[i] != '\0'; i++) {
> +        switch(in[i]) {
> +        case '\r':
> +            out[j++] = '\\';
> +            out[j++] = 'r';
> +            break;
> +        case '\n':
> +            out[j++] = '\\';
> +            out[j++] = 'n';
> +            break;
> +        case '"':
> +        case '\\':
> +            out[j++] = '\\';
> +            out[j++] = in[i];
> +            break;
> +        case '\'':
> +            if (shell) {
> +                out[j++] = '\'';
> +                out[j++] = '\\';
> +                out[j++] = '\\';
> +                out[j++] = '\'';
> +                out[j++] = '\'';
> +            } else {
> +                out[j++] = in[i];
> +            }
> +            break;
> +        default:
> +            out[j++] = in[i];
> +            break;
> +        }
> +    }
> +    out[j] = '\0';
> +
> +    return out;
> +}
> +
> +char *qemuMonitorEscapeArg(const char *in)
> +{
> +    return qemuMonitorEscape(in, 0);
> +}
> +
> +char *qemuMonitorEscapeShell(const char *in)
> +{
> +    return qemuMonitorEscape(in, 1);
> +}
> +
> +
>  void qemuMonitorLock(qemuMonitorPtr mon)
>  {
>      virMutexLock(&mon->lock);
> diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
> index 27b43b7..88d3dd7 100644
> --- a/src/qemu/qemu_monitor.h
> +++ b/src/qemu/qemu_monitor.h
> @@ -75,6 +75,9 @@ typedef int (*qemuMonitorDiskSecretLookup)(qemuMonitorPtr mon,
>                                             char **secret,
>                                             size_t *secretLen);
>  
> +char *qemuMonitorEscapeArg(const char *in);
> +char *qemuMonitorEscapeShell(const char *in);
> +
>  qemuMonitorPtr qemuMonitorOpen(virDomainObjPtr vm,
>                                 qemuMonitorEOFNotify eofCB);
>  
> @@ -158,6 +161,8 @@ enum {
>      QEMU_MONITOR_MIGRATION_STATUS_LAST
>  };
>  
> +VIR_ENUM_DECL(qemuMonitorMigrationStatus)
> +
>  int qemuMonitorGetMigrationStatus(qemuMonitorPtr mon,
>                                    int *status,
>                                    unsigned long long *transferred,
> diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c
> index d39a417..2a8b3bd 100644
> --- a/src/qemu/qemu_monitor_text.c
> +++ b/src/qemu/qemu_monitor_text.c
> @@ -51,88 +51,6 @@ typedef int qemuMonitorExtraPromptHandler(qemuMonitorPtr mon,
>                                            void *data);
>  
>  
> -static char *qemuMonitorEscape(const char *in, int shell)
> -{
> -    int len = 0;
> -    int i, j;
> -    char *out;
> -
> -    /* To pass through the QEMU monitor, we need to use escape
> -       sequences: \r, \n, \", \\
> -
> -       To pass through both QEMU + the shell, we need to escape
> -       the single character ' as the five characters '\\''
> -    */
> -
> -    for (i = 0; in[i] != '\0'; i++) {
> -        switch(in[i]) {
> -        case '\r':
> -        case '\n':
> -        case '"':
> -        case '\\':
> -            len += 2;
> -            break;
> -        case '\'':
> -            if (shell)
> -                len += 5;
> -            else
> -                len += 1;
> -            break;
> -        default:
> -            len += 1;
> -            break;
> -        }
> -    }
> -
> -    if (VIR_ALLOC_N(out, len + 1) < 0)
> -        return NULL;
> -
> -    for (i = j = 0; in[i] != '\0'; i++) {
> -        switch(in[i]) {
> -        case '\r':
> -            out[j++] = '\\';
> -            out[j++] = 'r';
> -            break;
> -        case '\n':
> -            out[j++] = '\\';
> -            out[j++] = 'n';
> -            break;
> -        case '"':
> -        case '\\':
> -            out[j++] = '\\';
> -            out[j++] = in[i];
> -            break;
> -        case '\'':
> -            if (shell) {
> -                out[j++] = '\'';
> -                out[j++] = '\\';
> -                out[j++] = '\\';
> -                out[j++] = '\'';
> -                out[j++] = '\'';
> -            } else {
> -                out[j++] = in[i];
> -            }
> -            break;
> -        default:
> -            out[j++] = in[i];
> -            break;
> -        }
> -    }
> -    out[j] = '\0';
> -
> -    return out;
> -}
> -
> -static char *qemuMonitorEscapeArg(const char *in)
> -{
> -    return qemuMonitorEscape(in, 0);
> -}
> -
> -static char *qemuMonitorEscapeShell(const char *in)
> -{
> -    return qemuMonitorEscape(in, 1);
> -}
> -
>  /* When connecting to a monitor, QEMU will print a greeting like
>   *
>   * QEMU 0.11.0 monitor - type 'help' for more information
> @@ -904,11 +822,6 @@ cleanup:
>  #define MIGRATION_REMAINING_PREFIX "remaining ram: "
>  #define MIGRATION_TOTAL_PREFIX "total ram: "
>  
> -VIR_ENUM_DECL(qemuMonitorMigrationStatus)
> -VIR_ENUM_IMPL(qemuMonitorMigrationStatus,
> -              QEMU_MONITOR_MIGRATION_STATUS_LAST,
> -              "inactive", "active", "completed", "failed", "cancelled")
> -
>  int qemuMonitorTextGetMigrationStatus(qemuMonitorPtr mon,
>                                        int *status,
>                                        unsigned long long *transferred,

  ACK

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel veillard com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]