From: Joey Hess Date: Tue, 1 Jul 2008 04:42:23 +0000 (-0400) Subject: break out fast_file_copy X-Git-Tag: 2.52~14^2~28 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;ds=inline;h=0f8ea7ecca27a9e73af5c515f637f543912c7076;p=ikiwiki.git break out fast_file_copy --- diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 272eb239a..2cdec421f 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -180,6 +180,30 @@ sub scan ($) { #{{{ } } #}}} +sub fast_file_copy ($$$$$) { #{{{ + my $srcfile=shift; + my $destfile=shift; + my $srcfd=shift; + my $destfd=shift; + my $cleanup=shift; + + my $blksize = 16384; + my ($len, $buf, $written); + while ($len = sysread $srcfd, $buf, $blksize) { + if (! defined $len) { + next if $! =~ /^Interrupted/; + error("failed to read $srcfile: $!", $cleanup); + } + my $offset = 0; + while ($len) { + defined($written = syswrite $destfd, $buf, $len, $offset) + or error("failed to write $destfile: $!", $cleanup); + $len -= $written; + $offset += $written; + } + } +} + sub render ($) { #{{{ my $file=shift; @@ -215,24 +239,7 @@ sub render ($) { #{{{ my $srcfd=readfile($srcfile, 1, 1); writefile($file, $config{destdir}, undef, 1, sub { - my $destfd=shift; - my $cleanup=shift; - - my $blksize = 16384; - my ($len, $buf, $written); - while ($len = sysread $srcfd, $buf, $blksize) { - if (! defined $len) { - next if $! =~ /^Interrupted/; - error("failed to read $srcfile: $!", $cleanup); - } - my $offset = 0; - while ($len) { - defined($written = syswrite $destfd, $buf, $len, $offset) - or error("failed to write $file: $!", $cleanup); - $len -= $written; - $offset += $written; - } - } + fast_file_copy($srcfile, $file, $srcfd, @_); }); } } #}}}