From: Volker Lendecke Date: Wed, 31 Dec 2014 13:18:59 +0000 (+0100) Subject: lib: Add msghdr_prep_recv_fds X-Git-Tag: ldb-1.1.20~138 X-Git-Url: http://git.samba.org/?a=commitdiff_plain;h=37af87e75e6efb7393f6e7572aaa4bef8f38920f;p=samba.git lib: Add msghdr_prep_recv_fds This will prepare a msghdr for receiving fd's. Same pattern as before: First get the buffer size, then fill in msghdr. Signed-off-by: Volker Lendecke Reviewed-by: Ralph Boehme --- diff --git a/source3/lib/msghdr.c b/source3/lib/msghdr.c index 3449579b438..9ed14449cfe 100644 --- a/source3/lib/msghdr.c +++ b/source3/lib/msghdr.c @@ -126,6 +126,26 @@ struct msghdr *msghdr_buf_msghdr(struct msghdr_buf *msg) return &msg->msg; } +size_t msghdr_prep_recv_fds(struct msghdr *msg, uint8_t *buf, size_t bufsize, + size_t num_fds) +{ + size_t ret = CMSG_SPACE(sizeof(int) * num_fds); + + if (bufsize < ret) { + return ret; + } + if (msg != NULL) { + if (num_fds != 0) { + msg->msg_control = buf; + msg->msg_controllen = ret; + } else { + msg->msg_control = NULL; + msg->msg_controllen = 0; + } + } + return ret; +} + size_t msghdr_extract_fds(struct msghdr *msg, int *fds, size_t fds_size) { struct cmsghdr *cmsg; diff --git a/source3/lib/msghdr.h b/source3/lib/msghdr.h index 88829238a2b..c1676d2e4de 100644 --- a/source3/lib/msghdr.h +++ b/source3/lib/msghdr.h @@ -35,6 +35,8 @@ ssize_t msghdr_copy(struct msghdr_buf *msg, size_t msgsize, const int *fds, size_t num_fds); struct msghdr *msghdr_buf_msghdr(struct msghdr_buf *msg); +size_t msghdr_prep_recv_fds(struct msghdr *msg, uint8_t *buf, size_t bufsize, + size_t num_fds); size_t msghdr_extract_fds(struct msghdr *msg, int *fds, size_t num_fds); #endif