summaryrefslogtreecommitdiffstats
path: root/source3/lib
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2014-12-31 14:18:59 +0100
committerJeremy Allison <jra@samba.org>2015-01-06 00:33:10 +0100
commit37af87e75e6efb7393f6e7572aaa4bef8f38920f (patch)
tree26e57303bc5ff490945dee14651a619d0338beaa /source3/lib
parent2beae2bfbce4e35361f0a559fa8d9508190f34ea (diff)
downloadsamba-37af87e75e6efb7393f6e7572aaa4bef8f38920f.tar.gz
samba-37af87e75e6efb7393f6e7572aaa4bef8f38920f.tar.xz
samba-37af87e75e6efb7393f6e7572aaa4bef8f38920f.zip
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 <vl@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
Diffstat (limited to 'source3/lib')
-rw-r--r--source3/lib/msghdr.c20
-rw-r--r--source3/lib/msghdr.h2
2 files changed, 22 insertions, 0 deletions
diff --git a/source3/lib/msghdr.c b/source3/lib/msghdr.c
index 3449579b43..9ed14449cf 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 88829238a2..c1676d2e4d 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