diff options
| author | Volker Lendecke <vl@samba.org> | 2014-12-31 14:18:59 +0100 |
|---|---|---|
| committer | Jeremy Allison <jra@samba.org> | 2015-01-06 00:33:10 +0100 |
| commit | 37af87e75e6efb7393f6e7572aaa4bef8f38920f (patch) | |
| tree | 26e57303bc5ff490945dee14651a619d0338beaa /source3/lib | |
| parent | 2beae2bfbce4e35361f0a559fa8d9508190f34ea (diff) | |
| download | samba-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.c | 20 | ||||
| -rw-r--r-- | source3/lib/msghdr.h | 2 |
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 |
