summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2012-02-08 05:41:37 +0000
committerAndrzej Zaborowski <balrogg@gmail.com>2012-02-17 09:08:22 +0100
commitda93318a9f0ff83e4a93e8755fa92291f9b8cc1b (patch)
tree2bb23fc889e4da2ccd7c327f45f0a1bd0e84617f
parenta84fac1426acd56f6dff4f6023611c1aefe748de (diff)
downloadqemu-da93318a9f0ff83e4a93e8755fa92291f9b8cc1b.tar.gz
qemu-option: Add support for merged QemuOptsLists
Add support for option lists which are merged together, so that "-listname foo=bar -listname bar=baz" is equivalent to "-listname foo=bar,bar=baz" rather than generating two separate lists of options. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Andrzej Zaborowski <andrew.zaborowski@intel.com>
-rw-r--r--qemu-option.c7
-rw-r--r--qemu-option.h1
2 files changed, 7 insertions, 1 deletions
diff --git a/qemu-option.c b/qemu-option.c
index 4626ccfe54..35cd609f75 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -741,13 +741,18 @@ QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id, int fail_if_exist
}
opts = qemu_opts_find(list, id);
if (opts != NULL) {
- if (fail_if_exists) {
+ if (fail_if_exists && !list->merge_lists) {
qerror_report(QERR_DUPLICATE_ID, id, list->name);
return NULL;
} else {
return opts;
}
}
+ } else if (list->merge_lists) {
+ opts = qemu_opts_find(list, NULL);
+ if (opts) {
+ return opts;
+ }
}
opts = g_malloc0(sizeof(*opts));
if (id) {
diff --git a/qemu-option.h b/qemu-option.h
index e6f61e6e35..3ca00c3cec 100644
--- a/qemu-option.h
+++ b/qemu-option.h
@@ -100,6 +100,7 @@ typedef struct QemuOptDesc {
struct QemuOptsList {
const char *name;
const char *implied_opt_name;
+ bool merge_lists; /* Merge multiple uses of option into a single list? */
QTAILQ_HEAD(, QemuOpts) head;
QemuOptDesc desc[];
};