[PATCH 0/5] MR242: winegstreamer: Use wg_sample to read wg_parser data.

Rémi Bernon (@rbernon) wine at gitlab.winehq.org
Thu Jun 16 01:58:34 CDT 2022


> > diff --git a/dlls/winegstreamer/wg_sample.c b/dlls/winegstreamer/wg_sample.c
> > index ae8a2d4d0c7..eb46982fabf 100644
> > --- a/dlls/winegstreamer/wg_sample.c
> > +++ b/dlls/winegstreamer/wg_sample.c
> > @@ -47,6 +47,11 @@ struct sample
> >   
> >       union
> >       {
> > +        struct
> > +        {
> > +            void *__pad[3];
> > +            BYTE buffer[];
> > +        } raw;
> >           struct
> >           {
> >               IMFSample *sample;
> 
> Why the padding?

So that buffer is aligned to the end of the structure and so that we can
safely use a flexible array member. Otherwise offsetof buffer[size] may
be shorter than the struct, ending up with a undefined behavior when
accessing a partially allocated structure and an eventual GCC warning.


> > +HRESULT wg_sample_create_raw(UINT32 size, struct wg_sample **out)
> > +{
> > +    struct sample *sample;
> > +
> > +    if (!(sample = calloc(1, offsetof(struct sample, u.raw.buffer[size]))))
> > +        return E_OUTOFMEMORY;
> > +
> > +    sample->wg_sample.data = sample->u.raw.buffer;
> > +    sample->wg_sample.size = 0;
> > +    sample->wg_sample.max_size = size;
> > +    sample->ops = &raw_sample_ops;
> > +
> > +    TRACE("Created wg_sample %p, size %u.\n", &sample->wg_sample, size);
> > +    *out = &sample->wg_sample;
> > +    return S_OK;
> > +}
> 
> It strikes me as unnecessary to return HRESULT from this function, 
> especially considering you're not actually using the HRESULT value (only 
> testing for failure). It'd be simpler just to return "sample" in that case.

It makes it consistent with the other sample creation functions, and
other creations functions in general.

-- 
https://gitlab.winehq.org/wine/wine/-/merge_requests/242#note_2177



More information about the wine-devel mailing list