@@ -25,13 +25,6 @@ pub struct Acquired {
2525 byte : u8 ,
2626}
2727
28- #[ derive( Debug ) ]
29- pub enum ErrFromEnv {
30- ParseEnvVar ,
31- OpenFile ( String ) ,
32- InvalidDescriptor ( i32 , i32 ) ,
33- }
34-
3528impl Client {
3629 pub fn new ( mut limit : usize ) -> io:: Result < Client > {
3730 let client = unsafe { Client :: mk ( ) ? } ;
@@ -88,34 +81,41 @@ impl Client {
8881 Ok ( Client :: from_fds ( pipes[ 0 ] , pipes[ 1 ] ) )
8982 }
9083
91- pub unsafe fn open ( s : & str ) -> Result < Client , ErrFromEnv > {
84+ pub unsafe fn open ( s : & str ) -> io :: Result < Client > {
9285 Ok ( Self :: from_fifo ( s) ?. unwrap_or ( Self :: from_pipe ( s) ?) )
9386 }
9487
9588 /// `--jobserver-auth=fifo:PATH`
96- fn from_fifo ( s : & str ) -> Result < Option < Client > , ErrFromEnv > {
89+ fn from_fifo ( s : & str ) -> io :: Result < Option < Client > > {
9790 let mut parts = s. splitn ( 2 , ':' ) ;
9891 if parts. next ( ) . unwrap ( ) != "fifo" {
9992 return Ok ( None ) ;
10093 }
101- let path = Path :: new ( parts. next ( ) . ok_or ( ErrFromEnv :: ParseEnvVar ) ? ) ;
102- let file = match OpenOptions :: new ( ) . read ( true ) . write ( true ) . open ( path ) {
103- Ok ( f ) => f ,
104- Err ( e ) => return Err ( ErrFromEnv :: OpenFile ( e . to_string ( ) ) ) ,
105- } ;
94+ let path = Path :: new ( parts. next ( ) . ok_or ( io :: Error :: new (
95+ io :: ErrorKind :: InvalidInput ,
96+ "expected ':' after `fifo`" ,
97+ ) ) ? ) ;
98+ let file = OpenOptions :: new ( ) . read ( true ) . write ( true ) . open ( path ) ? ;
10699 Ok ( Some ( Client :: Fifo {
107100 file,
108101 path : path. into ( ) ,
109102 } ) )
110103 }
111104
112105 /// `--jobserver-auth=R,W`
113- unsafe fn from_pipe ( s : & str ) -> Result < Client , ErrFromEnv > {
106+ unsafe fn from_pipe ( s : & str ) -> io :: Result < Client > {
114107 let mut parts = s. splitn ( 2 , ',' ) ;
115108 let read = parts. next ( ) . unwrap ( ) ;
116- let write = parts. next ( ) . ok_or ( ErrFromEnv :: ParseEnvVar ) ?;
117- let read = read. parse ( ) . map_err ( |_| ErrFromEnv :: ParseEnvVar ) ?;
118- let write = write. parse ( ) . map_err ( |_| ErrFromEnv :: ParseEnvVar ) ?;
109+ let write = parts. next ( ) . ok_or ( io:: Error :: new (
110+ io:: ErrorKind :: InvalidInput ,
111+ "expected ',' in `auth=R,W`" ,
112+ ) ) ?;
113+ let read = read
114+ . parse ( )
115+ . map_err ( |e| io:: Error :: new ( io:: ErrorKind :: Other , e) ) ?;
116+ let write = write
117+ . parse ( )
118+ . map_err ( |e| io:: Error :: new ( io:: ErrorKind :: Other , e) ) ?;
119119
120120 // Ok so we've got two integers that look like file descriptors, but
121121 // for extra sanity checking let's see if they actually look like
@@ -130,7 +130,10 @@ impl Client {
130130 drop ( set_cloexec ( write, true ) ) ;
131131 Ok ( Client :: from_fds ( read, write) )
132132 } else {
133- Err ( ErrFromEnv :: InvalidDescriptor ( read, write) )
133+ Err ( io:: Error :: new (
134+ io:: ErrorKind :: InvalidData ,
135+ "invalid file descriptors" ,
136+ ) )
134137 }
135138 }
136139
0 commit comments