mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2026-03-14 05:33:55 -04:00
iochannel/pstream: Support sending file descriptors
This patch adds support to iochannel, pstream and pstream-util to send file descriptors over a unix pipe. Currently we don't support writing both creds and fds in the same packet, it's either one or the other (or neither). Signed-off-by: David Henningsson <david.henningsson@canonical.com>
This commit is contained in:
parent
06bc22b220
commit
cb484805c1
6 changed files with 102 additions and 22 deletions
|
|
@ -348,6 +348,49 @@ ssize_t pa_iochannel_write_with_creds(pa_iochannel*io, const void*data, size_t l
|
|||
return r;
|
||||
}
|
||||
|
||||
ssize_t pa_iochannel_write_with_fds(pa_iochannel*io, const void*data, size_t l, int nfd, const int *fds) {
|
||||
ssize_t r;
|
||||
int *msgdata;
|
||||
struct msghdr mh;
|
||||
struct iovec iov;
|
||||
union {
|
||||
struct cmsghdr hdr;
|
||||
uint8_t data[CMSG_SPACE(sizeof(int) * MAX_ANCIL_FDS)];
|
||||
} cmsg;
|
||||
|
||||
pa_assert(io);
|
||||
pa_assert(data);
|
||||
pa_assert(l);
|
||||
pa_assert(io->ofd >= 0);
|
||||
pa_assert(fds);
|
||||
pa_assert(nfd > 0);
|
||||
pa_assert(nfd <= MAX_ANCIL_FDS);
|
||||
|
||||
pa_zero(iov);
|
||||
iov.iov_base = (void*) data;
|
||||
iov.iov_len = l;
|
||||
|
||||
pa_zero(cmsg);
|
||||
cmsg.hdr.cmsg_level = SOL_SOCKET;
|
||||
cmsg.hdr.cmsg_type = SCM_RIGHTS;
|
||||
|
||||
msgdata = (int*) CMSG_DATA(&cmsg.hdr);
|
||||
memcpy(msgdata, fds, nfd * sizeof(int));
|
||||
cmsg.hdr.cmsg_len = CMSG_LEN(sizeof(int) * nfd);
|
||||
|
||||
pa_zero(mh);
|
||||
mh.msg_iov = &iov;
|
||||
mh.msg_iovlen = 1;
|
||||
mh.msg_control = &cmsg;
|
||||
mh.msg_controllen = sizeof(cmsg);
|
||||
|
||||
if ((r = sendmsg(io->ofd, &mh, MSG_NOSIGNAL)) >= 0) {
|
||||
io->writable = io->hungup = false;
|
||||
enable_events(io);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
ssize_t pa_iochannel_read_with_ancil(pa_iochannel*io, void*data, size_t l, pa_ancil *ancil) {
|
||||
ssize_t r;
|
||||
struct msghdr mh;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue