[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