@@ -97,39 +97,53 @@ const fn stderr_raw() -> StderrRaw {
9797
9898impl Read for StdinRaw {
9999 fn read ( & mut self , buf : & mut [ u8 ] ) -> io:: Result < usize > {
100- handle_ebadf ( self . 0 . read ( buf) , 0 )
100+ handle_ebadf ( self . 0 . read ( buf) , || Ok ( 0 ) )
101101 }
102102
103103 fn read_buf ( & mut self , buf : BorrowedCursor < ' _ > ) -> io:: Result < ( ) > {
104- handle_ebadf ( self . 0 . read_buf ( buf) , ( ) )
104+ handle_ebadf ( self . 0 . read_buf ( buf) , || Ok ( ( ) ) )
105105 }
106106
107107 fn read_vectored ( & mut self , bufs : & mut [ IoSliceMut < ' _ > ] ) -> io:: Result < usize > {
108- handle_ebadf ( self . 0 . read_vectored ( bufs) , 0 )
108+ handle_ebadf ( self . 0 . read_vectored ( bufs) , || Ok ( 0 ) )
109109 }
110110
111111 #[ inline]
112112 fn is_read_vectored ( & self ) -> bool {
113113 self . 0 . is_read_vectored ( )
114114 }
115115
116+ fn read_exact ( & mut self , buf : & mut [ u8 ] ) -> io:: Result < ( ) > {
117+ if buf. is_empty ( ) {
118+ return Ok ( ( ) ) ;
119+ }
120+ handle_ebadf ( self . 0 . read_exact ( buf) , || Err ( io:: Error :: READ_EXACT_EOF ) )
121+ }
122+
123+ fn read_buf_exact ( & mut self , buf : BorrowedCursor < ' _ > ) -> io:: Result < ( ) > {
124+ if buf. capacity ( ) == 0 {
125+ return Ok ( ( ) ) ;
126+ }
127+ handle_ebadf ( self . 0 . read_buf_exact ( buf) , || Err ( io:: Error :: READ_EXACT_EOF ) )
128+ }
129+
116130 fn read_to_end ( & mut self , buf : & mut Vec < u8 > ) -> io:: Result < usize > {
117- handle_ebadf ( self . 0 . read_to_end ( buf) , 0 )
131+ handle_ebadf ( self . 0 . read_to_end ( buf) , || Ok ( 0 ) )
118132 }
119133
120134 fn read_to_string ( & mut self , buf : & mut String ) -> io:: Result < usize > {
121- handle_ebadf ( self . 0 . read_to_string ( buf) , 0 )
135+ handle_ebadf ( self . 0 . read_to_string ( buf) , || Ok ( 0 ) )
122136 }
123137}
124138
125139impl Write for StdoutRaw {
126140 fn write ( & mut self , buf : & [ u8 ] ) -> io:: Result < usize > {
127- handle_ebadf ( self . 0 . write ( buf) , buf. len ( ) )
141+ handle_ebadf ( self . 0 . write ( buf) , || Ok ( buf. len ( ) ) )
128142 }
129143
130144 fn write_vectored ( & mut self , bufs : & [ IoSlice < ' _ > ] ) -> io:: Result < usize > {
131- let total = || bufs. iter ( ) . map ( |b| b. len ( ) ) . sum ( ) ;
132- handle_ebadf_lazy ( self . 0 . write_vectored ( bufs) , total)
145+ let total = || Ok ( bufs. iter ( ) . map ( |b| b. len ( ) ) . sum ( ) ) ;
146+ handle_ebadf ( self . 0 . write_vectored ( bufs) , total)
133147 }
134148
135149 #[ inline]
@@ -138,30 +152,30 @@ impl Write for StdoutRaw {
138152 }
139153
140154 fn flush ( & mut self ) -> io:: Result < ( ) > {
141- handle_ebadf ( self . 0 . flush ( ) , ( ) )
155+ handle_ebadf ( self . 0 . flush ( ) , || Ok ( ( ) ) )
142156 }
143157
144158 fn write_all ( & mut self , buf : & [ u8 ] ) -> io:: Result < ( ) > {
145- handle_ebadf ( self . 0 . write_all ( buf) , ( ) )
159+ handle_ebadf ( self . 0 . write_all ( buf) , || Ok ( ( ) ) )
146160 }
147161
148162 fn write_all_vectored ( & mut self , bufs : & mut [ IoSlice < ' _ > ] ) -> io:: Result < ( ) > {
149- handle_ebadf ( self . 0 . write_all_vectored ( bufs) , ( ) )
163+ handle_ebadf ( self . 0 . write_all_vectored ( bufs) , || Ok ( ( ) ) )
150164 }
151165
152166 fn write_fmt ( & mut self , fmt : fmt:: Arguments < ' _ > ) -> io:: Result < ( ) > {
153- handle_ebadf ( self . 0 . write_fmt ( fmt) , ( ) )
167+ handle_ebadf ( self . 0 . write_fmt ( fmt) , || Ok ( ( ) ) )
154168 }
155169}
156170
157171impl Write for StderrRaw {
158172 fn write ( & mut self , buf : & [ u8 ] ) -> io:: Result < usize > {
159- handle_ebadf ( self . 0 . write ( buf) , buf. len ( ) )
173+ handle_ebadf ( self . 0 . write ( buf) , || Ok ( buf. len ( ) ) )
160174 }
161175
162176 fn write_vectored ( & mut self , bufs : & [ IoSlice < ' _ > ] ) -> io:: Result < usize > {
163- let total = || bufs. iter ( ) . map ( |b| b. len ( ) ) . sum ( ) ;
164- handle_ebadf_lazy ( self . 0 . write_vectored ( bufs) , total)
177+ let total = || Ok ( bufs. iter ( ) . map ( |b| b. len ( ) ) . sum ( ) ) ;
178+ handle_ebadf ( self . 0 . write_vectored ( bufs) , total)
165179 }
166180
167181 #[ inline]
@@ -170,32 +184,25 @@ impl Write for StderrRaw {
170184 }
171185
172186 fn flush ( & mut self ) -> io:: Result < ( ) > {
173- handle_ebadf ( self . 0 . flush ( ) , ( ) )
187+ handle_ebadf ( self . 0 . flush ( ) , || Ok ( ( ) ) )
174188 }
175189
176190 fn write_all ( & mut self , buf : & [ u8 ] ) -> io:: Result < ( ) > {
177- handle_ebadf ( self . 0 . write_all ( buf) , ( ) )
191+ handle_ebadf ( self . 0 . write_all ( buf) , || Ok ( ( ) ) )
178192 }
179193
180194 fn write_all_vectored ( & mut self , bufs : & mut [ IoSlice < ' _ > ] ) -> io:: Result < ( ) > {
181- handle_ebadf ( self . 0 . write_all_vectored ( bufs) , ( ) )
195+ handle_ebadf ( self . 0 . write_all_vectored ( bufs) , || Ok ( ( ) ) )
182196 }
183197
184198 fn write_fmt ( & mut self , fmt : fmt:: Arguments < ' _ > ) -> io:: Result < ( ) > {
185- handle_ebadf ( self . 0 . write_fmt ( fmt) , ( ) )
186- }
187- }
188-
189- fn handle_ebadf < T > ( r : io:: Result < T > , default : T ) -> io:: Result < T > {
190- match r {
191- Err ( ref e) if stdio:: is_ebadf ( e) => Ok ( default) ,
192- r => r,
199+ handle_ebadf ( self . 0 . write_fmt ( fmt) , || Ok ( ( ) ) )
193200 }
194201}
195202
196- fn handle_ebadf_lazy < T > ( r : io:: Result < T > , default : impl FnOnce ( ) -> T ) -> io:: Result < T > {
203+ fn handle_ebadf < T > ( r : io:: Result < T > , default : impl FnOnce ( ) -> io :: Result < T > ) -> io:: Result < T > {
197204 match r {
198- Err ( ref e) if stdio:: is_ebadf ( e) => Ok ( default ( ) ) ,
205+ Err ( ref e) if stdio:: is_ebadf ( e) => default ( ) ,
199206 r => r,
200207 }
201208}
0 commit comments