Skip to content

Commit

Permalink
qdict: Extract qdict_extract_subqdict
Browse files Browse the repository at this point in the history
Signed-off-by: Benoit Canet <benoit@irqsave.net>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
  • Loading branch information
benoit-canet authored and kevmw committed Sep 25, 2013
1 parent c3e4f43 commit 5726d87
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 21 deletions.
23 changes: 2 additions & 21 deletions block.c
Expand Up @@ -1007,25 +1007,6 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp)
return 0;
}

static void extract_subqdict(QDict *src, QDict **dst, const char *start)
{
const QDictEntry *entry, *next;
const char *p;

*dst = qdict_new();
entry = qdict_first(src);

while (entry != NULL) {
next = qdict_next(src, entry);
if (strstart(entry->key, start, &p)) {
qobject_incref(entry->value);
qdict_put_obj(*dst, p, entry->value);
qdict_del(src, entry->key);
}
entry = next;
}
}

/*
* Opens a disk image (raw, qcow2, vmdk, ...)
*
Expand Down Expand Up @@ -1131,7 +1112,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options,
flags |= BDRV_O_ALLOW_RDWR;
}

extract_subqdict(options, &file_options, "file.");
qdict_extract_subqdict(options, &file_options, "file.");

ret = bdrv_file_open(&file, filename, file_options,
bdrv_open_flags(bs, flags | BDRV_O_UNMAP), &local_err);
Expand Down Expand Up @@ -1169,7 +1150,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options,
if ((flags & BDRV_O_NO_BACKING) == 0) {
QDict *backing_options;

extract_subqdict(options, &backing_options, "backing.");
qdict_extract_subqdict(options, &backing_options, "backing.");
ret = bdrv_open_backing_file(bs, backing_options, &local_err);
if (ret < 0) {
goto close_and_fail;
Expand Down
2 changes: 2 additions & 0 deletions include/qapi/qmp/qdict.h
Expand Up @@ -67,4 +67,6 @@ const char *qdict_get_try_str(const QDict *qdict, const char *key);
QDict *qdict_clone_shallow(const QDict *src);
void qdict_flatten(QDict *qdict);

void qdict_extract_subqdict(QDict *src, QDict **dst, const char *start);

#endif /* QDICT_H */
21 changes: 21 additions & 0 deletions qobject/qdict.c
Expand Up @@ -527,3 +527,24 @@ void qdict_flatten(QDict *qdict)
{
qdict_do_flatten(qdict, qdict, NULL);
}

/* extract all the src QDict entries starting by start into dst */
void qdict_extract_subqdict(QDict *src, QDict **dst, const char *start)

{
const QDictEntry *entry, *next;
const char *p;

*dst = qdict_new();
entry = qdict_first(src);

while (entry != NULL) {
next = qdict_next(src, entry);
if (strstart(entry->key, start, &p)) {
qobject_incref(entry->value);
qdict_put_obj(*dst, p, entry->value);
qdict_del(src, entry->key);
}
entry = next;
}
}

0 comments on commit 5726d87

Please sign in to comment.