From: Francis Dupont Date: Mon, 15 Oct 2018 13:37:21 +0000 (+0200) Subject: [165-netbsd-8-fixes] CCMSG_DATA X-Git-Tag: 458-config-backend-support-in-src-lib_base~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6676b9adf8eb1c13360b95846b409b6f54b3382c;p=thirdparty%2Fkea.git [165-netbsd-8-fixes] CCMSG_DATA --- diff --git a/src/lib/util/io/fd_share.cc b/src/lib/util/io/fd_share.cc index ff33479647..a57fc54ee2 100644 --- a/src/lib/util/io/fd_share.cc +++ b/src/lib/util/io/fd_share.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2010-2015 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2010-2018 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -98,7 +98,15 @@ recv_fd(const int sock) { int fd = FD_OTHER_ERROR; if (cmsg != NULL && cmsg->cmsg_len == cmsg_len(sizeof(int)) && cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) { +// Some systems (e.g. recent NetBSD) converted all CMSG access macros +// to static_cast when used in C++ code. As cmsg is declared const +// this makes the CMSG_DATA macro to not compile. But fortunately +// these systems provide a const alternative named CCMSG_DATA. +#ifdef CCMSG_DATA + std::memcpy(&fd, CCMSG_DATA(cmsg), sizeof(int)); +#else std::memcpy(&fd, CMSG_DATA(cmsg), sizeof(int)); +#endif } free(msghdr.msg_control); int new_fd = -1;