@@ -128,17 +128,20 @@ pub fn test_recvmsg_ebadf() {
128
128
let mut buf = [ 0u8 ; 5 ] ;
129
129
let iov = [ IoVec :: from_mut_slice ( & mut buf[ ..] ) ] ;
130
130
let fd = -1 ; // Bad file descriptor
131
- let r = recvmsg :: < ( ) > ( fd, & iov, None , MsgFlags :: empty ( ) ) ;
131
+ let r = recvmsg ( fd, & iov, None , MsgFlags :: empty ( ) ) ;
132
132
assert_eq ! ( r. err( ) . unwrap( ) , Error :: Sys ( Errno :: EBADF ) ) ;
133
133
}
134
134
135
+ // Disable the test on emulated platforms due to a bug in QEMU versions <
136
+ // 2.12.0. https://bugs.launchpad.net/qemu/+bug/1701808
137
+ #[ cfg_attr( not( any( target_arch = "x86_64" , target_arch="i686" ) ) , ignore) ]
135
138
#[ test]
136
139
pub fn test_scm_rights ( ) {
137
140
use nix:: sys:: uio:: IoVec ;
138
141
use nix:: unistd:: { pipe, read, write, close} ;
139
142
use nix:: sys:: socket:: { socketpair, sendmsg, recvmsg,
140
143
AddressFamily , SockType , SockFlag ,
141
- ControlMessage , CmsgSpace , MsgFlags } ;
144
+ ControlMessage , MsgFlags } ;
142
145
143
146
let ( fd1, fd2) = socketpair ( AddressFamily :: Unix , SockType :: Stream , None , SockFlag :: empty ( ) )
144
147
. unwrap ( ) ;
@@ -157,7 +160,7 @@ pub fn test_scm_rights() {
157
160
{
158
161
let mut buf = [ 0u8 ; 5 ] ;
159
162
let iov = [ IoVec :: from_mut_slice ( & mut buf[ ..] ) ] ;
160
- let mut cmsgspace: CmsgSpace < [ RawFd ; 1 ] > = CmsgSpace :: new ( ) ;
163
+ let mut cmsgspace = cmsg_space ! ( [ RawFd ; 1 ] ) ;
161
164
let msg = recvmsg ( fd2, & iov, Some ( & mut cmsgspace) , MsgFlags :: empty ( ) ) . unwrap ( ) ;
162
165
163
166
for cmsg in msg. cmsgs ( ) {
@@ -184,20 +187,24 @@ pub fn test_scm_rights() {
184
187
}
185
188
186
189
/// Tests that passing multiple fds using a single `ControlMessage` works.
190
+ // Disable the test on emulated platforms due to a bug in QEMU versions <
191
+ // 2.12.0. https://bugs.launchpad.net/qemu/+bug/1701808
192
+ #[ cfg_attr( not( any( target_arch = "x86_64" , target_arch="i686" ) ) , ignore) ]
187
193
#[ test]
188
194
fn test_scm_rights_single_cmsg_multiple_fds ( ) {
189
195
use std:: os:: unix:: net:: UnixDatagram ;
190
196
use std:: os:: unix:: io:: { RawFd , AsRawFd } ;
191
197
use std:: thread;
192
- use nix:: sys:: socket:: { CmsgSpace , ControlMessage , MsgFlags , sendmsg, recvmsg} ;
198
+ use nix:: sys:: socket:: { ControlMessage , MsgFlags ,
199
+ sendmsg, recvmsg} ;
193
200
use nix:: sys:: uio:: IoVec ;
194
201
use libc;
195
202
196
203
let ( send, receive) = UnixDatagram :: pair ( ) . unwrap ( ) ;
197
204
let thread = thread:: spawn ( move || {
198
205
let mut buf = [ 0u8 ; 8 ] ;
199
206
let iovec = [ IoVec :: from_mut_slice ( & mut buf) ] ;
200
- let mut space = CmsgSpace :: < [ RawFd ; 2 ] > :: new ( ) ;
207
+ let mut space = cmsg_space ! ( [ RawFd ; 2 ] ) ;
201
208
let msg = recvmsg (
202
209
receive. as_raw_fd ( ) ,
203
210
& iovec,
@@ -237,8 +244,7 @@ pub fn test_sendmsg_empty_cmsgs() {
237
244
use nix:: sys:: uio:: IoVec ;
238
245
use nix:: unistd:: close;
239
246
use nix:: sys:: socket:: { socketpair, sendmsg, recvmsg,
240
- AddressFamily , SockType , SockFlag ,
241
- CmsgSpace , MsgFlags } ;
247
+ AddressFamily , SockType , SockFlag , MsgFlags } ;
242
248
243
249
let ( fd1, fd2) = socketpair ( AddressFamily :: Unix , SockType :: Stream , None , SockFlag :: empty ( ) )
244
250
. unwrap ( ) ;
@@ -252,7 +258,7 @@ pub fn test_sendmsg_empty_cmsgs() {
252
258
{
253
259
let mut buf = [ 0u8 ; 5 ] ;
254
260
let iov = [ IoVec :: from_mut_slice ( & mut buf[ ..] ) ] ;
255
- let mut cmsgspace: CmsgSpace < [ RawFd ; 1 ] > = CmsgSpace :: new ( ) ;
261
+ let mut cmsgspace = cmsg_space ! ( [ RawFd ; 1 ] ) ;
256
262
let msg = recvmsg ( fd2, & iov, Some ( & mut cmsgspace) , MsgFlags :: empty ( ) ) . unwrap ( ) ;
257
263
258
264
for _ in msg. cmsgs ( ) {
@@ -271,7 +277,7 @@ fn test_scm_credentials() {
271
277
use nix:: unistd:: { close, getpid, getuid, getgid} ;
272
278
use nix:: sys:: socket:: { socketpair, sendmsg, recvmsg, setsockopt,
273
279
AddressFamily , SockType , SockFlag ,
274
- ControlMessage , CmsgSpace , MsgFlags } ;
280
+ ControlMessage , MsgFlags } ;
275
281
use nix:: sys:: socket:: sockopt:: PassCred ;
276
282
277
283
let ( send, recv) = socketpair ( AddressFamily :: Unix , SockType :: Stream , None , SockFlag :: empty ( ) )
@@ -293,7 +299,7 @@ fn test_scm_credentials() {
293
299
{
294
300
let mut buf = [ 0u8 ; 5 ] ;
295
301
let iov = [ IoVec :: from_mut_slice ( & mut buf[ ..] ) ] ;
296
- let mut cmsgspace: CmsgSpace < libc :: ucred > = CmsgSpace :: new ( ) ;
302
+ let mut cmsgspace = cmsg_space ! ( libc :: ucred ) ;
297
303
let msg = recvmsg ( recv, & iov, Some ( & mut cmsgspace) , MsgFlags :: empty ( ) ) . unwrap ( ) ;
298
304
let mut received_cred = None ;
299
305
@@ -303,7 +309,7 @@ fn test_scm_credentials() {
303
309
assert_eq ! ( cred. pid, getpid( ) . as_raw( ) ) ;
304
310
assert_eq ! ( cred. uid, getuid( ) . as_raw( ) ) ;
305
311
assert_eq ! ( cred. gid, getgid( ) . as_raw( ) ) ;
306
- received_cred = Some ( * cred) ;
312
+ received_cred = Some ( cred) ;
307
313
} else {
308
314
panic ! ( "unexpected cmsg" ) ;
309
315
}
@@ -322,27 +328,26 @@ fn test_scm_credentials() {
322
328
#[ cfg_attr( not( any( target_arch = "x86_64" , target_arch = "x86" ) ) , ignore) ]
323
329
#[ test]
324
330
fn test_scm_credentials_and_rights ( ) {
325
- use nix:: sys:: socket:: CmsgSpace ;
326
331
use libc;
327
332
328
- test_impl_scm_credentials_and_rights ( CmsgSpace :: < ( libc:: ucred , CmsgSpace < RawFd > ) > :: new ( ) ) ;
333
+ let space = cmsg_space ! ( libc:: ucred, RawFd ) ;
334
+ test_impl_scm_credentials_and_rights ( space) ;
329
335
}
330
336
331
- /// Ensure that passing a `CmsgSpace` with too much space for the received
332
- /// messages still works.
337
+ /// Ensure that passing a an oversized control message buffer to recvmsg
338
+ /// still works.
333
339
#[ cfg( any( target_os = "android" , target_os = "linux" ) ) ]
334
340
// qemu's handling of multiple cmsgs is bugged, ignore tests on non-x86
335
341
// see https://bugs.launchpad.net/qemu/+bug/1781280
336
342
#[ cfg_attr( not( any( target_arch = "x86_64" , target_arch = "x86" ) ) , ignore) ]
337
343
#[ test]
338
344
fn test_too_large_cmsgspace ( ) {
339
- use nix:: sys:: socket:: CmsgSpace ;
340
-
341
- test_impl_scm_credentials_and_rights ( CmsgSpace :: < [ u8 ; 1024 ] > :: new ( ) ) ;
345
+ let space = vec ! [ 0u8 ; 1024 ] ;
346
+ test_impl_scm_credentials_and_rights ( space) ;
342
347
}
343
348
344
349
#[ cfg( any( target_os = "android" , target_os = "linux" ) ) ]
345
- fn test_impl_scm_credentials_and_rights < T > ( mut space : :: nix :: sys :: socket :: CmsgSpace < T > ) {
350
+ fn test_impl_scm_credentials_and_rights ( mut space : Vec < u8 > ) {
346
351
use libc;
347
352
use nix:: sys:: uio:: IoVec ;
348
353
use nix:: unistd:: { pipe, read, write, close, getpid, getuid, getgid} ;
@@ -537,7 +542,7 @@ pub fn test_recv_ipv4pktinfo() {
537
542
use nix:: sys:: socket:: sockopt:: Ipv4PacketInfo ;
538
543
use nix:: sys:: socket:: { bind, SockFlag , SockType } ;
539
544
use nix:: sys:: socket:: { getsockname, setsockopt, socket} ;
540
- use nix:: sys:: socket:: { recvmsg, sendmsg, CmsgSpace , ControlMessage , MsgFlags } ;
545
+ use nix:: sys:: socket:: { recvmsg, sendmsg, ControlMessage , MsgFlags } ;
541
546
use nix:: sys:: uio:: IoVec ;
542
547
use nix:: net:: if_:: * ;
543
548
@@ -573,7 +578,7 @@ pub fn test_recv_ipv4pktinfo() {
573
578
{
574
579
let mut buf = [ 0u8 ; 8 ] ;
575
580
let iovec = [ IoVec :: from_mut_slice ( & mut buf) ] ;
576
- let mut space = CmsgSpace :: < libc:: in_pktinfo > :: new ( ) ;
581
+ let mut space = cmsg_space ! ( libc:: in_pktinfo) ;
577
582
let msg = recvmsg (
578
583
receive,
579
584
& iovec,
@@ -627,7 +632,7 @@ pub fn test_recvif() {
627
632
use nix:: sys:: socket:: sockopt:: { Ipv4RecvIf , Ipv4RecvDstAddr } ;
628
633
use nix:: sys:: socket:: { bind, SockFlag , SockType } ;
629
634
use nix:: sys:: socket:: { getsockname, setsockopt, socket, SockAddr } ;
630
- use nix:: sys:: socket:: { recvmsg, sendmsg, CmsgSpace , ControlMessage , MsgFlags } ;
635
+ use nix:: sys:: socket:: { recvmsg, sendmsg, ControlMessage , MsgFlags } ;
631
636
use nix:: sys:: uio:: IoVec ;
632
637
633
638
let lo_ifaddr = loopback_address ( AddressFamily :: Inet ) ;
@@ -663,7 +668,7 @@ pub fn test_recvif() {
663
668
{
664
669
let mut buf = [ 0u8 ; 8 ] ;
665
670
let iovec = [ IoVec :: from_mut_slice ( & mut buf) ] ;
666
- let mut space = CmsgSpace :: < ( libc:: sockaddr_dl , CmsgSpace < libc:: in_addr > ) > :: new ( ) ;
671
+ let mut space = cmsg_space ! ( libc:: sockaddr_dl, libc:: in_addr) ;
667
672
let msg = recvmsg (
668
673
receive,
669
674
& iovec,
@@ -737,7 +742,7 @@ pub fn test_recv_ipv6pktinfo() {
737
742
use nix:: sys:: socket:: sockopt:: Ipv6RecvPacketInfo ;
738
743
use nix:: sys:: socket:: { bind, AddressFamily , SockFlag , SockType } ;
739
744
use nix:: sys:: socket:: { getsockname, setsockopt, socket} ;
740
- use nix:: sys:: socket:: { recvmsg, sendmsg, CmsgSpace , ControlMessage , MsgFlags } ;
745
+ use nix:: sys:: socket:: { recvmsg, sendmsg, ControlMessage , MsgFlags } ;
741
746
use nix:: sys:: uio:: IoVec ;
742
747
743
748
let lo_ifaddr = loopback_address ( AddressFamily :: Inet6 ) ;
@@ -772,7 +777,7 @@ pub fn test_recv_ipv6pktinfo() {
772
777
{
773
778
let mut buf = [ 0u8 ; 8 ] ;
774
779
let iovec = [ IoVec :: from_mut_slice ( & mut buf) ] ;
775
- let mut space = CmsgSpace :: < libc:: in6_pktinfo > :: new ( ) ;
780
+ let mut space = cmsg_space ! ( libc:: in6_pktinfo) ;
776
781
let msg = recvmsg (
777
782
receive,
778
783
& iovec,
0 commit comments