Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | | - |
14 | | - |
15 | | - |
16 | | - |
17 | | - |
18 | int | - |
19 | mm_send_fd(int sock, int fd) | - |
20 | { | - |
21 | | - |
22 | struct msghdr msg; | - |
23 | | - |
24 | union { | - |
25 | struct cmsghdr hdr; | - |
26 | char buf[ | - |
27 | (((( | - |
28 | sizeof(int) | - |
29 | ) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1)) + (((sizeof (struct cmsghdr)) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1))) | - |
30 | ]; | - |
31 | } cmsgbuf; | - |
32 | struct cmsghdr *cmsg; | - |
33 | | - |
34 | struct iovec vec; | - |
35 | char ch = '\0'; | - |
36 | ssize_t n; | - |
37 | struct pollfd pfd; | - |
38 | | - |
39 | memset(&msg, 0, sizeof(msg)); | - |
40 | | - |
41 | | - |
42 | | - |
43 | | - |
44 | memset(&cmsgbuf, 0, sizeof(cmsgbuf)); | - |
45 | msg.msg_control = (caddr_t)&cmsgbuf.buf; | - |
46 | msg.msg_controllen = sizeof(cmsgbuf.buf); | - |
47 | cmsg = | - |
48 | ((TRUE | never evaluated | FALSE | never evaluated |
size_t) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
49 | &msgTRUE | never evaluated | FALSE | never evaluated |
| 0 |
50 | )->msg_controllen >= sizeof (struct cmsghdr)TRUE | never evaluated | FALSE | never evaluated |
? (struct cmsghdr *) ( | 0 |
51 | &msg | - |
52 | )->msg_control : (struct cmsghdr *) 0) | - |
53 | ; | - |
54 | cmsg->cmsg_len = | - |
55 | ((((sizeof (struct cmsghdr)) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1)) + ( | - |
56 | sizeof(int) | - |
57 | )) | - |
58 | ; | - |
59 | cmsg->cmsg_level = | - |
60 | 1 | - |
61 | ; | - |
62 | cmsg->cmsg_type = | - |
63 | SCM_RIGHTS | - |
64 | ; | - |
65 | *(int *) | - |
66 | (( | - |
67 | cmsg | - |
68 | )->__cmsg_data) | - |
69 | = fd; | - |
70 | | - |
71 | | - |
72 | vec.iov_base = &ch; | - |
73 | vec.iov_len = 1; | - |
74 | msg.msg_iov = &vec; | - |
75 | msg.msg_iovlen = 1; | - |
76 | | - |
77 | pfd.fd = sock; | - |
78 | pfd.events = | - |
79 | 0x004 | - |
80 | ; | - |
81 | while ((TRUE | never evaluated | FALSE | never evaluated |
n = sendmsg(sock, &msg, 0)) == -1TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
82 | ( | - |
83 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
84 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
85 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
86 | || | - |
87 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
88 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
89 | 4TRUE | never evaluated | FALSE | never evaluated |
| 0 |
90 | )) { | - |
91 | debug3("%s: sendmsg(%d): %s", __func__, fd, strerror( | - |
92 | (*__errno_location ()) | - |
93 | )); | - |
94 | (void)poll(&pfd, 1, -1); | - |
95 | } never executed: end of block | 0 |
96 | if (n == -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
97 | error("%s: sendmsg(%d): %s", __func__, fd, | - |
98 | strerror( | - |
99 | (*__errno_location ()) | - |
100 | )); | - |
101 | return never executed: return -1; -1;never executed: return -1; | 0 |
102 | } | - |
103 | | - |
104 | if (n != 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
105 | error("%s: sendmsg: expected sent 1 got %zd", __func__, n); | - |
106 | return never executed: return -1; -1;never executed: return -1; | 0 |
107 | } | - |
108 | return never executed: return 0; 0;never executed: return 0; | 0 |
109 | | - |
110 | | - |
111 | | - |
112 | | - |
113 | } | - |
114 | | - |
115 | int | - |
116 | mm_receive_fd(int sock) | - |
117 | { | - |
118 | | - |
119 | struct msghdr msg; | - |
120 | | - |
121 | union { | - |
122 | struct cmsghdr hdr; | - |
123 | char buf[ | - |
124 | (((( | - |
125 | sizeof(int) | - |
126 | ) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1)) + (((sizeof (struct cmsghdr)) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1))) | - |
127 | ]; | - |
128 | } cmsgbuf; | - |
129 | struct cmsghdr *cmsg; | - |
130 | | - |
131 | struct iovec vec; | - |
132 | ssize_t n; | - |
133 | char ch; | - |
134 | int fd; | - |
135 | struct pollfd pfd; | - |
136 | | - |
137 | memset(&msg, 0, sizeof(msg)); | - |
138 | vec.iov_base = &ch; | - |
139 | vec.iov_len = 1; | - |
140 | msg.msg_iov = &vec; | - |
141 | msg.msg_iovlen = 1; | - |
142 | | - |
143 | | - |
144 | | - |
145 | | - |
146 | memset(&cmsgbuf, 0, sizeof(cmsgbuf)); | - |
147 | msg.msg_control = &cmsgbuf.buf; | - |
148 | msg.msg_controllen = sizeof(cmsgbuf.buf); | - |
149 | | - |
150 | | - |
151 | pfd.fd = sock; | - |
152 | pfd.events = | - |
153 | 0x001 | - |
154 | ; | - |
155 | while ((TRUE | never evaluated | FALSE | never evaluated |
n = recvmsg(sock, &msg, 0)) == -1TRUE | never evaluated | FALSE | never evaluated |
&& | 0 |
156 | ( | - |
157 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
158 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
159 | 11TRUE | never evaluated | FALSE | never evaluated |
| 0 |
160 | || | - |
161 | (*TRUE | never evaluated | FALSE | never evaluated |
__errno_location ()) TRUE | never evaluated | FALSE | never evaluated |
| 0 |
162 | == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
163 | 4TRUE | never evaluated | FALSE | never evaluated |
| 0 |
164 | )) { | - |
165 | debug3("%s: recvmsg: %s", __func__, strerror( | - |
166 | (*__errno_location ()) | - |
167 | )); | - |
168 | (void)poll(&pfd, 1, -1); | - |
169 | } never executed: end of block | 0 |
170 | if (n == -1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
171 | error("%s: recvmsg: %s", __func__, strerror( | - |
172 | (*__errno_location ()) | - |
173 | )); | - |
174 | return never executed: return -1; -1;never executed: return -1; | 0 |
175 | } | - |
176 | | - |
177 | if (n != 1TRUE | never evaluated | FALSE | never evaluated |
) { | 0 |
178 | error("%s: recvmsg: expected received 1 got %zd", __func__, n); | - |
179 | return never executed: return -1; -1;never executed: return -1; | 0 |
180 | } | - |
181 | | - |
182 | | - |
183 | | - |
184 | | - |
185 | | - |
186 | | - |
187 | | - |
188 | cmsg = | - |
189 | ((TRUE | never evaluated | FALSE | never evaluated |
size_t) (TRUE | never evaluated | FALSE | never evaluated |
| 0 |
190 | &msgTRUE | never evaluated | FALSE | never evaluated |
| 0 |
191 | )->msg_controllen >= sizeof (struct cmsghdr)TRUE | never evaluated | FALSE | never evaluated |
? (struct cmsghdr *) ( | 0 |
192 | &msg | - |
193 | )->msg_control : (struct cmsghdr *) 0) | - |
194 | ; | - |
195 | if (cmsg == TRUE | never evaluated | FALSE | never evaluated |
| 0 |
196 | ((void *)0)TRUE | never evaluated | FALSE | never evaluated |
| 0 |
197 | ) { | - |
198 | error("%s: no message header", __func__); | - |
199 | return never executed: return -1; -1;never executed: return -1; | 0 |
200 | } | - |
201 | | - |
202 | | - |
203 | if (cmsg->cmsg_type != TRUE | never evaluated | FALSE | never evaluated |
| 0 |
204 | SCM_RIGHTSTRUE | never evaluated | FALSE | never evaluated |
| 0 |
205 | ) { | - |
206 | error("%s: expected type %d got %d", __func__, | - |
207 | | - |
208 | SCM_RIGHTS | - |
209 | , cmsg->cmsg_type); | - |
210 | return never executed: return -1; -1;never executed: return -1; | 0 |
211 | } | - |
212 | | - |
213 | fd = (*(int *) | - |
214 | (( | - |
215 | cmsg | - |
216 | )->__cmsg_data) | - |
217 | ); | - |
218 | | - |
219 | return never executed: return fd; fd;never executed: return fd; | 0 |
220 | | - |
221 | | - |
222 | | - |
223 | | - |
224 | } | - |
| | |