# HG changeset patch # User Eric Blake # Date 1301520613 21600 # Node ID 86d0cda55f0e28a4aa87a48bbcf0f811907996a4 # Parent 4ff5a30234dadd53676ce55b2470c3d35f21aee1 passfd: standardize coding conventions * m4/afunix.m4 (gl_SOCKET_AFUNIX): Drop check for something that can be learned at compile time. * lib/passfd.c (MSG_CMSG_CLOEXEC): Reduce number of in-function ifdefs. (passfd, recvfd): Follow gnulib code conventions. Signed-off-by: Eric Blake diff -r 4ff5a30234da -r 86d0cda55f0e ChangeLog --- a/ChangeLog Wed Mar 30 14:46:02 2011 -0600 +++ b/ChangeLog Wed Mar 30 15:30:13 2011 -0600 @@ -1,5 +1,12 @@ 2011-03-30 Eric Blake + passfd: standardize coding conventions + * m4/afunix.m4 (gl_SOCKET_AFUNIX): Drop check for something that + can be learned at compile time. + * lib/passfd.c (MSG_CMSG_CLOEXEC): Reduce number of in-function + ifdefs. + (passfd, recvfd): Follow gnulib code conventions. + passfd: fix incorrect sendmsg arguments * lib/passfd.c (sendfd): Avoid uninitialized msg_flags field, and incorrect msg_controllen value. diff -r 4ff5a30234da -r 86d0cda55f0e lib/passfd.c --- a/lib/passfd.c Wed Mar 30 14:46:02 2011 -0600 +++ b/lib/passfd.c Wed Mar 30 15:30:13 2011 -0600 @@ -34,6 +34,10 @@ #include "cloexec.h" +#ifndef MSG_CMSG_CLOEXEC +# define MSG_CMSG_CLOEXEC 0 +#endif + /* sendfd sends the file descriptor fd along the socket to a process calling recvfd on the other end. @@ -43,41 +47,41 @@ sendfd (int sock, int fd) { char send = 0; - struct iovec iov[1]; + struct iovec iov; struct msghdr msg; /* send at least one char */ memset (&msg, 0, sizeof msg); - iov[0].iov_base = &send; - iov[0].iov_len = 1; - msg.msg_iov = iov; + iov.iov_base = &send; + iov.iov_len = 1; + msg.msg_iov = &iov; msg.msg_iovlen = 1; - msg.msg_name = 0; + msg.msg_name = NULL; msg.msg_namelen = 0; { #if HAVE_UNIXSOCKET_SCM_RIGHTS_BSD44_WAY struct cmsghdr *cmsg; - char buf[CMSG_SPACE (sizeof (fd))]; + char buf[CMSG_SPACE (sizeof fd)]; msg.msg_control = buf; - msg.msg_controllen = sizeof (buf); + msg.msg_controllen = sizeof buf; cmsg = CMSG_FIRSTHDR (&msg); cmsg->cmsg_level = SOL_SOCKET; cmsg->cmsg_type = SCM_RIGHTS; - cmsg->cmsg_len = CMSG_LEN (sizeof (int)); + cmsg->cmsg_len = CMSG_LEN (sizeof fd); /* Initialize the payload: */ - memcpy (CMSG_DATA (cmsg), &fd, sizeof (fd)); + memcpy (CMSG_DATA (cmsg), &fd, sizeof fd); #elif HAVE_UNIXSOCKET_SCM_RIGHTS_BSD43_WAY msg.msg_accrights = &fd; - msg.msg_accrightslen = sizeof (fd); + msg.msg_accrightslen = sizeof fd; #else errno = ENOSYS; return -1; #endif } - if (sendmsg (sock, &msg, 0) != iov[0].iov_len) + if (sendmsg (sock, &msg, 0) != iov.iov_len) return -1; return 0; } @@ -91,7 +95,7 @@ recvfd (int sock, int flags) { char recv = 0; - struct iovec iov[1]; + struct iovec iov; struct msghdr msg; if ((flags & ~O_CLOEXEC) != 0) @@ -101,33 +105,29 @@ } /* send at least one char */ - iov[0].iov_base = &recv; - iov[0].iov_len = 1; - msg.msg_iov = iov; + iov.iov_base = &recv; + iov.iov_len = 1; + msg.msg_iov = &iov; msg.msg_iovlen = 1; - msg.msg_name = 0; + msg.msg_name = NULL; msg.msg_namelen = 0; { #if HAVE_UNIXSOCKET_SCM_RIGHTS_BSD44_WAY int fd; struct cmsghdr *cmsg; - char buf[CMSG_SPACE (sizeof (fd))]; + char buf[CMSG_SPACE (sizeof fd)]; const int mone = -1; -# if HAVE_MSG_CMSG_CLOEXEC - int flags_recvmsg = (flags & O_CLOEXEC ? MSG_CMSG_CLOEXEC : 0); -# else - int flags_recvmsg = 0; -# endif + int flags_recvmsg = flags & O_CLOEXEC ? MSG_CMSG_CLOEXEC : 0; msg.msg_control = buf; - msg.msg_controllen = sizeof (buf); + msg.msg_controllen = sizeof buf; cmsg = CMSG_FIRSTHDR (&msg); cmsg->cmsg_level = SOL_SOCKET; cmsg->cmsg_type = SCM_RIGHTS; - cmsg->cmsg_len = CMSG_LEN (sizeof (int)); + cmsg->cmsg_len = CMSG_LEN (sizeof mone); /* Initialize the payload: */ - memcpy (CMSG_DATA (cmsg), &mone, sizeof (mone)); + memcpy (CMSG_DATA (cmsg), &mone, sizeof mone); msg.msg_controllen = cmsg->cmsg_len; if (recvmsg (sock, &msg, flags_recvmsg) < 0) @@ -135,7 +135,7 @@ cmsg = CMSG_FIRSTHDR (&msg); /* be paranoiac */ - if (cmsg == NULL || cmsg->cmsg_len != CMSG_LEN (sizeof (int)) + if (cmsg == NULL || cmsg->cmsg_len != CMSG_LEN (sizeof fd) || cmsg->cmsg_level != SOL_SOCKET || cmsg->cmsg_type != SCM_RIGHTS) { /* fake errno: at end the file is not available */ @@ -143,11 +143,10 @@ return -1; } - memcpy (&fd, CMSG_DATA (cmsg), sizeof (fd)); + memcpy (&fd, CMSG_DATA (cmsg), sizeof fd); -# if !HAVE_MSG_CMSG_CLOEXEC /* set close-on-exec flag */ - if (flags & O_CLOEXEC) + if (!MSG_CMSG_CLOEXEC && (flags & O_CLOEXEC)) { if (set_cloexec_flag (fd, true) < 0) { @@ -157,7 +156,6 @@ return -1; } } -# endif return fd; @@ -165,7 +163,7 @@ int fd; msg.msg_accrights = &fd; - msg.msg_accrightslen = sizeof (fd); + msg.msg_accrightslen = sizeof fd; if (recvmsg (sock, &msg, 0) < 0) return -1; @@ -175,7 +173,7 @@ if (set_cloexec_flag (fd, true) < 0) { int saved_errno = errno; - (void) close (fd); + close (fd); errno = saved_errno; return -1; } diff -r 4ff5a30234da -r 86d0cda55f0e m4/afunix.m4 --- a/m4/afunix.m4 Wed Mar 30 14:46:02 2011 -0600 +++ b/m4/afunix.m4 Wed Mar 30 15:30:13 2011 -0600 @@ -1,4 +1,4 @@ -# afunix.m4 serial 5 +# afunix.m4 serial 6 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -113,31 +113,4 @@ AC_DEFINE([HAVE_UNIXSOCKET_SCM_RIGHTS_BSD43_WAY], [1], [Define to 1 if fd can be sent/received in the BSD4.3 way.]) fi - - AC_MSG_CHECKING([for UNIX domain sockets recvmsg() MSG_CMSG_CLOEXEC flag]) - AC_CACHE_VAL([gl_cv_socket_unix_msg_cmsg_cloexec], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #ifdef HAVE_SYS_SOCKET_H - #include - #endif - #ifdef HAVE_SYS_UN_H - #include - #endif - #ifdef HAVE_WINSOCK2_H - #include - #endif - ]], - [[int flags = MSG_CMSG_CLOEXEC; - if (&flags) return 0; - ]])], - [gl_cv_socket_unix_msg_cmsg_cloexec=yes], - [gl_cv_socket_unix_msg_cmsg_cloexec=no]) - ]) - AC_MSG_RESULT([$gl_cv_socket_unix_msg_cmsg_cloexec]) - if test $gl_cv_socket_unix_msg_cmsg_cloexec = yes; then - AC_DEFINE([HAVE_MSG_CMSG_CLOEXEC], [1], - [Define to 1 if recvmsg could be specified with MSG_CMSG_CLOEXEC.]) - fi ])