qdict: Add qdict_{set,copy}_default()
In the block layer functions that determine options for a child block device, it's a common pattern to either copy options from the parent's options or to set a default string if the option isn't explicitly set yet for the child. Provide convenience functions so that it becomes a one-liner for each option. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
bd50530a9f
commit
7990d2c99c
|
@ -65,6 +65,9 @@ int64_t qdict_get_try_int(const QDict *qdict, const char *key,
|
||||||
int qdict_get_try_bool(const QDict *qdict, const char *key, int def_value);
|
int qdict_get_try_bool(const QDict *qdict, const char *key, int def_value);
|
||||||
const char *qdict_get_try_str(const QDict *qdict, const char *key);
|
const char *qdict_get_try_str(const QDict *qdict, const char *key);
|
||||||
|
|
||||||
|
void qdict_copy_default(QDict *dst, QDict *src, const char *key);
|
||||||
|
void qdict_set_default_str(QDict *dst, const char *key, const char *val);
|
||||||
|
|
||||||
QDict *qdict_clone_shallow(const QDict *src);
|
QDict *qdict_clone_shallow(const QDict *src);
|
||||||
void qdict_flatten(QDict *qdict);
|
void qdict_flatten(QDict *qdict);
|
||||||
|
|
||||||
|
|
|
@ -477,6 +477,39 @@ static void qdict_destroy_obj(QObject *obj)
|
||||||
g_free(qdict);
|
g_free(qdict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qdict_copy_default(): If no entry mapped by 'key' exists in 'dst' yet, the
|
||||||
|
* value of 'key' in 'src' is copied there (and the refcount increased
|
||||||
|
* accordingly).
|
||||||
|
*/
|
||||||
|
void qdict_copy_default(QDict *dst, QDict *src, const char *key)
|
||||||
|
{
|
||||||
|
QObject *val;
|
||||||
|
|
||||||
|
if (qdict_haskey(dst, key)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
val = qdict_get(src, key);
|
||||||
|
if (val) {
|
||||||
|
qobject_incref(val);
|
||||||
|
qdict_put_obj(dst, key, val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qdict_set_default_str(): If no entry mapped by 'key' exists in 'dst' yet, a
|
||||||
|
* new QString initialised by 'val' is put there.
|
||||||
|
*/
|
||||||
|
void qdict_set_default_str(QDict *dst, const char *key, const char *val)
|
||||||
|
{
|
||||||
|
if (qdict_haskey(dst, key)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
qdict_put(dst, key, qstring_from_str(val));
|
||||||
|
}
|
||||||
|
|
||||||
static void qdict_flatten_qdict(QDict *qdict, QDict *target,
|
static void qdict_flatten_qdict(QDict *qdict, QDict *target,
|
||||||
const char *prefix);
|
const char *prefix);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue