[libvirt] [PATCH 04/14] Move qemuMonitorEscape + migrate status enum into shared monitor code
Daniel Veillard
veillard at redhat.com
Thu Dec 3 12:29:52 UTC 2009
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 at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list