[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 11/24] Add qemu_opts_validate() for post parsing val
From: |
Mark McLoughlin |
Subject: |
[Qemu-devel] [PATCH 11/24] Add qemu_opts_validate() for post parsing validation |
Date: |
Wed, 23 Sep 2009 11:24:10 +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 | 33 +++++++++++++++++++++++++++++++++
qemu-option.h | 1 +
2 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/qemu-option.c b/qemu-option.c
index 390444f..6cb5f50 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -778,6 +778,39 @@ 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);
+
+ QTAILQ_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 525b9b6..666b666 100644
--- a/qemu-option.h
+++ b/qemu-option.h
@@ -115,6 +115,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
- [Qemu-devel] [PATCH 00/19 v2] Port -net to QemuOpts, Mark McLoughlin, 2009/09/23
- [Qemu-devel] [PATCH 01/24] Use qemu_strdup() for NICInfo string fields, Mark McLoughlin, 2009/09/23
- [Qemu-devel] [PATCH 04/24] Correctly free nd structure, Mark McLoughlin, 2009/09/23
- [Qemu-devel] [PATCH 20/24] Clean up legacy code in net_client_init(), Mark McLoughlin, 2009/09/23
- [Qemu-devel] [PATCH 11/24] Add qemu_opts_validate() for post parsing validation,
Mark McLoughlin <=
- [Qemu-devel] [PATCH 02/24] Don't assign a static string to NICInfo::model, Mark McLoughlin, 2009/09/23
- [Qemu-devel] [PATCH 03/24] Make NICInfo string fields non-const, Mark McLoughlin, 2009/09/23
- [Qemu-devel] [PATCH 10/24] Make qemu_opts_parse() handle empty strings, Mark McLoughlin, 2009/09/23
- [Qemu-devel] [PATCH 09/24] Remove double error message for -device option parsing, Mark McLoughlin, 2009/09/23
- [Qemu-devel] [PATCH 13/24] Add qemu_net_opts, Mark McLoughlin, 2009/09/23
- [Qemu-devel] [PATCH 23/24] Port PCI NIC hotplug to QemuOpts, Mark McLoughlin, 2009/09/23
- [Qemu-devel] [PATCH 06/24] Fix coding style issue, Mark McLoughlin, 2009/09/23
- [Qemu-devel] [PATCH 08/24] Remove double error message in qemu_option_set(), Mark McLoughlin, 2009/09/23
- [Qemu-devel] [PATCH 22/24] Port usb net to QemuOpts, Mark McLoughlin, 2009/09/23
- [Qemu-devel] [PATCH 05/24] Use qemu_strdup() for VLANClientState string fields, Mark McLoughlin, 2009/09/23