X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/f6e917fcce86638e2a06c48c0df714c3dd93c8b0..d06d7f1afd22a5224458033c2033a2447a0b9296:/IkiWiki/Render.pm

diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index dcd107b81..d8bc5a9d9 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -195,10 +195,25 @@ sub render ($) { #{{{
 		$oldpagemtime{$page}=time;
 	}
 	else {
-		my $content=readfile($srcfile, 1);
+		my $srcfd=readfile($srcfile, 1, 1);
 		delete $depends{$file};
 		will_render($file, $file, 1);
-		writefile($file, $config{destdir}, $content, 1);
+		my $destfd=writefile($file, $config{destdir}, undef, 1, 1);
+		my $blksize = 16384;
+		my ($len, $buf, $written);
+		while ($len = sysread $srcfd, $buf, $blksize) {
+			if (! defined $len) {
+				next if $! =~ /^Interrupted/;
+				error("failed to read $srcfile: $!");
+			}
+			my $offset = 0;
+			while ($len) {
+				defined($written = syswrite OUT, $buf, $len, $offset)
+					or error("failed to write $file: $!");
+				$len -= $written;
+				$offset += $written;
+			}
+		}
 		$oldpagemtime{$file}=time;
 	}
 } #}}}
@@ -345,7 +360,7 @@ sub refresh () { #{{{
 				foreach my $file (keys %rendered, @del) {
 					next if $f eq $file;
 					my $page=pagename($file);
-					if (pagespec_match($page, $depends{$p})) {
+					if (pagespec_match($page, $depends{$p}, $p)) {
 						debug(sprintf(gettext("rendering %s, which depends on %s"), $f, $page));
 						render($f);
 						$rendered{$f}=1;