[vlc-devel] [PATCH] objects: get the vlc_object_t from vlc_object_internals using vlc_internals()
Rémi Denis-Courmont
remi at remlab.net
Tue Jul 25 19:45:26 CEST 2017
Le tiistaina 25. heinäkuuta 2017, 19.22.19 EEST Steve Lhomme a écrit :
> On Tue, Jul 25, 2017 at 6:33 PM, Rémi Denis-Courmont <remi at remlab.net>
wrote:
> > Le tiistaina 25. heinäkuuta 2017, 18.06.32 EEST Steve Lhomme a écrit :
> >> So that's it coherent with the rest of the usages.
> >
> > Not really. The other uses operate on an initialized object. Here, we are
> > creating and initializing the object.
>
> It's just about accessing the pointer.
Says who? I wrote those accessor macros, and that´s not how I conceived them
nor how I think of them. Using accessors on unitialized objects makes no sense
to me.
> It doesn't matter what is in the pointed data.
The current implementation of the macros is such that initialization does not
matter. Likewise, it is such that this patch does not matter; it replaces one
expression with an equivalent expression.
So nack.
> > flexible array in ISO C ensures that the two expressions are equivalent.
> > One uses byte offsets, and the other direct pointer arithmetic.
>
> If that was equivalent, this wouldn't fail:
> static_assert( sizeof(struct vlc_object_internals) !=
> offsetof(struct vlc_object_internals, aligned_end),
> "invalid align_end access");
It *is* equivalent, and that assertion *cannot* fail.
By definition of pointer arithmetic, pointer plus one equals the pointer plus
the size of pointed type and by definition of flexible arrays, the offset of a
flexible array within its contained structure is the size of the structure.
That was the whole point of appending aligned_end in the first place.
--
雷米‧德尼-库尔蒙
https://www.remlab.net/
More information about the vlc-devel
mailing list