--- IO-FDPass/FDPass.xs 2013/04/05 08:20:36 1.5 +++ IO-FDPass/FDPass.xs 2016/07/11 23:00:00 1.7 @@ -34,11 +34,11 @@ #include #ifndef CMSG_SPACE - # define CMSG_SPACE(len) (sizeof (cmsghdr) + len) + # define CMSG_SPACE(len) (sizeof (struct cmsghdr) + len) #endif #ifndef CMSG_LEN - # define CMSG_LEN(len) (sizeof (cmsghdr) + len) + # define CMSG_LEN(len) (sizeof (struct cmsghdr) + len) #endif #endif @@ -194,24 +194,16 @@ return -1; int fd = -1; - errno = EDOM; - if ( - data == 0 -#if __OpenBSD__ - && msg.msg_controllen >= CMSG_LEN (sizeof (int)) /* work around a bug in at least openbsd 4.5 and 4.8 */ -#else - && msg.msg_controllen >= CMSG_SPACE (sizeof (int)) -#endif - ) { - struct cmsghdr *cmsg = CMSG_FIRSTHDR (&msg); + struct cmsghdr *cmsg = CMSG_FIRSTHDR (&msg); - if (cmsg->cmsg_level == SOL_SOCKET - && cmsg->cmsg_type == SCM_RIGHTS - && cmsg->cmsg_len >= CMSG_LEN (sizeof (int))) - fd = *(int *)CMSG_DATA (cmsg); - } + if (data == 0 + && cmsg + && cmsg->cmsg_level == SOL_SOCKET + && cmsg->cmsg_type == SCM_RIGHTS + && cmsg->cmsg_len >= CMSG_LEN (sizeof (int))) + fd = *(int *)CMSG_DATA (cmsg); free (buf);