mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 23:03:54 -06:00
util: add iterators for QemuOpts values
To iterate over all QemuOpts currently requires using a callback function which is inconvenient for control flow. Add support for using iterator functions more directly QemuOptsIter iter; QemuOpt *opt; qemu_opts_iter_init(&iter, opts, "repeated-key"); while ((opt = qemu_opts_iter_next(&iter)) != NULL) { ....do something... } Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> Message-id: 20170203120649.15637-8-berrange@redhat.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
57a6d6d538
commit
e998e2090f
2 changed files with 28 additions and 0 deletions
|
@ -332,6 +332,25 @@ const char *qemu_opt_get(QemuOpts *opts, const char *name)
|
|||
return opt ? opt->str : NULL;
|
||||
}
|
||||
|
||||
void qemu_opt_iter_init(QemuOptsIter *iter, QemuOpts *opts, const char *name)
|
||||
{
|
||||
iter->opts = opts;
|
||||
iter->opt = QTAILQ_FIRST(&opts->head);
|
||||
iter->name = name;
|
||||
}
|
||||
|
||||
const char *qemu_opt_iter_next(QemuOptsIter *iter)
|
||||
{
|
||||
QemuOpt *ret = iter->opt;
|
||||
if (iter->name) {
|
||||
while (ret && !g_str_equal(iter->name, ret->name)) {
|
||||
ret = QTAILQ_NEXT(ret, next);
|
||||
}
|
||||
}
|
||||
iter->opt = ret ? QTAILQ_NEXT(ret, next) : NULL;
|
||||
return ret ? ret->str : NULL;
|
||||
}
|
||||
|
||||
/* Get a known option (or its default) and remove it from the list
|
||||
* all in one action. Return a malloced string of the option value.
|
||||
* Result must be freed by caller with g_free().
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue