File tree Expand file tree Collapse file tree 1 file changed +16
-12
lines changed Expand file tree Collapse file tree 1 file changed +16
-12
lines changed Original file line number Diff line number Diff line change @@ -248,12 +248,14 @@ pub fn start_program(prog: &str, args: &[~str]) -> Program {
248
248
}
249
249
250
250
fn read_all ( rd : io:: Reader ) -> ~str {
251
- let mut buf = ~"";
252
- while !rd. eof ( ) {
253
- let bytes = rd. read_bytes ( 4096 u) ;
254
- buf += str:: from_bytes ( bytes) ;
255
- }
256
- move buf
251
+ let buf = io:: with_bytes_writer ( |wr| {
252
+ let mut bytes = [ mut 0 , ..4096 ] ;
253
+ while !rd. eof ( ) {
254
+ let nread = rd. read ( bytes, bytes. len ( ) ) ;
255
+ wr. write ( bytes. view ( 0 , nread) ) ;
256
+ }
257
+ } ) ;
258
+ str:: from_bytes ( buf)
257
259
}
258
260
259
261
/**
@@ -341,13 +343,15 @@ fn writeclose(fd: c_int, s: ~str) {
341
343
fn readclose ( fd : c_int ) -> ~str {
342
344
let file = os:: fdopen ( fd) ;
343
345
let reader = io:: FILE_reader ( file, false ) ;
344
- let mut buf = ~"";
345
- while !reader. eof ( ) {
346
- let bytes = reader. read_bytes ( 4096 u) ;
347
- buf += str:: from_bytes ( bytes) ;
348
- }
346
+ let buf = io:: with_bytes_writer ( |writer| {
347
+ let mut bytes = [ mut 0 , ..4096 ] ;
348
+ while !reader. eof ( ) {
349
+ let nread = reader. read ( bytes, bytes. len ( ) ) ;
350
+ writer. write ( bytes. view ( 0 , nread) ) ;
351
+ }
352
+ } ) ;
349
353
os:: fclose ( file) ;
350
- move buf
354
+ str :: from_bytes ( buf)
351
355
}
352
356
353
357
/// Waits for a process to exit and returns the exit code
You can’t perform that action at this time.
0 commit comments