From: Joey Hess Date: Fri, 11 Apr 2008 22:34:34 +0000 (-0400) Subject: optimize tempfile copying X-Git-Tag: 0.29~5 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f31909ff74c064ea0b5126219b3e8f7b8826bee;p=moreutils optimize tempfile copying Reuse the buffer and copy in chunks that are the full buffer size. --- diff --git a/sponge.c b/sponge.c index a02e0e7..cf77e05 100644 --- a/sponge.c +++ b/sponge.c @@ -199,15 +199,14 @@ static void write_buff_out(char* buff, size_t length, FILE *fd) { } } -static void copy_tmpfile(FILE *tmpfile, FILE *outfile) { - char buf[BUFF_SIZE]; +static void copy_tmpfile(FILE *tmpfile, FILE *outfile, char *buf, size_t size) { if (fseek(tmpfile, 0, SEEK_SET)) { perror("could to seek to start of temporary file"); fclose(tmpfile); exit(1); } - while (fread(buf, BUFF_SIZE, 1, tmpfile) > 0) { - write_buff_out(buf, BUFF_SIZE, outfile); + while (fread(buf, size, 1, tmpfile) > 0) { + write_buff_out(buf, size, outfile); } if (ferror(tmpfile)) { perror("read temporary file"); @@ -293,7 +292,6 @@ int main (int argc, char **argv) { /* write whatever we have in memory to tmpfile */ if (bufused) write_buff_tmp(bufstart, bufused, tmpfile); - free(bufstart); if (fflush(tmpfile) != 0) { perror("fflush"); exit(1); @@ -322,10 +320,10 @@ int main (int argc, char **argv) { perror("error opening output file"); exit(1); } - copy_tmpfile(tmpfile, outfile); + copy_tmpfile(tmpfile, outfile, bufstart, bufsize); } else { - copy_tmpfile(tmpfile, stdout); + copy_tmpfile(tmpfile, stdout, bufstart, bufsize); } } else {