File tree 4 files changed +37
-1
lines changed
4 files changed +37
-1
lines changed Original file line number Diff line number Diff line change @@ -355,6 +355,28 @@ where
355
355
self . pos += n as u64 ;
356
356
Ok ( ( ) )
357
357
}
358
+
359
+ fn read_to_end ( & mut self , buf : & mut Vec < u8 > ) -> io:: Result < usize > {
360
+ let content = self . remaining_slice ( ) ;
361
+ let len = content. len ( ) ;
362
+ buf. try_reserve ( len) ?;
363
+ buf. extend_from_slice ( content) ;
364
+ self . pos += len as u64 ;
365
+
366
+ Ok ( len)
367
+ }
368
+
369
+ fn read_to_string ( & mut self , buf : & mut String ) -> io:: Result < usize > {
370
+ let content = crate :: str:: from_utf8 ( self . remaining_slice ( ) ) . map_err ( |_| {
371
+ io:: const_io_error!( ErrorKind :: InvalidData , "stream did not contain valid UTF-8" )
372
+ } ) ?;
373
+ let len = content. len ( ) ;
374
+ buf. try_reserve ( len) ?;
375
+ buf. push_str ( content) ;
376
+ self . pos += len as u64 ;
377
+
378
+ Ok ( len)
379
+ }
358
380
}
359
381
360
382
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
Original file line number Diff line number Diff line change @@ -315,8 +315,9 @@ impl Read for &[u8] {
315
315
let content = str:: from_utf8 ( self ) . map_err ( |_| {
316
316
io:: const_io_error!( ErrorKind :: InvalidData , "stream did not contain valid UTF-8" )
317
317
} ) ?;
318
- buf. push_str ( content) ;
319
318
let len = self . len ( ) ;
319
+ buf. try_reserve ( len) ?;
320
+ buf. push_str ( content) ;
320
321
* self = & self [ len..] ;
321
322
Ok ( len)
322
323
}
@@ -470,6 +471,7 @@ impl<A: Allocator> Read for VecDeque<u8, A> {
470
471
let string = str:: from_utf8 ( content) . map_err ( |_| {
471
472
io:: const_io_error!( ErrorKind :: InvalidData , "stream did not contain valid UTF-8" )
472
473
} ) ?;
474
+ buf. try_reserve ( len) ?;
473
475
buf. push_str ( string) ;
474
476
self . clear ( ) ;
475
477
Ok ( len)
Original file line number Diff line number Diff line change @@ -578,6 +578,10 @@ impl io::Read for UnixStream {
578
578
io:: Read :: read ( & mut & * self , buf)
579
579
}
580
580
581
+ fn read_buf ( & mut self , buf : io:: BorrowedCursor < ' _ > ) -> io:: Result < ( ) > {
582
+ io:: Read :: read_buf ( & mut & * self , buf)
583
+ }
584
+
581
585
fn read_vectored ( & mut self , bufs : & mut [ IoSliceMut < ' _ > ] ) -> io:: Result < usize > {
582
586
io:: Read :: read_vectored ( & mut & * self , bufs)
583
587
}
@@ -594,6 +598,10 @@ impl<'a> io::Read for &'a UnixStream {
594
598
self . 0 . read ( buf)
595
599
}
596
600
601
+ fn read_buf ( & mut self , buf : io:: BorrowedCursor < ' _ > ) -> io:: Result < ( ) > {
602
+ self . 0 . read_buf ( buf)
603
+ }
604
+
597
605
fn read_vectored ( & mut self , bufs : & mut [ IoSliceMut < ' _ > ] ) -> io:: Result < usize > {
598
606
self . 0 . read_vectored ( bufs)
599
607
}
Original file line number Diff line number Diff line change @@ -439,6 +439,10 @@ impl Read for ChildStderr {
439
439
fn is_read_vectored ( & self ) -> bool {
440
440
self . inner . is_read_vectored ( )
441
441
}
442
+
443
+ fn read_to_end ( & mut self , buf : & mut Vec < u8 > ) -> io:: Result < usize > {
444
+ self . inner . read_to_end ( buf)
445
+ }
442
446
}
443
447
444
448
impl AsInner < AnonPipe > for ChildStderr {
You can’t perform that action at this time.
0 commit comments