On 13/12/2022 12:55, Kevin Brodsky wrote:
On 13/12/2022 13:30, Kristina Martsenko wrote:
On 13/12/2022 09:45, Kevin Brodsky wrote:
Change it to an unsigned long. Musl uses the same type for its struct definitions.
I've just looked at the definition of struct sockaddr_storage in Musl and it is not in fact using this trick (probably because compat is not a concern there), the __align unsigned long at the end is not actually aligning anything (it's a struct, not a union). Or am I missing something?
I'm not sure what you mean. Without the __ss_align unsigned long, the alignment of the whole struct would be 2. With it, the alignment is 8 (or 4 on 32-bit). I thought that whether it is a struct or union doesn't matter, the same rules apply (I think the kernel just uses a union to make it clear that the size of __data is 126, to not factor in the size of __align). Am I missing something?
I think I see it now, __ss_align has the desired alignment and because of the layout of the struct, you always end up with the start of the struct having the same alignment as __ss_align (the other members having a smaller alignment requirement than __ss_align). Really confusing though, using a union like in the uapi header is a lot clearer. Either way, I agree this is equivalent in terms of type usage, no need to change that paragraph and sorry for the noise!
Kevin
That is indeed a bit confusing ! No worries, I think it helps everyone (myself very much included !) to have that kind of thinking out loud, and thanks Kristina for the details as well.
Will keep the paragraph as-is then if you're happy with it.
Thanks both, Téo