[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH COLO-Block v6 14/16] introduce a new API qemu_opts_a
From: |
Wen Congyang |
Subject: |
[Qemu-devel] [PATCH COLO-Block v6 14/16] introduce a new API qemu_opts_absorb_qdict_by_index() |
Date: |
Thu, 18 Jun 2015 16:49:19 +0800 |
Signed-off-by: Wen Congyang <address@hidden>
Signed-off-by: zhanghailiang <address@hidden>
Signed-off-by: Gonglei <address@hidden>
---
include/qemu/option.h | 2 ++
util/qemu-option.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 46 insertions(+)
diff --git a/include/qemu/option.h b/include/qemu/option.h
index ac0e43b..f868893 100644
--- a/include/qemu/option.h
+++ b/include/qemu/option.h
@@ -126,6 +126,8 @@ QemuOpts *qemu_opts_from_qdict(QemuOptsList *list, const
QDict *qdict,
Error **errp);
QDict *qemu_opts_to_qdict(QemuOpts *opts, QDict *qdict);
void qemu_opts_absorb_qdict(QemuOpts *opts, QDict *qdict, Error **errp);
+void qemu_opts_absorb_qdict_by_index(QemuOpts *opts, QDict *qdict,
+ const char *index, Error **errp);
typedef int (*qemu_opts_loopfunc)(void *opaque, QemuOpts *opts, Error **errp);
int qemu_opts_foreach(QemuOptsList *list, qemu_opts_loopfunc func,
diff --git a/util/qemu-option.c b/util/qemu-option.c
index 840f5f7..0c8e898 100644
--- a/util/qemu-option.c
+++ b/util/qemu-option.c
@@ -1006,6 +1006,50 @@ void qemu_opts_absorb_qdict(QemuOpts *opts, QDict
*qdict, Error **errp)
}
/*
+ * Adds all QDict entries to the QemuOpts that can be added and removes them
+ * from the QDict. The key starts with "%index." in the %qdict. When this
+ * function returns, the QDict contains only those entries that couldn't be
+ * added to the QemuOpts.
+ */
+void qemu_opts_absorb_qdict_by_index(QemuOpts *opts, QDict *qdict,
+ const char *index, Error **errp)
+{
+ const QDictEntry *entry, *next;
+ const char *key;
+ int len = strlen(index);
+
+ entry = qdict_first(qdict);
+
+ while (entry != NULL) {
+ Error *local_err = NULL;
+ OptsFromQDictState state = {
+ .errp = &local_err,
+ .opts = opts,
+ };
+
+ next = qdict_next(qdict, entry);
+ if (strncmp(entry->key, index, len) || *(entry->key + len) != '.') {
+ entry = next;
+ continue;
+ }
+
+ key = entry->key + len + 1;
+
+ if (find_desc_by_name(opts->list->desc, key)) {
+ qemu_opts_from_qdict_1(key, entry->value, &state);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return;
+ } else {
+ qdict_del(qdict, entry->key);
+ }
+ }
+
+ entry = next;
+ }
+}
+
+/*
* Convert from QemuOpts to QDict.
* The QDict values are of type QString.
* TODO We'll want to use types appropriate for opt->desc->type, but
--
2.4.3
- Re: [Qemu-devel] [Qemu-block] [PATCH COLO-Block v6 07/16] Add new block driver interface to connect/disconnect the remote target, (continued)
- [Qemu-devel] [PATCH COLO-Block v6 04/16] block: Parse "backing_reference" option to reference existing BDS, Wen Congyang, 2015/06/18
- [Qemu-devel] [PATCH COLO-Block v6 09/16] Introduce a new -drive option to control whether to connect to remote target, Wen Congyang, 2015/06/18
- [Qemu-devel] [PATCH COLO-Block v6 08/16] NBD client: implement block driver interfaces to connect/disconnect NBD server, Wen Congyang, 2015/06/18
- [Qemu-devel] [PATCH COLO-Block v6 10/16] NBD client: connect to nbd server later, Wen Congyang, 2015/06/18
- [Qemu-devel] [PATCH COLO-Block v6 12/16] skip nbd_target when starting block replication, Wen Congyang, 2015/06/18
- [Qemu-devel] [PATCH COLO-Block v6 11/16] Add new block driver interfaces to control block replication, Wen Congyang, 2015/06/18
- [Qemu-devel] [PATCH COLO-Block v6 14/16] introduce a new API qemu_opts_absorb_qdict_by_index(),
Wen Congyang <=
- [Qemu-devel] [PATCH COLO-Block v6 13/16] quorum: implement block driver interfaces for block replication, Wen Congyang, 2015/06/18
- [Qemu-devel] [PATCH COLO-Block v6 15/16] quorum: allow ignoring child errors, Wen Congyang, 2015/06/18
- [Qemu-devel] [PATCH COLO-Block v6 16/16] Implement new driver for block replication, Wen Congyang, 2015/06/18