[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH 09/27] qdict: Introduce qdict_rename_keys()
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PATCH 09/27] qdict: Introduce qdict_rename_keys() |
Date: |
Thu, 8 Feb 2018 20:23:10 +0100 |
A few block drivers will need to rename .bdrv_create options for their
QAPIfication, so let's have a helper function for that.
Signed-off-by: Kevin Wolf <address@hidden>
---
include/qapi/qmp/qdict.h | 6 ++++++
qobject/qdict.c | 30 ++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/include/qapi/qmp/qdict.h b/include/qapi/qmp/qdict.h
index fc218e7be6..862441b9d3 100644
--- a/include/qapi/qmp/qdict.h
+++ b/include/qapi/qmp/qdict.h
@@ -90,4 +90,10 @@ QObject *qdict_crumple(const QDict *src, Error **errp);
void qdict_join(QDict *dest, QDict *src, bool overwrite);
+typedef struct QDictRenames {
+ const char *from;
+ const char *to;
+} QDictRenames;
+bool qdict_rename_keys(QDict *qdict, const QDictRenames *renames, Error
**errp);
+
#endif /* QDICT_H */
diff --git a/qobject/qdict.c b/qobject/qdict.c
index e8f15f1132..07ae9489a7 100644
--- a/qobject/qdict.c
+++ b/qobject/qdict.c
@@ -1051,3 +1051,33 @@ void qdict_join(QDict *dest, QDict *src, bool overwrite)
entry = next;
}
}
+
+/**
+ * qdict_rename_keys(): Rename keys in qdict according to the replacements
+ * specified in the array renames. The array must be terminated by an entry
+ * with from = NULL.
+ *
+ * Returns true for success, false in error cases.
+ */
+bool qdict_rename_keys(QDict *qdict, const QDictRenames *renames, Error **errp)
+{
+ QObject *qobj;
+
+ while (renames->from) {
+ if (qdict_haskey(qdict, renames->from)) {
+ if (qdict_haskey(qdict, renames->to)) {
+ error_setg(errp, "'%s' and its alias '%s' can't be used at the
"
+ "same time", renames->to, renames->from);
+ return false;
+ }
+
+ qobj = qdict_get(qdict, renames->from);
+ qobject_incref(qobj);
+ qdict_put_obj(qdict, renames->to, qobj);
+ qdict_del(qdict, renames->from);
+ }
+
+ renames++;
+ }
+ return true;
+}
--
2.13.6
- Re: [Qemu-block] [PATCH 05/27] qcow2: Use BlockdevRef in qcow2_create2(), (continued)
- [Qemu-block] [PATCH 06/27] qcow2: Use QCryptoBlockCreateOptions in qcow2_create2(), Kevin Wolf, 2018/02/08
- [Qemu-block] [PATCH 07/27] qcow2: Handle full/falloc preallocation in qcow2_create2(), Kevin Wolf, 2018/02/08
- [Qemu-block] [PATCH 08/27] util: Add qemu_opts_to_qdict_filtered(), Kevin Wolf, 2018/02/08
- [Qemu-block] [PATCH 09/27] qdict: Introduce qdict_rename_keys(),
Kevin Wolf <=
- [Qemu-block] [PATCH 10/27] qcow2: Use visitor for options in qcow2_create(), Kevin Wolf, 2018/02/08
- [Qemu-block] [PATCH 11/27] block: x-blockdev-create QMP command, Kevin Wolf, 2018/02/08