variant length array?
Robert P. J. Day
rpjday at crashcourse.ca
Tue Apr 5 17:16:31 EDT 2016
On Tue, 5 Apr 2016, Bjørn Mork wrote:
> "Robert P. J. Day" <rpjday at crashcourse.ca> writes:
> > On Tue, 5 Apr 2016, Wenda Ni wrote:
> >
> >> Hi all,
> >>
> >> I come across the following code in a kernel module code. It defines
> >> an array whose length is variant at runtime, depending on the actual
> >> inputs. It seems that kernel compiler supports this, which is
> >> obvious an error in the standard ANSI C. Do I have the correct
> >> understanding on it?
> >>
> >> Thank you.
> >>
> >>
> >> u32 rxe_icrc_hdr(struct rxe_pkt_info *pkt, struct sk_buff *skb)
> >> {
> >> ...
> >> int hdr_size = sizeof(struct udphdr) +
> >> (skb->protocol == htons(ETH_P_IP) ?
> >> sizeof(struct iphdr) : sizeof(struct ipv6hdr));
> >> u8 tmp[hdr_size + RXE_BTH_BYTES];
> >> ...
> >> }
> >
> > pretty sure "sizeof" can be calculated at compile time so i don't
> > see a problem here.
>
> Yes, but skb->protocol is variable and sizeof(struct iphdr) !=
> sizeof(struct ipv6hdr)). Is the compiler smart enough to just use the
> largest possible value? The logic here is pretty similar to a union,
> which it of course wouldn't have any problems calculating the size of.
ah, quite so, i didn't look closely enough.
rday
--
========================================================================
Robert P. J. Day Ottawa, Ontario, CANADA
http://crashcourse.ca
Twitter: http://twitter.com/rpjday
LinkedIn: http://ca.linkedin.com/in/rpjday
========================================================================
More information about the Kernelnewbies
mailing list