qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH 06/19] Add qemu_opts_validate() for post parsing val


From: Mark McLoughlin
Subject: [Qemu-devel] [PATCH 06/19] Add qemu_opts_validate() for post parsing validation
Date: Thu, 10 Sep 2009 16:18:48 +0100

Several qemu command line options have a parameter whose value affects
what other parameters are accepted for the option.

In these cases, we can have an empty description table in the
QemuOptsList and once the option has been parsed we can use a suitable
description table to validate the other parameters based on the value of
that parameter.

Signed-off-by: Mark McLoughlin <address@hidden>
---
 qemu-option.c |   32 ++++++++++++++++++++++++++++++++
 qemu-option.h |    1 +
 2 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/qemu-option.c b/qemu-option.c
index d312257..0f517d1 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -777,6 +777,38 @@ QemuOpts *qemu_opts_parse(QemuOptsList *list, const char 
*params, const char *fi
     return opts;
 }
 
+/* Validate parsed opts against descriptions where no
+ * descriptions were provided in the QemuOptsList.
+ */
+int qemu_opts_validate(QemuOpts *opts, QemuOptDesc *desc)
+{
+    QemuOpt *opt;
+
+    assert(opts->list->desc[0].name == NULL);
+
+    TAILQ_FOREACH(opt, &opts->head, next) {
+        int i;
+
+        for (i = 0; desc[i].name != NULL; i++) {
+            if (strcmp(desc[i].name, opt->name) == 0) {
+                break;
+            }
+        }
+        if (desc[i].name == NULL) {
+            fprintf(stderr, "option \"%s\" is not valid for %s\n",
+                    opt->name, opts->list->name);
+            return -1;
+        }
+
+        opt->desc = &desc[i];
+
+        if (qemu_opt_parse(opt) < 0)
+            return -1;
+    }
+
+    return 0;
+}
+
 int qemu_opts_foreach(QemuOptsList *list, qemu_opts_loopfunc func, void 
*opaque,
                       int abort_on_failure)
 {
diff --git a/qemu-option.h b/qemu-option.h
index 9e52625..e816d95 100644
--- a/qemu-option.h
+++ b/qemu-option.h
@@ -114,6 +114,7 @@ int qemu_opts_set(QemuOptsList *list, const char *id,
                   const char *name, const char *value);
 const char *qemu_opts_id(QemuOpts *opts);
 void qemu_opts_del(QemuOpts *opts);
+int qemu_opts_validate(QemuOpts *opts, QemuOptDesc *desc);
 int qemu_opts_do_parse(QemuOpts *opts, const char *params, const char 
*firstname);
 QemuOpts *qemu_opts_parse(QemuOptsList *list, const char *params, const char 
*firstname);
 
-- 
1.6.2.5





reply via email to

[Prev in Thread] Current Thread [Next in Thread]