Patchwork [1/2] Add opt_set_bool function

login
register
mail settings
Submitter Mohan Kumar M
Date Oct. 12, 2011, 7:53 a.m.
Message ID <1318406014-16911-1-git-send-email-mohan@in.ibm.com>
Download mbox | patch
Permalink /patch/119158/
State New
Headers show

Comments

Mohan Kumar M - Oct. 12, 2011, 7:53 a.m.
In addition to qemu_opt_set function, we need a function to set bool value
also.

Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
---
 qemu-option.c |   35 +++++++++++++++++++++++++++++++++++
 qemu-option.h |    1 +
 2 files changed, 36 insertions(+), 0 deletions(-)
Andreas Färber - Oct. 12, 2011, 4:17 p.m.
Am 12.10.2011 09:53, schrieb M. Mohan Kumar:
> In addition to qemu_opt_set function, we need a function to set bool value
> also.
>
> Signed-off-by: M. Mohan Kumar<mohan@in.ibm.com>
> ---
>   qemu-option.c |   35 +++++++++++++++++++++++++++++++++++
>   qemu-option.h |    1 +
>   2 files changed, 36 insertions(+), 0 deletions(-)
>
> diff --git a/qemu-option.c b/qemu-option.c
> index 105d760..d6bc908 100644
> --- a/qemu-option.c
> +++ b/qemu-option.c
> @@ -636,6 +636,41 @@ int qemu_opt_set(QemuOpts *opts, const char *name, const char *value)
>       return 0;
>   }
>
> +int qemu_opt_set_bool(QemuOpts *opts, const char *name, int val)

Might it make sense to let qemu_opt_{get,set}_bool() use bool type?

Andreas
Mohan Kumar M - Oct. 14, 2011, 4:24 a.m.
Andreas,

I will repost the patch with boolean type change.

Patch

diff --git a/qemu-option.c b/qemu-option.c
index 105d760..d6bc908 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -636,6 +636,41 @@  int qemu_opt_set(QemuOpts *opts, const char *name, const char *value)
     return 0;
 }
 
+int qemu_opt_set_bool(QemuOpts *opts, const char *name, int val)
+{
+    QemuOpt *opt;
+    const QemuOptDesc *desc = opts->list->desc;
+    int i;
+
+    for (i = 0; desc[i].name != NULL; i++) {
+        if (strcmp(desc[i].name, name) == 0) {
+            break;
+        }
+    }
+    if (desc[i].name == NULL) {
+        if (i == 0) {
+            /* empty list -> allow any */;
+        } else {
+            qerror_report(QERR_INVALID_PARAMETER, name);
+            return -1;
+        }
+    }
+
+    opt = g_malloc0(sizeof(*opt));
+    opt->name = g_strdup(name);
+    opt->opts = opts;
+    QTAILQ_INSERT_TAIL(&opts->head, opt, next);
+    if (desc[i].name != NULL) {
+        opt->desc = desc+i;
+    }
+    opt->value.boolean = !!val;
+    if (qemu_opt_parse(opt) < 0) {
+        qemu_opt_del(opt);
+        return -1;
+    }
+    return 0;
+}
+
 int qemu_opt_foreach(QemuOpts *opts, qemu_opt_loopfunc func, void *opaque,
                      int abort_on_failure)
 {
diff --git a/qemu-option.h b/qemu-option.h
index b515813..af4d36b 100644
--- a/qemu-option.h
+++ b/qemu-option.h
@@ -109,6 +109,7 @@  int qemu_opt_get_bool(QemuOpts *opts, const char *name, int defval);
 uint64_t qemu_opt_get_number(QemuOpts *opts, const char *name, uint64_t defval);
 uint64_t qemu_opt_get_size(QemuOpts *opts, const char *name, uint64_t defval);
 int qemu_opt_set(QemuOpts *opts, const char *name, const char *value);
+int qemu_opt_set_bool(QemuOpts *opts, const char *name, int val);
 typedef int (*qemu_opt_loopfunc)(const char *name, const char *value, void *opaque);
 int qemu_opt_foreach(QemuOpts *opts, qemu_opt_loopfunc func, void *opaque,
                      int abort_on_failure);