Compilation is failing because we are doing something not allowed by the language spec, but OK by GCC extensions in our MAX() macro.
src/resolve/resolved-manager.c:759:43: error: non-const static data member must be initialized out of line uint8_t buffer[CMSG_SPACE(MAX(sizeof(struct in_pktinfo), sizeof(struct in6_pktinfo))) ^ Add a new constant that does this in a way both compilers are OK with, since we know all factors in the size computation are static. --- A longer list of the compile errors: https://paste.xinu.at/RMRdv1/ src/resolve/resolved-dns-stream.c | 2 +- src/resolve/resolved-manager.c | 2 +- src/resolve/resolved-manager.h | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/resolve/resolved-dns-stream.c b/src/resolve/resolved-dns-stream.c index eb78587..dbcacaa 100644 --- a/src/resolve/resolved-dns-stream.c +++ b/src/resolve/resolved-dns-stream.c @@ -64,7 +64,7 @@ static int dns_stream_complete(DnsStream *s, int error) { static int dns_stream_identify(DnsStream *s) { union { struct cmsghdr header; /* For alignment */ - uint8_t buffer[CMSG_SPACE(MAX(sizeof(struct in_pktinfo), sizeof(struct in6_pktinfo))) + uint8_t buffer[PKTINFO_CMSG_SPACE + EXTRA_CMSG_SPACE /* kernel appears to require extra space */]; } control; struct msghdr mh = {}; diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index 1288395..75a143d 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -756,7 +756,7 @@ int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret) { _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL; union { struct cmsghdr header; /* For alignment */ - uint8_t buffer[CMSG_SPACE(MAX(sizeof(struct in_pktinfo), sizeof(struct in6_pktinfo))) + uint8_t buffer[PKTINFO_CMSG_SPACE + CMSG_SPACE(int) /* ttl/hoplimit */ + EXTRA_CMSG_SPACE /* kernel appears to require extra buffer space */]; } control; diff --git a/src/resolve/resolved-manager.h b/src/resolve/resolved-manager.h index 9d824e1..5cffd9b 100644 --- a/src/resolve/resolved-manager.h +++ b/src/resolve/resolved-manager.h @@ -147,6 +147,7 @@ int manager_our_packet(Manager *m, DnsPacket *p); DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free); +#define PKTINFO_CMSG_SPACE CMSG_SPACE(sizeof(struct in_pktinfo) > sizeof(struct in6_pktinfo) ? sizeof(struct in_pktinfo) : sizeof(struct in6_pktinfo)) #define EXTRA_CMSG_SPACE 1024 const char* support_to_string(Support p) _const_; -- 2.0.4 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel