Copy files until EOF, not the reported file size, to deal with bad sizes in
the proc filesystem.
diff --git a/libbb/copy_file.c b/libbb/copy_file.c
index 22684be..24bdf90 100644
--- a/libbb/copy_file.c
+++ b/libbb/copy_file.c
@@ -94,7 +94,7 @@
 
 			umask(saved_umask);
 		}
-		
+
 		/* Recursively copy files in SOURCE.  */
 		if ((dp = opendir(source)) == NULL) {
 			perror_msg("unable to open directory `%s'", source);
@@ -116,7 +116,7 @@
 			free(new_source);
 			free(new_dest);
 		}
-		
+
 		/* ??? What if an error occurs in readdir?  */
 
 		if (closedir(dp) < 0) {
@@ -173,7 +173,8 @@
 			goto end;
 		}
 
-		copy_file_chunk(sfp, dfp, source_stat.st_size);
+		if (copy_file_chunk(sfp, dfp, -1) < 0)
+			status = -1;
 
 		if (fclose(dfp) < 0) {
 			perror_msg("unable to close `%s'", dest);