On Tue, Aug 7, 2012 at 2:44 PM, Benoît Canet <benoit.ca...@gmail.com> wrote: > Signed-off-by: Benoit Canet <ben...@irqsave.net> > --- > block/quorum.c | 62 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 62 insertions(+) > > diff --git a/block/quorum.c b/block/quorum.c > index e0405b6..de58ab8 100644 > --- a/block/quorum.c > +++ b/block/quorum.c > @@ -47,11 +47,73 @@ struct QuorumAIOCB { > int vote_ret; > }; > > +/* Valid quorum filenames look like > + * quorum:path/to/a_image:path/to/b_image:path/to/c_image > + */ > +static int quorum_open(BlockDriverState *bs, const char *filename, int flags) > +{ > + BDRVQuorumState *s = bs->opaque; > + int ret, i; > + char *a, *b, *c, *filenames[3]; > + > + /* Parse the quorum: prefix */ > + if (strncmp(filename, "quorum:", strlen("quorum:"))) { > + return -EINVAL; > + } > + a = g_strdup(filename + strlen("quorum:")); > + > + /* Find separators */ > + b = strchr(a, ':'); > + if (b == NULL) { > + return -EINVAL;
Leaks a. Same for returns below. > static BlockDriver bdrv_quorum = { > .format_name = "quorum", > .protocol_name = "quorum", > > .instance_size = sizeof(BDRVQuorumState), > + > + .bdrv_file_open = quorum_open, Please squash quorum_close() into this commit so the g_strdup() filesnames[] aren't leaked on close.