The following assertions fail on non-Linux platforms after c0c2010535 which inserted padding based on musl definitions. This padding only exists on musl to workaround a discrepancy betweeen the POSIX API and Linux ABI, and is incorrect on other POSIX operating systems.
This change makes the padding musl-only, and documents the reason it exists. With this change, the assertions pass on Linux and FreeBSD targets. The corresponding definitions on other targets line up with the POSIX and FreeBSD ones, so they should work there too.
conststd=@import("std");constassert=std.debug.assert;constmsghdr=std.c.msghdr;constcmsghdr=std.c.cmsghdr;constc=@cImport({@cInclude("sys/socket.h");});comptime{assert(@offsetOf(msghdr,"iovlen")==@offsetOf(c.msghdr,"msg_iovlen"));assert(@offsetOf(msghdr,"controllen")==@offsetOf(c.msghdr,"msg_controllen"));assert(@offsetOf(msghdr,"control")==@offsetOf(c.msghdr,"msg_control"));assert(@offsetOf(msghdr,"flags")==@offsetOf(c.msghdr,"msg_flags"));assert(@sizeOf(msghdr)==@sizeOf(c.msghdr));assert(@offsetOf(cmsghdr,"len")==@offsetOf(c.cmsghdr,"cmsg_len"));assert(@offsetOf(cmsghdr,"level")==@offsetOf(c.cmsghdr,"cmsg_level"));assert(@sizeOf(cmsghdr)==@sizeOf(c.cmsghdr));}
The following assertions fail on non-Linux platforms after c0c20105354 which inserted padding based on musl definitions. This padding only exists on musl to workaround a discrepancy betweeen the POSIX API and Linux ABI, and is incorrect on other POSIX operating systems.
This change makes the padding musl-only, and documents the reason it exists. With this change, the assertions pass on Linux and FreeBSD targets. The corresponding definitions on other targets line up with the POSIX and FreeBSD ones, so they should work there too.
```zig
const std = @import("std");
const assert = std.debug.assert;
const msghdr = std.c.msghdr;
const cmsghdr = std.c.cmsghdr;
const c = @cImport({
@cInclude("sys/socket.h");
});
comptime {
assert(@offsetOf(msghdr, "iovlen") == @offsetOf(c.msghdr, "msg_iovlen"));
assert(@offsetOf(msghdr, "controllen") == @offsetOf(c.msghdr, "msg_controllen"));
assert(@offsetOf(msghdr, "control") == @offsetOf(c.msghdr, "msg_control"));
assert(@offsetOf(msghdr, "flags") == @offsetOf(c.msghdr, "msg_flags"));
assert(@sizeOf(msghdr) == @sizeOf(c.msghdr));
assert(@offsetOf(cmsghdr, "len") == @offsetOf(c.cmsghdr, "cmsg_len"));
assert(@offsetOf(cmsghdr, "level") == @offsetOf(c.cmsghdr, "cmsg_level"));
assert(@sizeOf(cmsghdr) == @sizeOf(c.cmsghdr));
}
```