glibc在2.23版本有一个修改https://patchwork.sourceware.org/patch/12453/.
在我的Cotex A7上试验:
修改前:
struct sockaddr_in6
{
sin6_family; //0th byte
sin6_port; //2nd byte
sin6_flowinfo; //4th byte
sin6_addr; //8th byte
...
};
struct sockaddr_storage
{
ss_family; //0th byte
__ss_align; //4th byte
__ss_padding; //8th byte
};
修改后:
struct sockaddr_storage
{
ss_family; //0th byte
__ss_padding; //2nd byte
__ss_align; //124th byte
};
这次合入把sockaddr__storage结构中的__ss_align和__ss_padding交换了位置。
这样会导致以前常用的下列类型强转的用法出现问题:_
struct sockaddr_storage prefix_addr
(struct sockaddr_in6 *)&(prefix_addr)->sin6_addr.s6_addr
请问有没有人能看出glibc这个修改是什么用意?
我上述的强转用法是否本身就不规范(虽然glibc2.23之前一直运行稳定)。