From: Gustavo A. R. Silva > Sent: 25 March 2021 21:12 > > On 3/25/21 10:29, David Laight wrote: > > >>> > >>> Could you use the simpler: > >>>> struct nfs_fhbase_new { > >>>> __u8 fb_version; > >>>> __u8 fb_auth_type; > >>>> __u8 fb_fsid_type; > >>>> __u8 fb_fileid_type; > >>>> union { > >>>> __u32 fb_auth[1]; > >>>> __u32 fb_auth_flex[0]; > >>>> }; > >>>> }; > >>> > >>> Although I'm not certain flexible arrays are supported > >>> as the last element of a union. > >> > >> Nope; this is not allowed: https://godbolt.org/z/14vd4o8na > > > > Nothing an extra 'struct {__u32 fb_auth_flex[0]; }'; won't solve. > > We don't want to introduce zero-length arrays [1].
I probably meant to write [] not [0] - doesn't affect the idea. The real problem is that the compiler is likely to start rejecting references to a flex array that go beyond the end of the outer structure. Thinking back, isn't fb_auth[] at least one entry long? So it could be: struct nfs_fhbase_new { __u8 fb_version; __u8 fb_auth_type; __u8 fb_fsid_type; __u8 fb_fileid_type; __u32 fb_auth[1]; __u32 fb_auth_extra[]; }; (I've missed the 0 out this time...) David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)