This commit is contained in:
Adam D. Ruppe 2019-07-08 11:13:36 -04:00
parent acb833d724
commit e5a2de115f
1 changed files with 47 additions and 32 deletions

15
cgi.d
View File

@ -6267,6 +6267,10 @@ ssize_t write_fd(int fd, void *ptr, size_t nbytes, int sendfd) {
msghdr msg;
iovec[1] iov;
version(OSX) {
msg.msg_accrights = cast(cattr_t) &sendfd;
msg.msg_accrightslen = int.sizeof;
} else {
union ControlUnion {
cmsghdr cm;
char[CMSG_SPACE(int.sizeof)] control;
@ -6283,6 +6287,7 @@ ssize_t write_fd(int fd, void *ptr, size_t nbytes, int sendfd) {
cmptr.cmsg_level = SOL_SOCKET;
cmptr.cmsg_type = SCM_RIGHTS;
*(cast(int *) CMSG_DATA(cmptr)) = sendfd;
}
msg.msg_name = null;
msg.msg_namelen = 0;
@ -6303,6 +6308,10 @@ ssize_t read_fd(int fd, void *ptr, size_t nbytes, int *recvfd) {
ssize_t n;
int newfd;
version(OSX) {
msg.msg_accrights = cast(cattr_t) recvfd;
msg.msg_accrightslen = int.sizeof;
} else {
union ControlUnion {
cmsghdr cm;
char[CMSG_SPACE(int.sizeof)] control;
@ -6312,6 +6321,7 @@ ssize_t read_fd(int fd, void *ptr, size_t nbytes, int *recvfd) {
msg.msg_control = control_un.control.ptr;
msg.msg_controllen = control_un.control.length;
}
msg.msg_name = null;
msg.msg_namelen = 0;
@ -6324,6 +6334,10 @@ ssize_t read_fd(int fd, void *ptr, size_t nbytes, int *recvfd) {
if ( (n = recvmsg(fd, &msg, 0)) <= 0)
return n;
version(OSX) {
if(msg.msg_accrightslen != int.sizeof)
*recvfd = -1;
} else {
if ( (cmptr = CMSG_FIRSTHDR(&msg)) != null &&
cmptr.cmsg_len == CMSG_LEN(int.sizeof)) {
if (cmptr.cmsg_level != SOL_SOCKET)
@ -6333,6 +6347,7 @@ ssize_t read_fd(int fd, void *ptr, size_t nbytes, int *recvfd) {
*recvfd = *(cast(int *) CMSG_DATA(cmptr));
} else
*recvfd = -1; /* descriptor was not passed */
}
return n;
}