[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH v2] qapi for audio backends
From: |
Gerd Hoffmann |
Subject: |
Re: [Qemu-devel] [RFC PATCH v2] qapi for audio backends |
Date: |
Mon, 08 Jun 2015 09:42:25 +0200 |
On Fr, 2015-06-05 at 15:54 +0200, Kővágó Zoltán wrote:
> Hi,
>
> 2015-06-05 12:57 keltezéssel, Gerd Hoffmann írta:
> >> Yeah, I've already hit a problem. The opts_visitor doesn't really handle
> >> nested structs (it just flattens it into a single, non hierarchic
> >> namespace), which is a problem because of the input and output options.
> >> First I need to make them required (the in and out in Audiodev) if I
> >> want the current visitor to visit them at all, but it's still not enough.
> >
> > I think we should improve the visitor instead of making in & out
> > mandatory just because the current implementation (which simply
> > implements the stuff needed for Netdev) can't handle it.
>
> It's not that simple I think. The visit_optional only receives a field
> name, but no info about the type of the field, but it has to decide if
> it wants the field using only this info. So sort of hacking an if
> (strcmp(name, "in") == 0 || strcmp(name, "out") == 0) ... into the
> option visitor code, the only way is probably to add a type parameter to
> visit_optional (struct/union/uint32/whatever) and in the opts visitor if
> type is struct or union, force visiting it. Is it ok?
Thinking about this a bit more, I suspect it becomes tricky when it
comes to allocation. We want allocate *in and *out only in case there
are actually parameters for it on the command line.
But I think we have to pass something down to the struct visitor (given
how visitors are designed). So allocate, pass down, then free again in
case nothing was filled? How do we figure nothing was filled, in the
generic visit_optional function?
Of course we can avoid this complexity by simply allocating *in and *out
unconditionally, but then it is pointless to make it optional in the
first place. So maybe it is better to go with your original idea to
just make them mandatory (and all elements inside optional).
cheers,
Gerd