@@ -223,6 +223,7 @@ mod windows {
223
223
RawHandle ,
224
224
} ,
225
225
sys:: {
226
+ c:: { GetFileType , FILE_TYPE_PIPE } ,
226
227
handle:: Handle ,
227
228
pipe:: { anon_pipe, AnonPipe , Pipes } ,
228
229
} ,
@@ -279,16 +280,20 @@ mod windows {
279
280
impl_traits ! ( PipeReader ) ;
280
281
impl_traits ! ( PipeWriter ) ;
281
282
282
- fn owned_handle_to_anon_pipe ( owned_handle : OwnedHandle ) -> AnonPipe {
283
- AnonPipe :: from_inner ( Handle :: from_inner ( owned_handle) )
283
+ fn convert_to_pipe ( owned_handle : OwnedHandle ) -> io:: Result < AnonPipe > {
284
+ if unsafe { GetFileType ( owned_handle. as_raw_handle ( ) ) } == FILE_TYPE_PIPE {
285
+ Ok ( AnonPipe :: from_inner ( Handle :: from_inner ( owned_handle) ) )
286
+ } else {
287
+ Err ( io:: Error :: new ( io:: ErrorKind :: InvalidInput , "Not a pipe" ) )
288
+ }
284
289
}
285
290
286
291
#[ unstable( feature = "anonymous_pipe" , issue = "127154" ) ]
287
292
impl TryFrom < OwnedHandle > for PipeReader {
288
293
type Error = io:: Error ;
289
294
290
295
fn try_from ( owned_handle : OwnedHandle ) -> Result < Self , Self :: Error > {
291
- Ok ( Self ( owned_handle_to_anon_pipe ( owned_handle) ) )
296
+ convert_to_pipe ( owned_handle) . map ( Self )
292
297
}
293
298
}
294
299
@@ -297,7 +302,7 @@ mod windows {
297
302
type Error = io:: Error ;
298
303
299
304
fn try_from ( owned_handle : OwnedHandle ) -> Result < Self , Self :: Error > {
300
- Ok ( Self ( owned_handle_to_anon_pipe ( owned_handle) ) )
305
+ convert_to_pipe ( owned_handle) . map ( Self )
301
306
}
302
307
}
303
308
}
0 commit comments