[libvirt] [PATCH v3 1/4] iptablesFormatNetwork(): constify target of "netaddr" parameter

Laszlo Ersek lersek at redhat.com
Tue Sep 24 13:33:50 UTC 2013


On 09/24/13 15:01, Paolo Bonzini wrote:
> Il 24/09/2013 10:46, Laine Stump ha scritto:
>> On 09/23/2013 08:03 PM, Laszlo Ersek wrote:
>>> ... and adapt functions that would cast away the new const qualifier.
>>>
>>> Given
>>>
>>>   typedef virSocketAddr *virSocketAddrPtr;
>>>
>>> Compare the parse trees of the following two declarations:
>>>
>>>   (a) const virSocketAddrPtr  addr;
>>>   (b) const virSocketAddr    *addr;
>>
>> Umm.. Eric? A little help? :-)
> 
> Heh :)
> 
> In more layman terms, you can read types out in English like this:
> 
> (1) read the type from right to the left
> 
> (2) if "const" is the first token, read it as "that is constant" and
> associate it to the closest type.  Alternatively, move such a "const"
> right but no further than the first *.
> 
> (3) if "const" is anywhere else, read it as "constant"
> 
> So:
> 
> const virSocketAddrPtr addr
>       ("addr is a virSocketAddrPtr that is constant")
> -> virSocketAddrPtr const addr
>       ("addr is a constant virSocketAddrPtr")
> -> virSocketAddr * const addr
>       ("addr is a constant pointer to virSocketAddr
> 
> const virSocketAddr *addr
>       ("addr is a pointer to a virSocketAddr that is constant")
> -> virSocketAddr const *addr
>       ("addr is a pointer to a constant virSocketAddr")
> 
> Laszlo, correct me if I'm wrong.

Never thought of it this way before, but it does seem to work in the
examples above :)

> 
> I suspect that forbidding const.*Ptr in "make syntax-check" wouldn't be
> a bad idea.

The pattern should probably require some whitespace in the middle as
well, if constWhateverPtr typedefs are to be accepted as valid.

Thanks
Laszlo




More information about the libvir-list mailing list