File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -248,12 +248,14 @@ pub fn start_program(prog: &str, args: &[~str]) -> Program {
248248}
249249
250250fn 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)
257259}
258260
259261/**
@@ -341,13 +343,15 @@ fn writeclose(fd: c_int, s: ~str) {
341343fn readclose ( fd : c_int ) -> ~str {
342344 let file = os:: fdopen ( fd) ;
343345 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+ } ) ;
349353 os:: fclose ( file) ;
350- move buf
354+ str :: from_bytes ( buf)
351355}
352356
353357/// Waits for a process to exit and returns the exit code
Original file line number Diff line number Diff line change @@ -136,13 +136,15 @@ fn readclose(fd: libc::c_int) -> ~str {
136136 // Copied from run::program_output
137137 let file = os::fdopen(fd);
138138 let reader = io::FILE_reader(file, false);
139- let mut buf = ~" ";
140- while !reader.eof() {
141- let bytes = reader.read_bytes(4096u);
142- buf += str::from_bytes(bytes);
143- }
139+ let buf = io::with_bytes_writer(|writer| {
140+ let mut bytes = [mut 0, ..4096];
141+ while !reader.eof() {
142+ let nread = reader.read(bytes, bytes.len());
143+ writer.write(bytes.view(0, nread));
144+ }
145+ });
144146 os::fclose(file);
145- return buf;
147+ str::from_bytes( buf)
146148}
147149
148150fn generic_writer(+process: fn~(markdown: ~str)) -> Writer {
You can’t perform that action at this time.
0 commit comments