From 6676b9adf8eb1c13360b95846b409b6f54b3382c Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Mon, 15 Oct 2018 15:37:21 +0200 Subject: [PATCH] [165-netbsd-8-fixes] CCMSG_DATA --- src/lib/util/io/fd_share.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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; -- 2.47.2