widl: Initialize variables that are not necessarily filled in encode_type

Huw Davies huw at codeweavers.com
Thu Feb 23 03:33:35 CST 2017


On Wed, Feb 22, 2017 at 07:59:50PM +0100, André Hentschel wrote:
> Am 22.02.2017 um 10:35 schrieb Huw Davies:
> > On Mon, Feb 20, 2017 at 10:06:46PM +0100, André Hentschel wrote:
> >> Signed-off-by: André Hentschel <nerv at dawncrow.de>
> >> ---
> >>
> >> This helps with reproducable builds
> >>
> >>  tools/widl/write_msft.c | 2 +-
> >>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c
> >> index 137bb2d..39be30b 100644
> >> --- a/tools/widl/write_msft.c
> >> +++ b/tools/widl/write_msft.c
> >> @@ -2195,7 +2195,7 @@ static void add_union_typeinfo(msft_typelib_t *typelib, type_t *tunion)
> >>  static void add_typedef_typeinfo(msft_typelib_t *typelib, type_t *tdef)
> >>  {
> >>      msft_typeinfo_t *msft_typeinfo = NULL;
> >> -    int alignment, datatype1, datatype2, size, duplicate = 0;
> >> +    int alignment = 0, datatype1 = 0, datatype2 = 0, size = 0, duplicate = 0;
> > 
> > encode_type() initializes alignment, datatype1 and size in all cases, so these
> > are unnecessary.  The question then becomes where is the best place to
> > initialize datatype2 (a.k.a. decoded_size).  Since no caller to encode_type()
> > relies on the existing value being preserved, it makes sense to initialize
> > it in encode_type().  So just send the patch you originally sent to wine-devel.
> > 
> > Huw.
> > 
> 
>
> as far as I can see those variables are also not set in every case,
> e.g. VT_VARIANT further the encode_type() can recurse, and I would
> expect the variables to stay the same (in case they need to be
> incremented), so setting decoded_size to 0 at the beginning seems
> wrong on the other hand, no incrementation is done, so I think for
> now I can resend my old patch... I just wonder what to do with the
> other variables

The VT_VARIANT case is a bug, I'll work on fixing that, thanks
for spotting it.

The recursion is handled by passing a separate variable and adding it
after return.  I suspect that the cumulative approach was originally
the plan, and that's why *decoded_size was never initialized.

Huw.



More information about the wine-devel mailing list