--- IO-FDPass/FDPass.xs 2013/04/05 08:20:36 1.5 +++ IO-FDPass/FDPass.xs 2014/10/31 07:09:43 1.6 @@ -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);