From: Wolfgang Bumiller Date: Thu, 4 Jul 2019 07:17:04 +0000 (+0200) Subject: af_unix: add lxc_abstract_unix_send_fds_iov X-Git-Tag: lxc-4.0.0~149^2~17 X-Git-Url: https://git.proxmox.com/?p=mirror_lxc.git;a=commitdiff_plain;h=e1726045d4ccd493e32e9b7c926ad8b6090734e2;hp=cfc3b342090ed2ea4d2f1a916ac58aeab4651a62 af_unix: add lxc_abstract_unix_send_fds_iov Signed-off-by: Wolfgang Bumiller --- diff --git a/src/lxc/af_unix.c b/src/lxc/af_unix.c index c688a8746..7ab499a4f 100644 --- a/src/lxc/af_unix.c +++ b/src/lxc/af_unix.c @@ -153,19 +153,16 @@ int lxc_abstract_unix_connect(const char *path) return fd; } -int lxc_abstract_unix_send_fds(int fd, int *sendfds, int num_sendfds, - void *data, size_t size) +int lxc_abstract_unix_send_fds_iov(int fd, int *sendfds, int num_sendfds, + struct iovec *iov, size_t iovlen) { __do_free char *cmsgbuf = NULL; int ret; struct msghdr msg; - struct iovec iov; struct cmsghdr *cmsg = NULL; - char buf[1] = {0}; size_t cmsgbufsize = CMSG_SPACE(num_sendfds * sizeof(int)); memset(&msg, 0, sizeof(msg)); - memset(&iov, 0, sizeof(iov)); cmsgbuf = malloc(cmsgbufsize); if (!cmsgbuf) { @@ -185,10 +182,8 @@ int lxc_abstract_unix_send_fds(int fd, int *sendfds, int num_sendfds, memcpy(CMSG_DATA(cmsg), sendfds, num_sendfds * sizeof(int)); - iov.iov_base = data ? data : buf; - iov.iov_len = data ? size : sizeof(buf); - msg.msg_iov = &iov; - msg.msg_iovlen = 1; + msg.msg_iov = iov; + msg.msg_iovlen = iovlen; again: ret = sendmsg(fd, &msg, MSG_NOSIGNAL); @@ -199,6 +194,18 @@ again: return ret; } +int lxc_abstract_unix_send_fds(int fd, int *sendfds, int num_sendfds, + void *data, size_t size) +{ + char buf[1] = {0}; + struct iovec iov = { + .iov_base = data ? data : buf, + .iov_len = data ? size : sizeof(buf), + }; + return lxc_abstract_unix_send_fds_iov(fd, sendfds, num_sendfds, &iov, + 1); +} + int lxc_unix_send_fds(int fd, int *sendfds, int num_sendfds, void *data, size_t size) { diff --git a/src/lxc/af_unix.h b/src/lxc/af_unix.h index 8a068d920..9f4729c0b 100644 --- a/src/lxc/af_unix.h +++ b/src/lxc/af_unix.h @@ -35,6 +35,9 @@ extern void lxc_abstract_unix_close(int fd); extern int lxc_abstract_unix_connect(const char *path); extern int lxc_abstract_unix_send_fds(int fd, int *sendfds, int num_sendfds, void *data, size_t size); +extern int lxc_abstract_unix_send_fds_iov(int fd, int *sendfds, + int num_sendfds, struct iovec *iov, + size_t iovlen); extern int lxc_unix_send_fds(int fd, int *sendfds, int num_sendfds, void *data, size_t size); extern int lxc_abstract_unix_recv_fds(int fd, int *recvfds, int num_recvfds,