@@ -4,7 +4,7 @@ use rand::distributions::Alphanumeric;
4
4
use rand:: { thread_rng, Rng } ;
5
5
use std:: fs:: OpenOptions ;
6
6
use std:: io:: IoSlice ;
7
- use std:: os:: unix:: io:: AsRawFd ;
7
+ use std:: os:: unix:: io:: { FromRawFd , OwnedFd } ;
8
8
use std:: { cmp, iter} ;
9
9
10
10
#[ cfg( not( target_os = "redox" ) ) ]
@@ -40,12 +40,16 @@ fn test_writev() {
40
40
iovecs. push ( IoSlice :: new ( b) ) ;
41
41
consumed += slice_len;
42
42
}
43
- let pipe_res = pipe ( ) ;
44
- let ( reader, writer) = pipe_res. expect ( "Couldn't create pipe" ) ;
43
+ let ( reader, writer) = pipe ( ) . expect ( "Couldn't create pipe" ) ;
45
44
// FileDesc will close its filedesc (reader).
46
45
let mut read_buf: Vec < u8 > = iter:: repeat ( 0u8 ) . take ( 128 * 16 ) . collect ( ) ;
46
+
47
+ // Temporary workaround to cope with the existing RawFd pipe(2), should be
48
+ // removed when pipe(2) becomes I/O-safe.
49
+ let writer = unsafe { OwnedFd :: from_raw_fd ( writer) } ;
50
+
47
51
// Blocking io, should write all data.
48
- let write_res = writev ( writer, & iovecs) ;
52
+ let write_res = writev ( & writer, & iovecs) ;
49
53
let written = write_res. expect ( "couldn't write" ) ;
50
54
// Check whether we written all data
51
55
assert_eq ! ( to_write. len( ) , written) ;
@@ -55,7 +59,6 @@ fn test_writev() {
55
59
assert_eq ! ( read, written) ;
56
60
// Check equality of written and read data
57
61
assert_eq ! ( & to_write, & read_buf) ;
58
- close ( writer) . expect ( "closed writer" ) ;
59
62
close ( reader) . expect ( "closed reader" ) ;
60
63
}
61
64
@@ -88,7 +91,12 @@ fn test_readv() {
88
91
let ( reader, writer) = pipe ( ) . expect ( "couldn't create pipe" ) ;
89
92
// Blocking io, should write all data.
90
93
write ( writer, & to_write) . expect ( "write failed" ) ;
91
- let read = readv ( reader, & mut iovecs[ ..] ) . expect ( "read failed" ) ;
94
+
95
+ // Temporary workaround to cope with the existing RawFd pipe(2), should be
96
+ // removed when pipe(2) becomes I/O-safe.
97
+ let reader = unsafe { OwnedFd :: from_raw_fd ( reader) } ;
98
+
99
+ let read = readv ( & reader, & mut iovecs[ ..] ) . expect ( "read failed" ) ;
92
100
// Check whether we've read all data
93
101
assert_eq ! ( to_write. len( ) , read) ;
94
102
// Cccumulate data from iovecs
@@ -100,7 +108,6 @@ fn test_readv() {
100
108
assert_eq ! ( read_buf. len( ) , to_write. len( ) ) ;
101
109
// Check equality of written and read data
102
110
assert_eq ! ( & read_buf, & to_write) ;
103
- close ( reader) . expect ( "couldn't close reader" ) ;
104
111
close ( writer) . expect ( "couldn't close writer" ) ;
105
112
}
106
113
@@ -111,7 +118,7 @@ fn test_pwrite() {
111
118
112
119
let mut file = tempfile ( ) . unwrap ( ) ;
113
120
let buf = [ 1u8 ; 8 ] ;
114
- assert_eq ! ( Ok ( 8 ) , pwrite( file. as_raw_fd ( ) , & buf, 8 ) ) ;
121
+ assert_eq ! ( Ok ( 8 ) , pwrite( & file, & buf, 8 ) ) ;
115
122
let mut file_content = Vec :: new ( ) ;
116
123
file. read_to_end ( & mut file_content) . unwrap ( ) ;
117
124
let mut expected = vec ! [ 0u8 ; 8 ] ;
@@ -137,7 +144,7 @@ fn test_pread() {
137
144
file. write_all ( & file_content) . unwrap ( ) ;
138
145
139
146
let mut buf = [ 0u8 ; 16 ] ;
140
- assert_eq ! ( Ok ( 16 ) , pread( file. as_raw_fd ( ) , & mut buf, 16 ) ) ;
147
+ assert_eq ! ( Ok ( 16 ) , pread( & file, & mut buf, 16 ) ) ;
141
148
let expected: Vec < _ > = ( 16 ..32 ) . collect ( ) ;
142
149
assert_eq ! ( & buf[ ..] , & expected[ ..] ) ;
143
150
}
@@ -168,7 +175,7 @@ fn test_pwritev() {
168
175
. open ( path)
169
176
. unwrap ( ) ;
170
177
171
- let written = pwritev ( file. as_raw_fd ( ) , & iovecs, 100 ) . ok ( ) . unwrap ( ) ;
178
+ let written = pwritev ( & file, & iovecs, 100 ) . ok ( ) . unwrap ( ) ;
172
179
assert_eq ! ( written, to_write. len( ) ) ;
173
180
174
181
// Read the data back and make sure it matches
@@ -206,7 +213,7 @@ fn test_preadv() {
206
213
. iter_mut ( )
207
214
. map ( |buf| IoSliceMut :: new ( & mut buf[ ..] ) )
208
215
. collect ( ) ;
209
- assert_eq ! ( Ok ( 100 ) , preadv( file. as_raw_fd ( ) , & mut iovecs, 100 ) ) ;
216
+ assert_eq ! ( Ok ( 100 ) , preadv( & file, & mut iovecs, 100 ) ) ;
210
217
}
211
218
212
219
let all = buffers. concat ( ) ;
0 commit comments