From 95e48f3e3aedce1f276a5f0591f706c2df95ee72 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 5 Oct 2017 16:25:41 +0100 Subject: [PATCH] fishdescriptor: reorganise to my taste Signed-off-by: Ian Jackson --- fishdescriptor/donate.c | 55 +++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/fishdescriptor/donate.c b/fishdescriptor/donate.c index c2d59cb..60ca266 100644 --- a/fishdescriptor/donate.c +++ b/fishdescriptor/donate.c @@ -16,39 +16,36 @@ * along with this program. If not, see . */ -int libxl__sendmsg_fds(libxl__gc *gc, int carrier, - const void *data, size_t datalen, - int nfds, const int fds[], const char *what) { - struct msghdr msg = { 0 }; - struct cmsghdr *cmsg; - size_t spaceneeded = nfds * sizeof(fds[0]); - char control[CMSG_SPACE(spaceneeded)]; - struct iovec iov; - int r; +/* return conventions: functions here return errno values */ - iov.iov_base = (void*)data; - iov.iov_len = datalen; +static int fishdescriptor_sendmsg_fds(int carrier, + int nfds, const int fds[]) { + struct msghdr msg = { 0 }; + struct cmsghdr *cmsg; + size_t spaceneeded = nfds * sizeof(fds[0]); + char control[CMSG_SPACE(spaceneeded)]; + struct iovec iov; + int r; - /* compose the message */ - msg.msg_iov = &iov; - msg.msg_iovlen = 1; - msg.msg_control = control; - msg.msg_controllen = sizeof(control); + iov.iov_base = &nfds; + iov.iov_len = sizeof(nfds); - /* attach open fd */ - cmsg = CMSG_FIRSTHDR(&msg); - cmsg->cmsg_level = SOL_SOCKET; - cmsg->cmsg_type = SCM_RIGHTS; - cmsg->cmsg_len = CMSG_LEN(spaceneeded); - memcpy(CMSG_DATA(cmsg), fds, spaceneeded); + /* compose the message */ + msg.msg_iov = &iov; + msg.msg_iovlen = 1; + msg.msg_control = control; + msg.msg_controllen = sizeof(control); - msg.msg_controllen = cmsg->cmsg_len; - - r = sendmsg(carrier, &msg, 0); - if (r < 0) { - LOGE(ERROR, "failed to send fd-carrying message (%s)", what); - return ERROR_FAIL; - } + /* attach open fd */ + cmsg = CMSG_FIRSTHDR(&msg); + cmsg->cmsg_level = SOL_SOCKET; + cmsg->cmsg_type = SCM_RIGHTS; + cmsg->cmsg_len = CMSG_LEN(spaceneeded); + memcpy(CMSG_DATA(cmsg), fds, spaceneeded); + msg.msg_controllen = cmsg->cmsg_len; + + r = sendmsg(carrier, &msg, 0); + if (r < 0) return 0; } -- 2.30.2