Marc-André Lureau <marcandre.lur...@redhat.com> writes: > Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > block/quorum.c | 27 ++++++++------------------- > 1 file changed, 8 insertions(+), 19 deletions(-) > > diff --git a/block/quorum.c b/block/quorum.c > index d04da4f430..e4271caa7a 100644 > --- a/block/quorum.c > +++ b/block/quorum.c > @@ -22,6 +22,7 @@ > #include "qapi/qmp/qjson.h" > #include "qapi/qmp/qlist.h" > #include "qapi/qmp/qstring.h" > +#include "qapi/util.h" > #include "qapi-event.h" > #include "crypto/hash.h" > > @@ -867,24 +868,6 @@ static QemuOptsList quorum_runtime_opts = { > }, > }; > > -static int parse_read_pattern(const char *opt) > -{ > - int i; > - > - if (!opt) { > - /* Set quorum as default */ > - return QUORUM_READ_PATTERN_QUORUM; > - } > - > - for (i = 0; i < QUORUM_READ_PATTERN__MAX; i++) { > - if (!strcmp(opt, QuorumReadPattern_lookup[i])) { > - return i; > - } > - } > - > - return -EINVAL; > -} > - > static int quorum_open(BlockDriverState *bs, QDict *options, int flags, > Error **errp) > { > @@ -925,7 +908,13 @@ static int quorum_open(BlockDriverState *bs, QDict > *options, int flags, > goto exit; > } > > - ret = parse_read_pattern(qemu_opt_get(opts, QUORUM_OPT_READ_PATTERN)); > + if (!qemu_opt_get(opts, QUORUM_OPT_READ_PATTERN)) { > + ret = QUORUM_READ_PATTERN_QUORUM; > + } else { > + ret = qapi_enum_parse(QuorumReadPattern_lookup, > + qemu_opt_get(opts, QUORUM_OPT_READ_PATTERN), > + QUORUM_READ_PATTERN__MAX, -EINVAL, NULL); > + } > if (ret < 0) { > error_setg(&local_err, "Please set read-pattern as fifo or quorum"); > goto exit;
qapi_enum_parse() copes with null input: it returns its fourth argument then. I don't like that also returns it on error, but that shouldn't be a problem here. If we can live with qapi_enum_parse()'s sub-par error message, then this should do: ret = qapi_enum_parse(QuorumReadPattern_lookup, qemu_opt_get(opts, QUORUM_OPT_READ_PATTERN), QUORUM_READ_PATTERN__MAX, QUORUM_READ_PATTERN_QUORUM, &local_err); if (local_err) { goto exit; } If not, we'd have to replace @local_err: if (local_err) { error_free(local_err); error_setg(&local_err, "Please set read-pattern as fifo or quorum"); goto exit; } or amend it with error_append_hint() or error_prepend(). Berto, what do you think?